DATA PROVENANCE — Skin&Out Meta Ads Audit ========================================== Account: skin&out (act_791436091675446) Currency: EUR Timezone: Europe/Paris 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) — 32 API calls in 81 seconds Pull timestamp: 2026-03-03 ~17:18 UTC+1 LAYER 1 DATA (Scoring — 3 months): Account-level insights (default + 7d_click attribution) 22 campaigns with spend > 0 (batch metadata via ?ids=) 61 ad sets with spend > 0 (batch metadata with targeting) 441 ads with spend > 0 (batch metadata) 327 unique creatives 91 daily insight rows 22 placement breakdown rows 1 pixel LAYER 2 DATA (Trends — 6 months monthly): 7 account-level monthly rows 103 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: 59.6% of purchases are view-through (VERY HIGH) SANITY CHECKS (all passed): 1. ROAS field validation: PASS (API 2.8144x = Manual 2.8144x) 2. AOV check: PASS (EUR 65.58, expected EUR 35-60, slightly above) 3. Spend reconciliation: PASS (campaign sum = account total, diff EUR 0.00) 4. Attribution split: 59.6% post-view (very high — key finding) 5. False retargeting: 1 flagged ("Adsteroid | Retargeting | Catalogue NEW"), 2 valid RTG SCORING: Engine: 55-check weighted scoring (V3) Overall: 52.1/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: 60.0/100 (C) [12/18 evaluated] Audience: 50.0/100 (D) [4/8 evaluated] Funnel: 43.8/100 (D) [4/4 evaluated] KEY FINANCIAL METRICS: Spend: EUR 67,363.99 Revenue: EUR 189,590.02 ROAS: 2.81x (marginally profitable) Click-only ROAS: 1.16x (BARELY ABOVE BREAKEVEN) Purchases: 2,891 AOV: EUR 65.58 CPA: EUR 23.30 Net Profit: EUR 122,226.03 CRITICAL FINDING: 59.6% of reported purchases come from post-view attribution. Reported ROAS of 2.81x drops to just 1.16x on click-only basis. This means most revenue is attributed to ad impressions rather than clicks. YOY CONTEXT (WORSENING TRENDS): Q4 2024 vs Q4 2025: Spend +64.1%, ROAS -1.5%, CPA +7.7% Q1 2025 vs Q1 2026: Spend +9.2%, ROAS -8.1%, CPA +17.0% Efficiency is declining while spend has increased significantly. SEASONALITY: CPA stable between Q4 and Q1 (EUR 23 → EUR 23), consistent with last year's pattern. No seasonal distortion detected. 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 32 - Fixed ad_id KeyError on paginated responses (filter with .get())