Facebook & Meta Ads Campaign Report Sample CSV (Dirty + Clean)
A production-realistic Meta Ads Manager campaign export (3,200 rows) covering formatting issues that break ROAS calculations. The Facebook Ads quirk: Amount spent and CPC values inconsistently include the $ currency prefix depending on account regional settings. When pandas or DuckDB attempts SUM on these columns, the $ prefix forces the entire column to string type, returning zero or throwing type-cast errors. The 'dirty' version includes currency-prefixed cells, zero-spend zombie ads with impressions > 0, inconsistent campaign naming (Summer_Sale vs SUMMER-SALE), and mismatched date formats. Ideal for testing ROAS pivot tables and cross-platform merges. All processing happens locally — your ad spend data stays private.
Live Interactive Preview
Live Data Preview
See how this messy facebook data looks before downloading. All processing happens locally in your browser.
💡 Pro Tip: The $ prefix in 'Amount spent' just made your ROAS calculation return NaN. Drop this CSV into Ads ROAS Pivot to auto-strip currency symbols and build a clean profitability table.
⚡ Next Step: Campaign names a mess of underscores and casing? Clean them in bulk with Regex Replace — paste your pattern, preview live, and export. Your dashboards will finally group correctly.
Data Schema Definition
| Column | Type | Description |
|---|---|---|
| Campaign name | string | User-defined name. Inconsistent conventions (Summer_Sale vs SUMMER-SALE) break pivot groupings. Normalize before aggregation. |
| Reporting starts | date | Report start date. Format varies by locale (MM/DD/YYYY vs YYYY-MM-DD); detect dynamically. |
| Amount spent (USD) | string | ⚠️ CRITICAL: Contains '$' prefix forcing column to string type. SUM returns 0 or NaN. Strip symbol and cast to decimal. |
| Impressions | integer | Ad view count. Can be > 0 when spend = 0 (zombie ads with free impressions). Filter before CPA calculation. |
| Link clicks | integer | Outbound clicks. Includes accidental clicks; use 'outbound_clicks' for stricter attribution. |
| Purchase ROAS | decimal | Revenue / Spend multiplier. NULL or NaN when spend = 0. COALESCE to 0 or exclude from AVG. |
| Results | integer | Objective-based conversions. Definition changes per campaign objective; never aggregate across objectives. |
| Ad set name | string | Audience/targeting label. Often duplicated across campaigns; include campaign name for unique identification. |
| CTR (link click-through rate) | string | Percentage string ('2.5%'). Strip '%' and divide by 100 for decimal. NULL when impressions = 0. |
| Frequency | decimal | Impressions / Reach. Values > 5 indicate ad fatigue; flag for creative rotation. |
⚠️ Highlighted rows contain known data traps. Review descriptions before building ETL pipelines.