I inherited an account once where campaigns were named things like:
- "Search - US - Non-Brand - Safety - New - V2 - Final"
- "DISPLAY retargeting_Q3"
- "Search US Safety New Copy Test March"
These names were fine for a human reading the Google Ads UI. They were a disaster for data pipelines.
The moment you try to push Google Ads data into BigQuery and join it with Salesforce, your campaign names become field values that SQL has to parse. If your names aren't machine-readable, your attribution falls apart.
The problem with human-readable names
"Search - US - Non-Brand - Safety - New - V2 - Final" looks organized. But SQL can't reliably extract "US" vs "Safety" vs "Non-Brand" from that string without complex, fragile regex.
Change the naming format on one campaign and the regex breaks. Add a new region and you need to update the parsing logic. Rename a campaign for a new campaign manager and suddenly last quarter's data doesn't match this quarter's data.
At $650K/month across two MCCs and five brands, this creates a data integrity nightmare.
The machine-readable format
Every campaign in my accounts follows this exact structure:
[BRAND]|[CHANNEL]|[MATCH]|[GEO]|[INTENT]|[PRODUCT]
Real examples:
BRADY|SRC|EXM|US|ARC-FLASH|LABELSSETON|SRC|PHR|CA|SAFETY|SIGNSMECCO|SRC|EXM|US|DOT-PEEN|MARKERS
Pipe-delimited. Consistent segments. Always in the same position.
In BigQuery, parsing is trivial:
SPLIT(campaign_name, '|')[OFFSET(0)] as brand,
SPLIT(campaign_name, '|')[OFFSET(1)] as channel,
SPLIT(campaign_name, '|')[OFFSET(2)] as match_type,
SPLIT(campaign_name, '|')[OFFSET(3)] as geo,
SPLIT(campaign_name, '|')[OFFSET(4)] as intent,
SPLIT(campaign_name, '|')[OFFSET(5)] as product
Now every campaign click inherently carries its DNA. When it joins with Salesforce data, you can immediately see that MECCO exact-match laser marker clicks in the US are driving 40% of industrial pipeline.
The ad group and keyword level
Same principle applies down the hierarchy.
Ad groups: [INTENT]|[MODIFIER] — for example, ARC-FLASH|OSHA-COMPLIANT or DOT-PEEN|PART-NUMBERS
Keywords: Clean, exact-match terms. No creative naming. The keyword is what it is.
UTM parameters: Match the campaign taxonomy exactly. utm_campaign=BRADY|SRC|EXM|US|ARC-FLASH|LABELS
When UTM data arrives in your form submissions and Salesforce, it's already in the same format as your BigQuery tables. Joining is clean.
The migration pain
If you have an existing account with non-standard naming, migrating is painful. You're renaming hundreds or thousands of campaigns and ad groups while keeping history intact.
Worth it. Do it systematically, not all at once. Start with new campaigns using the correct format. Migrate existing high-volume campaigns as you touch them for optimization. Over 6-12 months the account normalizes.
The alternative is perpetually fighting a broken data pipeline. That costs more than the migration.
Alex Langton
Senior B2B paid media manager · ~$650K/mo industrial spend
12+ years running B2B Google Ads accounts in industrial, manufacturing, and B2B e-commerce. Builds Langton Tools because generic PPC SaaS was never designed for the multi-MCC, complex- pacing, B2B-vocabulary reality of the accounts that actually drive industrial revenue.