{
  "overall_score": 64.2,
  "grade_letter": "C",
  "grade_label": "Needs Improvement",
  "category_scores": {
    "pixel_capi": {
      "score": 18.8,
      "grade": "F",
      "total_checks": 10,
      "evaluated": 2,
      "na_count": 8,
      "blocked_count": 0,
      "limited_data": true
    },
    "creative": {
      "score": 67.0,
      "grade": "C",
      "total_checks": 15,
      "evaluated": 10,
      "na_count": 5,
      "blocked_count": 0,
      "limited_data": false
    },
    "structure": {
      "score": 70.0,
      "grade": "C",
      "total_checks": 18,
      "evaluated": 12,
      "na_count": 6,
      "blocked_count": 0,
      "limited_data": false
    },
    "audience": {
      "score": 100.0,
      "grade": "A",
      "total_checks": 8,
      "evaluated": 4,
      "na_count": 1,
      "blocked_count": 3,
      "limited_data": false
    },
    "funnel": {
      "score": 59.4,
      "grade": "D",
      "total_checks": 4,
      "evaluated": 4,
      "na_count": 0,
      "blocked_count": 0,
      "limited_data": false
    }
  },
  "radar_scores": {
    "pixel_capi": {
      "current": 1.0,
      "potential": 5.0
    },
    "creative": {
      "current": 3.0,
      "potential": 4.0
    },
    "structure": {
      "current": 3.0,
      "potential": 5.0
    },
    "audience": {
      "current": 5.0,
      "potential": 5.0
    },
    "funnel": {
      "current": 2.0,
      "potential": 5.0
    }
  },
  "killer_stat": {
    "check_id": "M01",
    "text": "No active pixels detected. Tracking data is unreliable."
  },
  "results_count": {
    "pass": 16,
    "warning": 11,
    "fail": 5,
    "na": 20,
    "access_blocked": 3
  },
  "total_checks": 55,
  "quick_wins_count": 6,
  "quick_wins": [
    {
      "check_id": "M01",
      "name": "Meta Pixel installed",
      "fix_time_minutes": 15,
      "detail": "No active pixels detected. Tracking data is unreliable."
    },
    {
      "check_id": "M09",
      "name": "iOS attribution window",
      "fix_time_minutes": 2,
      "detail": "14/18 use 7d/1d, 2 use 1d click only, 2 have other settings."
    },
    {
      "check_id": "M25",
      "name": "Format diversity",
      "fix_time_minutes": 15,
      "detail": "Only 2 formats (image, video). Add a third format for better reach."
    },
    {
      "check_id": "M35",
      "name": "Attribution setting",
      "fix_time_minutes": 2,
      "detail": "7/10 use recommended 7d/1d setting. Standardize attribution windows across all ad sets."
    },
    {
      "check_id": "M-FA1",
      "name": "False retargeting detection",
      "fix_time_minutes": 10,
      "detail": "1/2 non-ASC retargeting campaigns have NO custom audience. These are effectively prospecting campaigns disguised as retargeting: NM.|Products|Social|Retargeting|Conversi."
    },
    {
      "check_id": "M-ST3",
      "name": "ASC+ existing customer budget cap",
      "fix_time_minutes": 2,
      "detail": "Found 6 ASC campaigns (3 active) but no existing customer budget cap detected. Without a cap, ASC defaults to spending on existing customers who would have purchased anyway. Set cap <=20% for growth."
    }
  ],
  "checks": [
    {
      "check_id": "M01",
      "category": "pixel_capi",
      "check_name": "Meta Pixel installed",
      "severity": "critical",
      "result": "fail",
      "value": "0 active pixels",
      "detail": "No active pixels detected. Tracking data is unreliable.",
      "evidence": {},
      "quick_win": true,
      "fix_time_minutes": 15,
      "human_title": "Pixel installation status",
      "category_display": "Pixel / CAPI Health",
      "confidence": "UNVERIFIED"
    },
    {
      "check_id": "M02",
      "category": "pixel_capi",
      "check_name": "CAPI active",
      "severity": "critical",
      "result": "na",
      "value": "CAPI status unknown",
      "detail": "CAPI status cannot be fully verified via API. Deploy CAPI Gateway for 30-40% data recovery.",
      "evidence": {},
      "quick_win": true,
      "fix_time_minutes": 15,
      "human_title": "Server-side tracking (CAPI) status",
      "category_display": "Pixel / CAPI Health",
      "confidence": "UNVERIFIED"
    },
    {
      "check_id": "M03",
      "category": "pixel_capi",
      "check_name": "Event deduplication",
      "severity": "critical",
      "result": "na",
      "value": "Requires manual verification",
      "detail": "Event deduplication (event_id matching) requires Events Manager verification. Not available via API.",
      "evidence": {},
      "quick_win": false,
      "fix_time_minutes": 0,
      "human_title": "Event deduplication between Pixel and CAPI",
      "category_display": "Pixel / CAPI Health",
      "confidence": "UNVERIFIED"
    },
    {
      "check_id": "M04",
      "category": "pixel_capi",
      "check_name": "EMQ score",
      "severity": "critical",
      "result": "na",
      "value": "Not available via API",
      "detail": "Event Match Quality scores are not available via the Marketing API. Check Events Manager manually. Target: >=8.0 for Purchase event.",
      "evidence": {},
      "quick_win": false,
      "fix_time_minutes": 0,
      "human_title": "Event Match Quality score",
      "category_display": "Pixel / CAPI Health",
      "confidence": "UNVERIFIED"
    },
    {
      "check_id": "M05",
      "category": "pixel_capi",
      "check_name": "Domain verification",
      "severity": "high",
      "result": "na",
      "value": "Requires Business Manager check",
      "detail": "Domain verification status not fully available via API. Verify in Business Manager.",
      "evidence": {},
      "quick_win": true,
      "fix_time_minutes": 5,
      "human_title": "Domain verification in Business Manager",
      "category_display": "Pixel / CAPI Health",
      "confidence": "UNVERIFIED"
    },
    {
      "check_id": "M06",
      "category": "pixel_capi",
      "check_name": "AEM configured",
      "severity": "high",
      "result": "na",
      "value": "Requires Events Manager check",
      "detail": "AEM configuration (top 8 prioritized events) requires manual verification in Events Manager.",
      "evidence": {},
      "quick_win": false,
      "fix_time_minutes": 0,
      "human_title": "Aggregated Event Measurement configuration",
      "category_display": "Pixel / CAPI Health",
      "confidence": "UNVERIFIED"
    },
    {
      "check_id": "M07",
      "category": "pixel_capi",
      "check_name": "Standard vs custom events",
      "severity": "high",
      "result": "na",
      "value": "Requires Events Manager check",
      "detail": "Event configuration details (standard vs custom) require manual verification.",
      "evidence": {},
      "quick_win": false,
      "fix_time_minutes": 0,
      "human_title": "Standard vs custom event usage",
      "category_display": "Pixel / CAPI Health",
      "confidence": "UNVERIFIED"
    },
    {
      "check_id": "M08",
      "category": "pixel_capi",
      "check_name": "CAPI Gateway",
      "severity": "medium",
      "result": "na",
      "value": "Requires manual verification",
      "detail": "CAPI Gateway deployment status not available via API. Check Events Manager for server-side event sources.",
      "evidence": {},
      "quick_win": false,
      "fix_time_minutes": 0,
      "human_title": "CAPI Gateway deployment",
      "category_display": "Pixel / CAPI Health",
      "confidence": "UNVERIFIED"
    },
    {
      "check_id": "M09",
      "category": "pixel_capi",
      "check_name": "iOS attribution window",
      "severity": "high",
      "result": "warning",
      "value": "78% using 7d_click/1d_view",
      "detail": "14/18 use 7d/1d, 2 use 1d click only, 2 have other settings.",
      "evidence": {
        "7d_click_1d_view": 14,
        "1d_click_only": 2,
        "other": 2,
        "not_set": 0
      },
      "quick_win": true,
      "fix_time_minutes": 2,
      "human_title": "iOS attribution window configuration",
      "category_display": "Pixel / CAPI Health",
      "confidence": "VERIFIED"
    },
    {
      "check_id": "M10",
      "category": "pixel_capi",
      "check_name": "Data freshness",
      "severity": "medium",
      "result": "na",
      "value": "Requires Events Manager check",
      "detail": "Real-time event lag cannot be determined via the Marketing API snapshot.",
      "evidence": {},
      "quick_win": false,
      "fix_time_minutes": 0,
      "human_title": "Data freshness and event lag",
      "category_display": "Pixel / CAPI Health",
      "confidence": "UNVERIFIED"
    },
    {
      "check_id": "M25",
      "category": "creative",
      "check_name": "Format diversity",
      "severity": "critical",
      "result": "warning",
      "value": "2 formats",
      "detail": "Only 2 formats (image, video). Add a third format for better reach.",
      "evidence": {
        "formats": [
          "image",
          "video"
        ],
        "unknown_count": 0
      },
      "quick_win": true,
      "fix_time_minutes": 15,
      "human_title": "Ad creative format diversity",
      "category_display": "Creative (Diversity & Fatigue)",
      "confidence": "VERIFIED"
    },
    {
      "check_id": "M26",
      "category": "creative",
      "check_name": "Creative volume per ad set",
      "severity": "high",
      "result": "warning",
      "value": "Avg 6.6 ads/adset",
      "detail": "Average 6.6 ads per active ad set. 4 ad set(s) below recommended 5 ads.",
      "evidence": {
        "avg_ads_per_adset": 6.6,
        "adsets_under_3": 3,
        "adsets_under_5": 4
      },
      "quick_win": false,
      "fix_time_minutes": 0,
      "human_title": "Number of creatives per ad set",
      "category_display": "Creative (Diversity & Fatigue)",
      "confidence": "VERIFIED"
    },
    {
      "check_id": "M27",
      "category": "creative",
      "check_name": "Video aspect ratios",
      "severity": "high",
      "result": "warning",
      "value": "47 video creatives",
      "detail": "Found 47 video creatives. Verify that 9:16 aspect ratio is available for Reels/Stories placements.",
      "evidence": {
        "video_count": 47
      },
      "quick_win": false,
      "fix_time_minutes": 0,
      "human_title": "Video aspect ratio coverage (9:16 for Reels)",
      "category_display": "Creative (Diversity & Fatigue)",
      "confidence": "ESTIMATED"
    },
    {
      "check_id": "M28",
      "category": "creative",
      "check_name": "Creative fatigue",
      "severity": "critical",
      "result": "pass",
      "value": "CTR change: +12.9%",
      "detail": "CTR stable or improving (+12.9%). Early: 2.06%, Recent: 2.33%, Frequency: 0.0.",
      "evidence": {
        "ctr_early": 2.061,
        "ctr_late": 2.326,
        "ctr_change_pct": 12.9,
        "frequency_late": 0
      },
      "quick_win": false,
      "fix_time_minutes": 0,
      "human_title": "Creative fatigue detection",
      "category_display": "Creative (Diversity & Fatigue)",
      "confidence": "CALCULATED"
    },
    {
      "check_id": "M29",
      "category": "creative",
      "check_name": "Hook rate (video)",
      "severity": "high",
      "result": "na",
      "value": "Not available via API",
      "detail": "Video hook rate (skip rate in first 3 seconds) requires Ads Manager breakdown. Check video_p25_watched_actions for proxy.",
      "evidence": {},
      "quick_win": false,
      "fix_time_minutes": 0,
      "human_title": "Video hook rate (3-second retention)",
      "category_display": "Creative (Diversity & Fatigue)",
      "confidence": "UNVERIFIED"
    },
    {
      "check_id": "M30",
      "category": "creative",
      "check_name": "Social proof / organic boosting",
      "severity": "medium",
      "result": "fail",
      "value": "0% boosted",
      "detail": "Only 0/109 (0%) creatives use organic posts. Boosting organic content adds social proof (likes, comments, shares).",
      "evidence": {
        "with_story_id": 0,
        "total": 109
      },
      "quick_win": false,
      "fix_time_minutes": 0,
      "human_title": "Social proof through organic post boosting",
      "category_display": "Creative (Diversity & Fatigue)",
      "confidence": "CALCULATED"
    },
    {
      "check_id": "M31",
      "category": "creative",
      "check_name": "UGC content",
      "severity": "high",
      "result": "na",
      "value": "Requires manual review",
      "detail": "UGC vs corporate creative classification requires visual inspection. Target: >=30% UGC/social-native content.",
      "evidence": {},
      "quick_win": false,
      "fix_time_minutes": 0,
      "human_title": "User-generated content (UGC) proportion",
      "category_display": "Creative (Diversity & Fatigue)",
      "confidence": "UNVERIFIED"
    },
    {
      "check_id": "M32",
      "category": "creative",
      "check_name": "Advantage+ Creative",
      "severity": "medium",
      "result": "warning",
      "value": "0 with enhancements",
      "detail": "No creatives using Advantage+ Creative enhancements. Test enabling for automated format/text optimization.",
      "evidence": {},
      "quick_win": false,
      "fix_time_minutes": 0,
      "human_title": "Advantage+ Creative enhancements",
      "category_display": "Creative (Diversity & Fatigue)",
      "confidence": "VERIFIED"
    },
    {
      "check_id": "M-CR1",
      "category": "creative",
      "check_name": "Creative freshness",
      "severity": "high",
      "result": "pass",
      "value": "Newest ad: 5 days",
      "detail": "Most recent ad created 5 days ago. Fresh creative is being tested.",
      "evidence": {},
      "quick_win": false,
      "fix_time_minutes": 0,
      "human_title": "Creative freshness (days since newest ad)",
      "category_display": "Creative (Diversity & Fatigue)",
      "confidence": "VERIFIED"
    },
    {
      "check_id": "M-CR2",
      "category": "creative",
      "check_name": "Frequency \u2014 Prospecting",
      "severity": "high",
      "result": "na",
      "value": "No frequency data",
      "detail": "Frequency data not available in insights.",
      "evidence": {},
      "quick_win": false,
      "fix_time_minutes": 0,
      "human_title": "Ad frequency for prospecting audiences",
      "category_display": "Creative (Diversity & Fatigue)",
      "confidence": "UNVERIFIED"
    },
    {
      "check_id": "M-CR3",
      "category": "creative",
      "check_name": "Frequency \u2014 Retargeting",
      "severity": "medium",
      "result": "na",
      "value": "No frequency data",
      "detail": "Frequency data not available.",
      "evidence": {},
      "quick_win": false,
      "fix_time_minutes": 0,
      "human_title": "Ad frequency for retargeting audiences",
      "category_display": "Creative (Diversity & Fatigue)",
      "confidence": "UNVERIFIED"
    },
    {
      "check_id": "M-CR4",
      "category": "creative",
      "check_name": "CTR benchmark",
      "severity": "high",
      "result": "pass",
      "value": "CTR: 2.18%",
      "detail": "Overall CTR is 2.18% \u2014 above 1.0% benchmark.",
      "evidence": {
        "ctr": 2.184,
        "clicks": 349911,
        "impressions": 16018341
      },
      "quick_win": false,
      "fix_time_minutes": 0,
      "human_title": "Click-through rate vs industry benchmark",
      "category_display": "Creative (Diversity & Fatigue)",
      "confidence": "CALCULATED"
    },
    {
      "check_id": "M-CR5",
      "category": "creative",
      "check_name": "Creative-demographic alignment",
      "severity": "high",
      "result": "na",
      "value": "Requires age/gender breakdown",
      "detail": "Age/gender engagement vs conversion breakdown not available in current data pull. Requires separate insights query with age,gender breakdown per creative.",
      "evidence": {},
      "quick_win": false,
      "fix_time_minutes": 0,
      "human_title": "Creative-demographic alignment",
      "category_display": "Creative (Diversity & Fatigue)",
      "confidence": "UNVERIFIED"
    },
    {
      "check_id": "M-CR6",
      "category": "creative",
      "check_name": "Text overlay / USP presence",
      "severity": "medium",
      "result": "fail",
      "value": "0% with text",
      "detail": "Only 0/109 (0%) creatives have text/USP. Creatives lack context \u2014 add text overlays with value propositions.",
      "evidence": {
        "with_text": 0,
        "total": 109
      },
      "quick_win": false,
      "fix_time_minutes": 0,
      "human_title": "Value proposition in ad text",
      "category_display": "Creative (Diversity & Fatigue)",
      "confidence": "ESTIMATED"
    },
    {
      "check_id": "M-CR7",
      "category": "creative",
      "check_name": "Persona-creative match",
      "severity": "medium",
      "result": "pass",
      "value": "0/153 identical pairs",
      "detail": "Different creative sets across audience segments \u2014 good persona matching.",
      "evidence": {},
      "quick_win": false,
      "fix_time_minutes": 0,
      "human_title": "Creative differentiation across audiences",
      "category_display": "Creative (Diversity & Fatigue)",
      "confidence": "CALCULATED"
    },
    {
      "check_id": "M11",
      "category": "structure",
      "check_name": "Campaign count",
      "severity": "high",
      "result": "warning",
      "value": "8 active campaigns",
      "detail": "8 active campaigns. Slightly fragmented \u2014 consider consolidating to improve learning phase efficiency.",
      "evidence": {
        "active_campaigns": 8,
        "total_campaigns": 11
      },
      "quick_win": false,
      "fix_time_minutes": 0,
      "human_title": "Number of active campaigns (consolidation)",
      "category_display": "Account Structure",
      "confidence": "VERIFIED"
    },
    {
      "check_id": "M12",
      "category": "structure",
      "check_name": "CBO vs ABO",
      "severity": "high",
      "result": "pass",
      "value": "75% CBO",
      "detail": "6/8 active campaigns use CBO (Campaign Budget Optimization). Good \u2014 lets Meta optimize budget across ad sets.",
      "evidence": {
        "cbo_count": 6,
        "abo_count": 2
      },
      "quick_win": false,
      "fix_time_minutes": 0,
      "human_title": "Campaign Budget Optimization (CBO) adoption",
      "category_display": "Account Structure",
      "confidence": "VERIFIED"
    },
    {
      "check_id": "M13",
      "category": "structure",
      "check_name": "Learning phase",
      "severity": "critical",
      "result": "na",
      "value": "Learning phase data not available",
      "detail": "learning_phase_info not returned for active ad sets. Check Ads Manager directly.",
      "evidence": {},
      "quick_win": false,
      "fix_time_minutes": 0,
      "human_title": "Learning phase health across ad sets",
      "category_display": "Account Structure",
      "confidence": "UNVERIFIED"
    },
    {
      "check_id": "M14",
      "category": "structure",
      "check_name": "Learning resets",
      "severity": "high",
      "result": "na",
      "value": "Requires edit history",
      "detail": "Learning phase reset detection requires campaign edit history, which is not available from a single data snapshot.",
      "evidence": {},
      "quick_win": false,
      "fix_time_minutes": 0,
      "human_title": "Learning phase reset frequency",
      "category_display": "Account Structure",
      "confidence": "UNVERIFIED"
    },
    {
      "check_id": "M15",
      "category": "structure",
      "check_name": "Advantage+ Sales",
      "severity": "medium",
      "result": "pass",
      "value": "6 ASC campaigns",
      "detail": "Found 6 ASC/Advantage+ campaigns (3 active). ASC is being tested.",
      "evidence": {
        "asc_campaigns": [
          "NM.|Products|Social|ASC+|Conversions_Website_Purchase|ASC+|Belgique",
          "NM.|Products|Social|ASC+|Conversions_Website_Purchase|ASC+_Catalog",
          "NM.|Products|Social|ASC+|Conversions_Website_Purchase|ASC+|7DayClick",
          "NM.|Products|Social|ASC+|Conversions_Website_Purchase|ASC+",
          "NM.|Products|Social|ASC+|Conversions_Website_Purchase|ASC+_Catalog|Channable",
          "NM.|Products|Social|ASC+|Conversions_Website_Purchase|ASC+|CreativeTesting"
        ]
      },
      "quick_win": false,
      "fix_time_minutes": 0,
      "human_title": "Advantage+ Shopping Campaigns testing",
      "category_display": "Account Structure",
      "confidence": "VERIFIED"
    },
    {
      "check_id": "M16",
      "category": "structure",
      "check_name": "Ad set consolidation",
      "severity": "high",
      "result": "fail",
      "value": "2 overlapping pairs",
      "detail": "2/2 ad set pairs share similar targeting. Significant audience overlap \u2014 your ads are competing against each other. Consolidate similar ad sets.",
      "evidence": {},
      "quick_win": false,
      "fix_time_minutes": 0,
      "human_title": "Ad set audience overlap / cannibalization",
      "category_display": "Account Structure",
      "confidence": "CALCULATED"
    },
    {
      "check_id": "M17",
      "category": "structure",
      "check_name": "Budget distribution",
      "severity": "high",
      "result": "pass",
      "value": "Avg EUR 350.00/day",
      "detail": "All 2 ad sets with budgets are >=EUR 10/day. Average: EUR 350.00/day.",
      "evidence": {
        "under_5_eur": 0,
        "under_10_eur": 0,
        "avg_budget_eur": 350.0
      },
      "quick_win": false,
      "fix_time_minutes": 0,
      "human_title": "Minimum daily budget per ad set",
      "category_display": "Account Structure",
      "confidence": "VERIFIED"
    },
    {
      "check_id": "M18",
      "category": "structure",
      "check_name": "Objective alignment",
      "severity": "high",
      "result": "warning",
      "value": "1 misaligned",
      "detail": "1 active campaigns use non-sales objectives: OUTCOME_LEADS. Ensure these support the purchase funnel.",
      "evidence": {
        "misaligned": [
          {
            "name": "NM.|Lead|Lead_Generation|NEW",
            "objective": "OUTCOME_LEADS"
          }
        ]
      },
      "quick_win": false,
      "fix_time_minutes": 0,
      "human_title": "Campaign objective alignment with sales goal",
      "category_display": "Account Structure",
      "confidence": "VERIFIED"
    },
    {
      "check_id": "M33",
      "category": "structure",
      "check_name": "Advantage+ Placements",
      "severity": "medium",
      "result": "pass",
      "value": "80% automatic",
      "detail": "8/10 ad sets use Advantage+ Placements (automatic). Letting Meta optimize placement distribution.",
      "evidence": {},
      "quick_win": false,
      "fix_time_minutes": 0,
      "human_title": "Advantage+ Placements usage",
      "category_display": "Account Structure",
      "confidence": "VERIFIED"
    },
    {
      "check_id": "M34",
      "category": "structure",
      "check_name": "Placement review",
      "severity": "medium",
      "result": "pass",
      "value": "6 platforms active",
      "detail": "Placement breakdown available across 6 platforms: {'facebook': '53.2%', 'instagram': '44.0%', 'audience_network': '2.8%', 'messenger': '0.0%', 'threads': '0.0%', 'unknown': '0.0%'}.",
      "evidence": {
        "spend_by_platform": {
          "audience_network": 2518.75,
          "facebook": 47361.83,
          "instagram": 39132.06,
          "messenger": 0.1,
          "threads": 0.02,
          "unknown": 0.0
        }
      },
      "quick_win": false,
      "fix_time_minutes": 0,
      "human_title": "Multi-platform placement distribution",
      "category_display": "Account Structure",
      "confidence": "VERIFIED"
    },
    {
      "check_id": "M35",
      "category": "structure",
      "check_name": "Attribution setting",
      "severity": "high",
      "result": "warning",
      "value": "70% correct",
      "detail": "7/10 use recommended 7d/1d setting. Standardize attribution windows across all ad sets.",
      "evidence": {},
      "quick_win": true,
      "fix_time_minutes": 2,
      "human_title": "Attribution window standardization",
      "category_display": "Account Structure",
      "confidence": "VERIFIED"
    },
    {
      "check_id": "M36",
      "category": "structure",
      "check_name": "Bid strategy",
      "severity": "high",
      "result": "pass",
      "value": "6x LOWEST_COST_WITHOUT_CAP, 2x NOT_SET",
      "detail": "Bid strategies: 6x LOWEST_COST_WITHOUT_CAP, 2x NOT_SET.",
      "evidence": {
        "LOWEST_COST_WITHOUT_CAP": 6,
        "NOT_SET": 2
      },
      "quick_win": false,
      "fix_time_minutes": 0,
      "human_title": "Bid strategy optimization",
      "category_display": "Account Structure",
      "confidence": "VERIFIED"
    },
    {
      "check_id": "M37",
      "category": "structure",
      "check_name": "Campaign frequency",
      "severity": "high",
      "result": "na",
      "value": "No frequency data",
      "detail": "Frequency data not available.",
      "evidence": {},
      "quick_win": false,
      "fix_time_minutes": 0,
      "human_title": "Overall campaign frequency control",
      "category_display": "Account Structure",
      "confidence": "UNVERIFIED"
    },
    {
      "check_id": "M38",
      "category": "structure",
      "check_name": "Breakdown reporting",
      "severity": "medium",
      "result": "na",
      "value": "Requires process review",
      "detail": "Breakdown reporting frequency (monthly/quarterly/never) cannot be determined from an API snapshot. Recommend monthly review of age, gender, placement breakdowns.",
      "evidence": {},
      "quick_win": false,
      "fix_time_minutes": 0,
      "human_title": "Breakdown effect monitoring",
      "category_display": "Account Structure",
      "confidence": "UNVERIFIED"
    },
    {
      "check_id": "M39",
      "category": "structure",
      "check_name": "UTM parameters",
      "severity": "medium",
      "result": "na",
      "value": "Requires ad URL inspection",
      "detail": "UTM parameter presence requires checking ad preview URLs or URL templates, which are not in the current data pull. Add UTMs at campaign level.",
      "evidence": {},
      "quick_win": true,
      "fix_time_minutes": 5,
      "human_title": "UTM parameter implementation",
      "category_display": "Account Structure",
      "confidence": "UNVERIFIED"
    },
    {
      "check_id": "M40",
      "category": "structure",
      "check_name": "A/B testing",
      "severity": "medium",
      "result": "na",
      "value": "Requires Experiments review",
      "detail": "A/B testing activity requires checking Meta Experiments tool. Not available via standard campaign/ad set data.",
      "evidence": {},
      "quick_win": false,
      "fix_time_minutes": 0,
      "human_title": "A/B testing activity",
      "category_display": "Account Structure",
      "confidence": "UNVERIFIED"
    },
    {
      "check_id": "M-ST1",
      "category": "structure",
      "check_name": "Budget adequacy",
      "severity": "high",
      "result": "pass",
      "value": "Avg CPA: EUR 14.08",
      "detail": "All 2 budgeted ad sets meet >=5x CPA (EUR 14.08) threshold. Sufficient for learning phase exit.",
      "evidence": {
        "avg_cpa": 14.08,
        "adequate": 2,
        "inadequate": 0
      },
      "quick_win": false,
      "fix_time_minutes": 0,
      "human_title": "Budget adequacy for learning phase exit",
      "category_display": "Account Structure",
      "confidence": "CALCULATED"
    },
    {
      "check_id": "M-ST2",
      "category": "structure",
      "check_name": "Budget utilization",
      "severity": "medium",
      "result": "fail",
      "value": "57% utilization",
      "detail": "Average budget utilization: 57%. 2 ad sets below 60%. Significant budget waste \u2014 audiences too narrow or bids too low.",
      "evidence": {},
      "quick_win": false,
      "fix_time_minutes": 0,
      "human_title": "Budget utilization rate",
      "category_display": "Account Structure",
      "confidence": "CALCULATED"
    },
    {
      "check_id": "M19",
      "category": "audience",
      "check_name": "Audience overlap",
      "severity": "high",
      "result": "pass",
      "value": "7% overlap",
      "detail": "3/45 ad set pairs have similar targeting (7%). Low overlap \u2014 good audience separation.",
      "evidence": {},
      "quick_win": false,
      "fix_time_minutes": 0,
      "human_title": "Audience overlap between ad sets",
      "category_display": "Audience & Targeting",
      "confidence": "ESTIMATED"
    },
    {
      "check_id": "M20",
      "category": "audience",
      "check_name": "Custom Audience freshness",
      "severity": "high",
      "result": "access_blocked",
      "value": "Audience data not accessible",
      "detail": "Custom audience data not accessible \u2014 cannot verify freshness.",
      "evidence": {},
      "quick_win": false,
      "fix_time_minutes": 0,
      "human_title": "Custom audience data freshness",
      "category_display": "Audience & Targeting",
      "confidence": "ACCESS_BLOCKED"
    },
    {
      "check_id": "M21",
      "category": "audience",
      "check_name": "Lookalike source quality",
      "severity": "medium",
      "result": "access_blocked",
      "value": "Audience data not accessible",
      "detail": "Audience data not accessible \u2014 cannot evaluate lookalike source quality.",
      "evidence": {},
      "quick_win": false,
      "fix_time_minutes": 0,
      "human_title": "Lookalike audience source quality",
      "category_display": "Audience & Targeting",
      "confidence": "ACCESS_BLOCKED"
    },
    {
      "check_id": "M22",
      "category": "audience",
      "check_name": "Advantage+ Audience",
      "severity": "medium",
      "result": "pass",
      "value": "50% with Advantage+",
      "detail": "5/10 ad sets (50%) use Advantage+ Audience / targeting automation. Testing broad audiences alongside manual targeting.",
      "evidence": {},
      "quick_win": false,
      "fix_time_minutes": 0,
      "human_title": "Advantage+ Audience automation",
      "category_display": "Audience & Targeting",
      "confidence": "VERIFIED"
    },
    {
      "check_id": "M23",
      "category": "audience",
      "check_name": "Exclusion audiences",
      "severity": "high",
      "result": "pass",
      "value": "80% with exclusions",
      "detail": "4/5 prospecting ad sets (80%) have exclusion audiences. Purchasers properly excluded from prospecting.",
      "evidence": {},
      "quick_win": true,
      "fix_time_minutes": 10,
      "human_title": "Purchaser exclusion from prospecting",
      "category_display": "Audience & Targeting",
      "confidence": "VERIFIED"
    },
    {
      "check_id": "M24",
      "category": "audience",
      "check_name": "First-party data & ESP sync",
      "severity": "high",
      "result": "access_blocked",
      "value": "Audience data not accessible",
      "detail": "Audience data not accessible \u2014 cannot verify CRM upload or ESP sync.",
      "evidence": {},
      "quick_win": false,
      "fix_time_minutes": 0,
      "human_title": "CRM / first-party data sync freshness",
      "category_display": "Audience & Targeting",
      "confidence": "ACCESS_BLOCKED"
    },
    {
      "check_id": "M-AU1",
      "category": "audience",
      "check_name": "Placement-audience coherence",
      "severity": "medium",
      "result": "pass",
      "value": "IG 44% / FB 53%",
      "detail": "Platform split: IG 44% / FB 53%. Target age ~42 \u2014 platform mix is appropriate.",
      "evidence": {
        "instagram_pct": 44.0,
        "facebook_pct": 53.2,
        "avg_target_age": 42.1
      },
      "quick_win": false,
      "fix_time_minutes": 0,
      "human_title": "Placement-demographic alignment (IG vs FB)",
      "category_display": "Audience & Targeting",
      "confidence": "VERIFIED"
    },
    {
      "check_id": "M-AU2",
      "category": "audience",
      "check_name": "Demographic reach vs conversion alignment",
      "severity": "high",
      "result": "na",
      "value": "Requires age/gender breakdown",
      "detail": "Demographic reach vs conversion alignment requires insights with age,gender breakdown, which is not in the current data pull.",
      "evidence": {},
      "quick_win": false,
      "fix_time_minutes": 0,
      "human_title": "Demographic reach vs conversion efficiency",
      "category_display": "Audience & Targeting",
      "confidence": "UNVERIFIED"
    },
    {
      "check_id": "M-AT1",
      "category": "funnel",
      "check_name": "Post-view vs post-click attribution ratio",
      "severity": "critical",
      "result": "warning",
      "value": "38.4% post-view",
      "detail": "38.4% of conversions are post-view. Significant portion may not be incremental. Reported ROAS: 4.51x, Click-only ROAS: 2.74x. The real ROAS is likely closer to the click-only figure.",
      "evidence": {
        "purchases_click": 3894,
        "purchases_view": 2430,
        "total_purchases": 6324,
        "post_view_pct": 38.4,
        "reported_roas": 4.51,
        "click_only_roas": 2.74,
        "value_click": 244291.07,
        "value_view": 156910.34
      },
      "quick_win": false,
      "fix_time_minutes": 0,
      "human_title": "Post-view attribution inflation risk",
      "category_display": "Funnel & Strategy",
      "confidence": "CALCULATED"
    },
    {
      "check_id": "M-FA1",
      "category": "funnel",
      "check_name": "False retargeting detection",
      "severity": "critical",
      "result": "warning",
      "value": "1/2 false RTG",
      "detail": "1/2 non-ASC retargeting campaigns have NO custom audience. These are effectively prospecting campaigns disguised as retargeting: NM.|Products|Social|Retargeting|Conversi.",
      "evidence": {
        "false_rtg": [
          "NM.|Products|Social|Retargeting|Conversions_Website_Purchase_Catalog"
        ],
        "true_rtg": [
          "NM.|Products|Social|Retargeting|Website_Visitors|Conversions_Website_Purchases"
        ],
        "asc_exceptions": []
      },
      "quick_win": true,
      "fix_time_minutes": 10,
      "human_title": "False retargeting campaign detection",
      "category_display": "Funnel & Strategy",
      "confidence": "CALCULATED"
    },
    {
      "check_id": "M-ST3",
      "category": "funnel",
      "check_name": "ASC+ existing customer budget cap",
      "severity": "high",
      "result": "warning",
      "value": "6 ASC campaigns",
      "detail": "Found 6 ASC campaigns (3 active) but no existing customer budget cap detected. Without a cap, ASC defaults to spending on existing customers who would have purchased anyway. Set cap <=20% for growth.",
      "evidence": {
        "asc_campaigns": [
          "NM.|Products|Social|ASC+|Conversions_Website_Purchase|ASC+|Belgique",
          "NM.|Products|Social|ASC+|Conversions_Website_Purchase|ASC+_Catalog",
          "NM.|Products|Social|ASC+|Conversions_Website_Purchase|ASC+|7DayClick",
          "NM.|Products|Social|ASC+|Conversions_Website_Purchase|ASC+",
          "NM.|Products|Social|ASC+|Conversions_Website_Purchase|ASC+_Catalog|Channable",
          "NM.|Products|Social|ASC+|Conversions_Website_Purchase|ASC+|CreativeTesting"
        ],
        "caps_found": [],
        "caps_missing": [
          "NM.|Products|Social|ASC+|Conversions_Website_Purchase|ASC+|Belgique",
          "NM.|Products|Social|ASC+|Conversions_Website_Purchase|ASC+_Catalog",
          "NM.|Products|Social|ASC+|Conversions_Website_Purchase|ASC+|7DayClick",
          "NM.|Products|Social|ASC+|Conversions_Website_Purchase|ASC+",
          "NM.|Products|Social|ASC+|Conversions_Website_Purchase|ASC+_Catalog|Channable",
          "NM.|Products|Social|ASC+|Conversions_Website_Purchase|ASC+|CreativeTesting"
        ]
      },
      "quick_win": true,
      "fix_time_minutes": 2,
      "human_title": "ASC existing customer budget cap",
      "category_display": "Funnel & Strategy",
      "confidence": "ESTIMATED"
    },
    {
      "check_id": "M-ST4",
      "category": "funnel",
      "check_name": "Funnel-stage budget split",
      "severity": "high",
      "result": "pass",
      "value": "Prosp: 100% / RTG: 0% / Ret: 0%",
      "detail": "Prospecting gets 100% of budget \u2014 healthy growth-oriented split. RTG: 0%, Retention: 0%.",
      "evidence": {
        "stage_budgets": {
          "prospecting": 700.0,
          "retargeting": 0.0,
          "retention": 0.0
        },
        "stage_campaigns": {
          "prospecting": [
            "NM.|Products|Social|ASC+|Conversions_Website_Purchase|ASC+|Belgique",
            "NM.|Products|Social|Prospecting|Conversions_Website_Purchases",
            "NM.|Products|Social|ASC+|Conversions_Website_Purchase|ASC+_Catalog",
            "NM.|Lead|Lead_Generation|NEW",
            "NM.|Products|Social|ASC+|Conversions_Website_Purchase|ASC+"
          ],
          "retargeting": [
            "NM.|Products|Social|Retargeting|Website_Visitors|Conversions_Website_Purchases",
            "NM.|Products|Social|Retargeting|Conversions_Website_Purchase_Catalog"
          ],
          "retention": [
            "NM.|Products|Social|Repeat_Purchasers|Conversions_Website_Purchases|7DayClick"
          ]
        },
        "prosp_pct": 100.0,
        "rtg_pct": 0.0,
        "ret_pct": 0.0
      },
      "quick_win": false,
      "fix_time_minutes": 0,
      "human_title": "Prospecting vs retargeting budget split",
      "category_display": "Funnel & Strategy",
      "confidence": "CALCULATED"
    }
  ],
  "access_report": {
    "pixels": {
      "level": "full_access",
      "note": "3 pixel(s) with ID data."
    },
    "creatives": {
      "level": "full_access",
      "note": "109 creatives: 109 with object_type, 47 with video_id, 24 with image_url."
    },
    "targeting": {
      "level": "full_access",
      "note": "0/18 with exclusions, 3/18 with custom audiences, 18/18 with targeting data."
    },
    "campaigns": {
      "level": "full_access",
      "note": "11 campaigns records."
    },
    "adsets": {
      "level": "full_access",
      "note": "18 adsets records."
    },
    "ads": {
      "level": "full_access",
      "note": "120 ads records."
    },
    "insights": {
      "level": "full_access",
      "note": "91 insights records."
    },
    "insights_placement": {
      "level": "full_access",
      "note": "22 insights_placement records."
    },
    "audiences": {
      "level": "ambiguous",
      "note": "No audiences data returned \u2014 may be access-restricted or genuinely absent."
    }
  },
  "sanity_checks": {
    "check_1_roas": "PASS",
    "check_2_aov": "PASS",
    "check_3_spend": "PASS",
    "check_4_attribution": {
      "total_purchases": 6324,
      "click_purchases": 3894,
      "view_purchases": 2430,
      "post_view_pct": 38.4,
      "reported_roas": 4.51,
      "click_roas": 2.74
    },
    "check_5_false_rtg": {
      "flagged": 1,
      "asc_exceptions": 0,
      "true_rtg": 1,
      "flags": [
        "NM.|Products|Social|Retargeting|Conversions_Website_Purchase"
      ]
    },
    "all_pass": true,
    "summary": {
      "spend": 89012.78,
      "revenue_total": 401201.41,
      "revenue_click": 244291.07,
      "revenue_view": 156910.33999999997,
      "purchases_total": 6324,
      "purchases_click": 3894,
      "purchases_view": 2430,
      "reported_roas": 4.5072,
      "click_roas": 2.7444,
      "api_roas": 4.507234,
      "implied_aov": 63.44,
      "post_view_pct": 38.4
    }
  },
  "financial_summary": {
    "total_spend": 89012.78,
    "total_revenue": 401201.41,
    "click_revenue": 244291.07,
    "view_revenue": 156910.33999999997,
    "total_purchases": 6324,
    "click_purchases": 3894,
    "view_purchases": 2430,
    "reported_roas": 4.5072,
    "click_roas": 2.7444,
    "implied_aov": 63.44,
    "post_view_pct": 38.4,
    "currency": "EUR"
  },
  "confidence_summary": {
    "VERIFIED": 17,
    "CALCULATED": 10,
    "ESTIMATED": 4,
    "UNVERIFIED": 21,
    "ACCESS_BLOCKED": 3
  },
  "seasonality_context": "Your Q1 CPA is 16% higher than Q4 (\u20ac14 vs \u20ac12) \u2014 this is consistent with last year's seasonal pattern (+13% Q4\u2192Q1 2025)."
}