Skip to main content
Fill in the workbook for each section below. Expand a concept review if you want the reasoning behind a section before you commit to a structure. Examples below continue the Doughnut Labs brand introduced in Naming conventions overview.
Fill in a row for every value you use in each category table below, its short form if you name jam it, and what it means. That’s what builds this level’s dictionary, all in one place. Add a new value, or a whole new category, as your program grows; don’t rename or remove one a live campaign is already using. See Naming conventions overview for the reasoning. Testing identifiers, below, are optional and only apply while a test is running.
1

Confirm your channel list

List every channel you run today: Google, Meta, Pinterest, Display, SMS, email, and so on.
2

Fill in a row for every value you use, in each category table below

Add its short form too, if you plan to name jam it.
3

Assemble the name

Concatenate one value from each category, in order, skipping any category a channel doesn’t use. Then add the testing identifier, if any, at the end.

Standard identifiers

Channel

Marketing campaign name

The initiative this campaign belongs to, as named in its marketing campaign brief. One marketing campaign usually spawns several platform campaigns across several channels, and this is the identifier that lets a report add them back up.

Product

The product or product line this campaign sells, using the identifier registered in the product catalog. Skip it if you sell one thing, or if the campaign is brand-level rather than product-level.
Add a value here only after it exists in the product catalog. An identifier invented at build time is a one-off value typed into a platform, which is how a closed list stops being closed.

Placement type

Objective

Budget type

Bid type

Funnel position

These eight categories describe the strategy behind a campaign, not its creative or its customer profile. That’s what makes one campaign distinguishable from another at a glance: which channel it runs on, which initiative and product it belongs to, what it’s optimizing for, and where it sits in the funnel.Not every channel or campaign uses every category. A Google Search campaign is often optimized through bid type rather than a platform-level budget type, while Meta’s campaign budget optimization makes budget type the meaningful field and leaves bid type blank. An always-on campaign belongs to no marketing campaign, and a single-product company has nothing to put in the product field. When you assemble an actual name, skip whichever category doesn’t apply rather than inserting a placeholder into the string.Marketing Campaign Name and Product are the two that decide what a report can total up. Without the first, spend can be grouped by channel and objective but never by the initiative that spans them, so “what did the spring push cost?” gets answered by hand. Without the second, spend can never be grouped by what it was selling, which is the question that arrives the moment a company has more than one thing to sell.If your program needs a ninth category, add a new table here following the same long form, short form, description pattern. Don’t rename or remove one of the eight above once a live campaign is using it.

Which name is which

Three different strings get called “the campaign name,” and mixing them up is the most common source of a broken join between platform spend and analytics.
Only the platform campaign name goes in utm_campaign, and it has to match the platform character for character. Putting the marketing campaign name or a slug of it in utm_campaign breaks the join that UTM standards exists to protect.

Assemble the name

Concatenate one value from each category that applies, in the order the tables appear above: Channel - Marketing campaign - Placement - Objective - Budget type - Bid type - Product - Funnel position A Search campaign for one product inside a named marketing campaign, using every category that applies: Google-FBS-Search-Trial-tCPA-DAPRO-TOFU Google Search leans on bid type, so its name skips budget type. Drop the marketing campaign and product identifiers too, for an always-on brand campaign at a single-product company, and the same convention produces: Google-Search-Leads-tROAS-TOFU Meta’s campaign budget optimization makes budget type the meaningful field instead, so its name skips bid type: Meta-Instagram-Awareness-CBO-TOFU
Keep the order fixed even when categories are skipped. A name that omits budget type still lists bid type where bid type always sits, so a report can split the string on the delimiter and know which field it is reading.
This document covers campaign-level identifiers, including this level’s dictionary of values. See Ad set / ad group / variant naming conventions and Ad naming conventions for the other two levels.

Testing identifiers

Optional: append only to sets / groups / variants that are part of an active test.
Testing identifiers mark a hypothesis you’re currently running, for example a campaign bidding strategy test. Because a test only applies to some campaigns for a limited time, testing identifiers aren’t part of the standard identifier set: append one to the end of the campaign name, after the standard identifiers, instead of building it into a table above.
  • With a testing identifier appended: Meta-Instagram-Awareness-CBO-TOFU-TEST01
The control does not carry a testing identifier. It keeps the name it already has, because appending one to a live object renames it and splits its history in two. Only the arms under test carry the ID. See control and variants. This document only covers where a testing identifier sits in the name. It doesn’t cover how an experiment ID gets created, how long it stays on an ad, or where the result gets logged once the test ends. Visit the Experiment ID concepts for that.
Last modified on August 12, 2026