The {AdName} Mistake in Google Ads Tracking
TL;DR: {AdName} and {AdGroupName} are not real Google Ads ValueTrack parameters. Google only provides numeric IDs like {campaignid}, {adgroupid}, and {creative}. Google's documentation doesn't say what happens with an unsupported token, but on client accounts I've seen the template save without an error and the literal text land in the tracking data. Use the real ID macros with a lookup sheet, or Custom Parameters, which hold static text that you or a script must keep updated.
If you've put {AdName} or {AdGroupName} into a Google Ads tracking template or final URL suffix expecting your actual campaign or ad group name to show up in your tracking data, it didn't work, and there was a good chance nothing told you it didn't work. Google Ads doesn't have a native parameter for human-readable names. It only ever hands you numeric IDs. I've caught this on more than one client account during a tracking audit, days or weeks after someone set it up, because the ad had been serving normally the entire time.
Why this mistake happens
The instinct is reasonable. Google Ads' real macros look like this: {campaignid}, {adgroupid}, {creative}, {keyword}, {matchtype}, {device}, {network}, {gclid}, {loc_physical_ms}, {random}, plus a set of conditional ones like {ifmobile:value} and shopping/video/hotel-specific ones for those campaign types. {AdName} or {AdGroupName} sits right next to those visually, same curly-brace syntax, same general shape, and "ad group name" is exactly the kind of thing you'd assume a platform this mature would just hand you. It's a natural typing mistake, not a careless one.
Google's own reference confirms the actual list, and there's no name-based macro in it anywhere. {campaignid} returns the numeric campaign ID. {adgroupid} returns the numeric ad group ID. {creative} returns the numeric ad ID. None of them return the text you typed when you named the campaign or ad group. That's confirmed on Google's ValueTrack parameters reference and about ValueTrack parameters.
What actually happens when you use a fake one
This is the part worth being precise about instead of just repeating what feels intuitive. There are two different things that could plausibly happen: Google could reject the tracking template at save time because it doesn't recognize the token, or it could accept it and leave the literal {AdName} text sitting in the URL, unsubstituted, every time the ad serves.
Google's own documentation doesn't spell out which one happens for an unsupported parameter, so I'm not going to claim it's officially documented behavior. What I've seen directly, on real client accounts, is the second one: the tracking template saves without an error, the ads keep serving normally, and the destination URL that actually gets recorded contains the literal string {AdName} or {AdGroupName}, not the campaign or ad group's real name. Nobody notices at setup, because there's no warning to notice. It shows up later, when someone opens the actual captured click data or a CRM record and finds a raw, unsubstituted placeholder instead of a name.
Google Ads does validate tracking templates for some things, missing {lpurl}, unescaped spaces, malformed syntax. I haven't seen it validate against a fixed whitelist of recognized parameter names, which makes sense given that custom parameters (below) also use curly-brace syntax with names you invent yourself, so the system can't reject an unfamiliar token on sight without also breaking legitimate custom parameters. Treat "did this actually work" as something you verify by checking the resolved URL yourself, using the Preview option on the tracking template field, rather than something you can assume from the absence of an error.
Broken, the mistake:
{lpurl}?utm_source=google&utm_medium=cpc&utm_campaign={AdGroupName}&utm_content={AdName}
What lands in your data:
https://example.com/landing?utm_source=google&utm_medium=cpc&utm_campaign={AdGroupName}&utm_content={AdName}
That's not a placeholder Google fills in later. That's the literal text sitting in your GA4 campaign and content dimensions, in your CallRail source data, in your CRM, forever, for every click, until someone catches it.
The fix: real IDs, or genuine Custom Parameters
There are exactly two ways to actually get this right, and they solve different problems.
Option one: use the real ID-based macros. If a numeric ID is good enough, {campaignid}, {adgroupid}, and {creative} work natively, no setup required, and they're always accurate because Google fills them in itself:
{lpurl}?utm_source=google&utm_medium=cpc&utm_campaign={campaignid}&utm_content={adgroupid}
The tradeoff: you'll see utm_campaign=19483022 in your reports, not the campaign's name. You need a lookup sheet (or an export from Google Ads) mapping IDs back to names if you want anything readable in a report.
Option two: set up genuine Custom Parameters. Google Ads lets you define your own named parameters, syntax is {_parametername}, where you invent the name yourself, up to 16 alphanumeric characters, and you manually type in the value, up to 250 characters, that you want it to hold. You can set these at the campaign, ad group, ad, keyword, or sitelink level (not account level), and Google Ads uses the most specific one when levels overlap, an ad-level value overrides an ad-group-level one, which overrides a campaign-level one. That's documented in Google's custom parameters reference.
Here's the part that matters most and is easy to miss: a Custom Parameter is not a native macro that reads your campaign's real name automatically. It's a field you (or a script, or the API) fill in yourself with static text. If you create {_campname} at the campaign level and type in "Spring-Promo-2026," that's exactly and only what it will ever hold, regardless of what you later rename the campaign to. Google isn't watching the campaign name and syncing it in. You are.
{lpurl}?utm_source=google&utm_medium=cpc&utm_campaign={_campname}&utm_content={_groupname}
That works, and it produces readable data, but only because someone (or something) put "Spring-Promo-2026" into that field manually.
The real tradeoff: manual upkeep or a script
Custom Parameters get you readable names in your tracking data, but they don't stay in sync with anything by themselves. Two ways people actually handle that:
- Manual entry. Fine for a small, stable account. Every new campaign or ad group needs someone to go set the custom parameter by hand, and every rename needs someone to go update it. Miss one, and that entity's tracking data quietly reverts to whatever the parameter was last set to, or to nothing if it was never set.
- A Google Ads Script that auto-syncs it. This is a genuinely common pattern, not something I'm inventing here: a script scheduled to run on a timer (daily is typical) that loops through your campaigns and ad groups, reads each one's actual name via the Google Ads Scripts API, and writes that name into a defined custom parameter at that level, so it's always current without anyone remembering to touch it. It's the standard workaround for the fact that Google doesn't provide this natively. I'm not going to hand you a specific script to paste in, since a working one depends on your account's structure and needs testing before it touches live tracking templates, but that's the mechanism: read the name, write it to the parameter, repeat on a schedule.
Either path is more setup than typing {AdName} and assuming it works. That's exactly why the fake-parameter mistake is so common, it looks like it should be free.
Frequently asked questions
Does Google Ads have any ValueTrack parameter that returns a campaign or ad group's actual name?
No. Every native ValueTrack parameter that references your account structure returns a numeric ID, {campaignid}, {adgroupid}, {creative} for the ad. There is no built-in macro for the human-readable name of anything.
If I put an unsupported parameter like {AdName} in a tracking template, will Google Ads warn me? Not reliably, based on what I've seen on real accounts. The template saves and the ad serves normally. Google's own documentation doesn't explicitly describe the mechanism, but the practical result I've observed is that the literal curly-brace text passes straight through into your captured click and destination URL data, unsubstituted. Check the actual resolved URL yourself using the tracking template's Preview option rather than assuming a lack of an error means it worked.
What's the difference between a ValueTrack parameter and a Custom Parameter?
ValueTrack parameters are Google-defined and auto-filled, {campaignid} and similar always work without setup because Google itself inserts the value. Custom Parameters are advertiser-defined, syntax {_yourname}, and hold only whatever static text you (or a script) manually put into that field. Google does not auto-populate a Custom Parameter with anything.
Can a Custom Parameter automatically stay updated if I rename a campaign? No, not on its own. It holds whatever text was last entered. Keeping it current after renames or new campaign creation requires either manual updates or a Google Ads Script scheduled to re-read each campaign or ad group's actual name and rewrite the parameter on a recurring basis.
Where should I actually check whether my tracking template is working? In the actual captured data, not the setup screen. Look at the resolved destination URL in the tracking template's Preview option before launching, and separately check what's actually showing up in GA4, your call tracking platform, or your CRM once clicks come in. A tracking template with no errors at save time isn't proof it's inserting real values.
This is the kind of thing that's invisible until someone actually opens the raw captured URLs and checks, which is exactly what a conversion tracking audit is built to catch before it costs you weeks of unreadable campaign or content data. If tracking templates, ValueTrack parameters, or UTM structure across your account haven't been checked against what's actually landing in your reports, that's usually a faster fix than it sounds, and it's part of what I look at whenever I take on Google Ads management for an account.
Questions about how this affects your account?
Let's talk