Google Ads Keyword Report Sample CSV (Dirty + Clean)
A production-realistic Google Ads keyword performance export (4,800 rows) covering structural issues that silently destroy automated CSV parsers. The Google Ads quirk: the CSV prepends two metadata rows before the actual header. Row 1 = report title, Row 2 = date range. When pandas reads this with pd.read_csv(), it treats the title as the header, causing every df['Clicks'] reference to throw KeyError unless skiprows=2. The 'dirty' version includes metadata header/footer, 1,120 zero-impression zombie keywords, Cost values with $ symbols, and special characters (+, []) in keyword text denoting match types. Perfect for testing ETL parser robustness (Supermetrics, Funnel.io) and account pruning workflows. Process everything locally — your PPC data never leaves your browser.
Live Interactive Preview
Live Data Preview
See how this messy google data looks before downloading. All processing happens locally in your browser.
💡 Pro Tip: Pandas just read 'Keywords performance report' as your header row. Run this CSV through Format Cleaner to auto-strip metadata headers/footers and parse the real data. Zero KeyErrors.
⚡ Next Step: Which exact-match keywords have Quality Score < 5 but are still burning budget? Query this CSV with SQL in your browser — instant account pruning, no database needed.
Data Schema Definition
| Column | Type | Description |
|---|---|---|
| Keyword | string | Search term with match type modifiers: +broad, "phrase", [exact]. Special chars are semantic; do not strip. |
| Match type | string | Enum: Broad | Phrase | Exact. Mixed casing across exports; normalize before grouping. |
| Keyword state | string | Enum: Enabled | Paused | Removed. 'Removed' keywords still appear in historical reports; filter for active analysis. |
| Clicks | integer | Validated clicks. Often 0 for zombie keywords consuming impression share without converting. |
| Cost | string | ⚠️ TRAP: Contains '$' currency symbol. Forces string type; cast fails silently. Strip symbol before aggregation. |
| Impr. (Abs. Top) % | string | Absolute top impression percentage. Contains '%' char; parse to float. NULL = no eligible auctions. |
| Quality Score | integer | 1-10 scale. Displayed as '--' for new/unrated keywords. Cast fails on '--'; replace with NULL. |
| Campaign | string | Campaign name. Required context; keyword alone is not unique across campaigns. |
| Ad group | string | Ad group name. Keywords are scoped to ad groups; always include in composite key. |
| Conversions | decimal | Attributed conversions. May be fractional with data-driven attribution; round only for display. |
⚠️ Highlighted rows contain known data traps. Review descriptions before building ETL pipelines.