DATA PROVENANCE — Chilly's Bottles Meta Ads Audit ========================================== Account: Chilly's Bottles (act_864659590254750) Currency: GBP Timezone: Europe/London 3-LAYER ANALYSIS: Layer 1 (Scoring): 2025-12-02 to 2026-03-02 (3 months) Layer 2 (Trends): 2025-09-02 to 2026-03-02 (6 months, monthly) Layer 3 (YoY): 2024-09-02 to 2026-03-02 (18 months, monthly) API: Meta Marketing API v21.0 Pull method: Insights-based entity discovery (spend > 0 filter) — 23 API calls in 54 seconds Pull timestamp: 2026-03-03 ~16:55 UTC+1 LAYER 1 DATA (Scoring — 3 months): Account-level insights (default + 7d_click attribution) 15 campaigns with spend > 0 (batch metadata via ?ids=) 37 ad sets with spend > 0 (batch metadata with targeting) 199 ads with spend > 0 (batch metadata) 181 unique creatives 91 daily insight rows 14 placement breakdown rows 2 pixels LAYER 2 DATA (Trends — 6 months monthly): 7 account-level monthly rows 70 campaign-level monthly rows LAYER 3 DATA (YoY — 18 months monthly): 19 account-level monthly rows ROAS CALCULATION: Source field: action_values where action_type = "purchase" Formula: purchase_value / spend NEVER used: total action_values (includes non-purchase actions) Cross-check: purchase_roas field from API (match: 0.0000 diff) ATTRIBUTION: Default: 7d_click + 1d_view (Meta default) Click-only: action_attribution_windows: ["7d_click"] View derived: Default total - Click only Post-view: 41.8% of purchases are view-through (HIGH) SANITY CHECKS (all passed): 1. ROAS field validation: PASS (API 7.5742x = Manual 7.5742x) 2. AOV check: PASS (GBP 35.66, expected GBP 25-55) 3. Spend reconciliation: PASS (campaign sum = account total, diff GBP 0.00) 4. Attribution split: 41.8% post-view (notably high) 5. False retargeting: 0 flagged, 0 ASC exceptions, 8 valid RTG SCORING: Engine: 55-check weighted scoring (V3) Overall: 59.9/100 (Grade D — Poor) Categories: Pixel/CAPI: 37.5/100 (F) [LIMITED DATA — 2/10 evaluated] Creative: 52.7/100 (D) [10/15 evaluated] Structure: 70.0/100 (C) [9/18 evaluated] Audience: 66.7/100 (C) [4/8 evaluated] Funnel: 80.8/100 (B) [3/4 evaluated] KEY FINANCIAL METRICS: Spend: GBP 106,755.09 Revenue: GBP 808,582.73 ROAS: 7.57x (VERY PROFITABLE) Click-only ROAS: 4.24x Purchases: 22,675 AOV: GBP 35.66 CPA: GBP 4.71 Net Profit: GBP 701,827.64 YOY CONTEXT: Q4 2024 vs Q4 2025: Spend -61.9%, ROAS +75.0%, CPA -40.8% Q1 2025 vs Q1 2026: Spend +25.2%, ROAS +177.0%, CPA -70.6% SEASONALITY: Q1 CPA improved 38% vs Q4 (GBP 4 vs GBP 7) Last year the same period saw a CPA rise — this year's improvement against the seasonal pattern is a strong positive signal. Bug fixes applied (from prior audits): - funnel.py M-AT1: Fixed double-counting (use 7d_click sub-field, not value) - funnel.py M-FA1: ASC campaigns excluded from false RTG flags - funnel.py: Only count purchase action_type (not omni_purchase) Data pull optimization applied: - Use insights endpoint to discover entities with spend > 0 - Batch-fetch metadata via ?ids= endpoint (50 IDs per call) - Reduced API calls from 200+ to 23 - Fixed ad_id KeyError on paginated responses (filter with .get())