Soku AI
All blog posts

Campaign Naming Convention Template for Paid Media Teams

August 17, 2026 · 13 min read

Soku Team

Soku Team

Campaign Naming Convention Template for Paid Media Teams

A naming convention is not an organisational nicety. It is the only place in most ad accounts where you can store dimensions the platform does not offer. Meta will not break your results down by funnel stage. Google will not group by creative concept. If you want to answer "how did prospecting perform versus retargeting across all four platforms this quarter", the name is where that answer has to live — because nothing else in the account is going to hold it.

That reframing is worth sitting with, because it changes what a good convention looks like. You are not labelling things for humans to read. You are writing a machine-readable record into a text field, and everything that follows comes from taking that seriously.

The one rule underneath all the others

A name is a set of fields in a fixed order, joined by a delimiter that never appears inside a field.

That is it. Every rule below is a consequence.

Fixed order, because parsing by position is reliable and parsing by pattern-matching is not. Fixed delimiter, because a split operation must produce the same number of fields every time. And no delimiter inside a field, because one stray character silently shifts every field after it — which is exactly the kind of failure that produces a report nobody notices is wrong.

Use a pipe (|) or an underscore (_) as the field delimiter, and a hyphen (-) inside fields for readability. Pick one and never mix. Spaces are acceptable inside fields on platforms that allow them, but they make CSV and URL handling fragile, so hyphens are the safer default.

The campaign-level template

{market}_{funnel}_{objective}_{offer}_{start-date}

For example:

US_PROSPECT_CONV_summer-sale_2026-08
UK_RETARGET_CONV_evergreen_2026-08
US_PROSPECT_TRAFFIC_brand-launch_2026-08

Five fields, in a deliberate order. Market first because it is the coarsest filter and it makes an alphabetically sorted campaign list group itself sensibly. Funnel second because it is the dimension you will most often want to segment by and the platform will never give you. Date last, in YYYY-MM form, because that sorts correctly as text — 2026-08 sorts after 2026-07, whereas Aug-2026 sorts after Apr-2026 and before Dec-2026, which is nobody's intent.

Do not put the budget, the bid, or the audience size in the name. Those change. A name that contains a mutable value is either continuously wrong or continuously being renamed, and renaming has costs we will get to.

Ad set and ad levels

Each level adds only what it uniquely determines. Repeating the campaign's fields on the ad set makes names unreadably long and adds nothing, since the hierarchy already carries the parent.

Ad set / ad group:

{audience-type}_{audience-name}_{placement}
LAL_purchasers-1pct_auto
INT_fitness-enthusiasts_feed
RMKT_cart-abandon-7d_auto

Ad:

{concept}_{format}_{ratio}_{version}
founder-story_video_9x16_v3
ugc-testimonial_video_9x16_v1
product-hero_static_1x1_v2

The ad level is where the money is, and concept is the field that earns its place. Grouping ads by creative concept — the idea, independent of format, ratio or iteration — lets you answer the only creative question that generalises: which angles work, as opposed to which individual assets happened to win. founder-story performing across three formats and two ratios is a finding. One asset winning is an anecdote.

Keep version as a simple incrementing v1, v2, v3 and never reuse a number. A reused version number makes historical reporting ambiguous forever.

Closed vocabularies, because this is the part that fails

A convention with a documented structure but free-text values is not a convention. Within a month you will have retarget, Retargeting, RMKT, rmkt and re-targeting in the same account, and any grouping you build on that field will silently split into five buckets.

So every structural field gets a closed list. If a value is not on the list, it is not allowed, and adding a value is a deliberate decision rather than something that happens because someone was in a hurry.

Market — ISO-style codes: US, UK, CA, AU, DE, FR, JP, or INTL for multi-market.

Funnel — exactly four values, and resist adding a fifth:

ValueMeaning
PROSPECTCold audiences, no prior interaction
RETARGETEngaged but not converted
RETAINExisting customers
BRANDAwareness, not performance-judged

ObjectiveCONV, TRAFFIC, LEAD, AWARE, APP, VIDEO.

Audience typeLAL (lookalike), INT (interest), BEH (behavioural), CUST (customer list), RMKT (remarketing), BROAD (no targeting), KW (keyword, for search).

Formatvideo, static, carousel, collection, text.

Ratio1x1, 4x5, 9x16, 16x9. Use x rather than : — a colon is unsafe in URLs and in several export formats.

Only offer, audience-name and concept are open text, and each gets one rule: lowercase, hyphen-separated, no delimiter characters, and reuse an existing value if one fits.

Platform-specific adjustments

The taxonomy is shared; the constraints are not.

Meta. The three levels are campaign, ad set, ad, which the template maps to directly. Watch two things: Advantage+ campaigns collapse audience decisions into the algorithm, so encode BROAD in the audience-type field rather than pretending to a targeting precision you did not choose; and Meta's dynamic creative produces combinations that no single ad name can describe, so name the ad by the concept pool rather than the individual permutation.

Google. The levels are campaign, ad group, ad. Ad groups in Search are keyword themes rather than audiences, so substitute the audience field for a theme field: {match-type}_{theme} — for example EXACT_running-shoes, PHRASE_trail-running. Performance Max has no meaningful ad-group layer, so encode the asset-group intent at that level instead. Our Google Ads campaign structure guide covers where those boundaries actually fall.

TikTok. Campaign, ad group, ad. TikTok's creative turnover is faster than anywhere else, so the version field carries more weight and will run higher. Do not compress it.

LinkedIn. Campaign group, campaign, ad. LinkedIn's extra top level is a genuinely useful home for the market and funnel fields, which lets the campaign name carry audience detail — job function, seniority, company size — that would otherwise not fit anywhere.

Naming and UTMs are the same problem, once

Your campaign name and your UTM parameters describe the same object, and if they use different vocabularies you have created a reconciliation task that recurs forever. Derive the UTMs from the name mechanically:

utm_source   = meta | google | tiktok | linkedin
utm_medium   = [cpc](/glossary/cpc) | paid-social | display
utm_campaign = {the campaign name, lowercased}
utm_content  = {the ad name, lowercased}
utm_term     = {keyword, search only}

The rule is that utm_campaign is the campaign name and nothing else — not a rewritten version, not an abbreviation. The moment someone "tidies up" a UTM, analytics and platform reporting stop joining. Our UTM naming conventions guide covers the closed vocabularies for source and medium, which have their own conventions worth respecting.

The validation rule you can actually run

A convention nobody checks decays within a quarter. The check needs to be mechanical and cheap, and this is the minimum version:

  1. Split the name on the delimiter.
  2. Assert the field count is exactly right for that level — five for campaigns, three for ad sets, four for ads.
  3. Assert each closed-vocabulary field's value is in its list.
  4. Assert the date field matches YYYY-MM.
  5. Assert the whole name is within the platform's character limit.

Anything that fails is a naming defect, and the useful discipline is to fix it the week it appears rather than at quarter end. Run it weekly against an export of active campaigns; it takes minutes and it is the difference between a convention and a document.

Migrating an account that is already a mess

Two things are true and they pull in opposite directions: names should be consistent, and renaming is not free. On most platforms, renaming a campaign does not reset learning or delivery, but it does break historical reporting that keyed on the old string — saved reports, dashboards, spreadsheets, anything joining on campaign name — and it makes year-over-year comparisons awkward at the seam.

So do not do a big-bang rename. Do this instead:

  1. Freeze the standard first. Document the fields and vocabularies, and get the people who launch campaigns to agree. A convention imposed without that agreement is renamed around within a month.
  2. Apply it to everything new, from a fixed date. No exceptions, including "quick tests" — those are exactly the campaigns that become permanent.
  3. Rename only what you will still be analysing. A campaign that ended two quarters ago and will never appear in another report is not worth the breakage.
  4. Keep a mapping file of old name to new name, with the date of the change. When a year-over-year comparison looks discontinuous, this file is what explains it.
  5. Record the cutover date prominently. Anyone comparing across it needs to know the taxonomy changed.

Where to go next

FAQ

What is a campaign naming convention?

A fixed, documented structure for naming campaigns, ad sets and ads — a set of fields in a fixed order joined by a consistent delimiter — so that names can be parsed into reporting dimensions the ad platform does not natively provide.

What should a campaign name include?

Market, funnel stage, objective, offer, and start month covers most accounts. Include only attributes that do not change: never budget, bid or audience size.

Should I use underscores or pipes?

Either, as long as it is consistent and the character never appears inside a field. Underscores are safer across CSV exports and URLs; pipes are more readable. Use hyphens inside fields regardless.

Does renaming a campaign reset its learning phase?

On the major platforms, renaming alone does not reset delivery or learning — editing targeting, budget or creative is what does. The real cost of renaming is broken historical reporting for anything that joined on the old name.

How long can a campaign name be?

Limits vary by platform and change over time, so validate against the current limit rather than a number from an article. Practically, keeping campaign names under about 100 characters keeps them readable in exports and avoids truncation in most interfaces.

How do I stop the convention from decaying?

Automate the check. Export active campaigns weekly, split each name on the delimiter, and assert field count and closed-vocabulary membership. Conventions that are only documented decay; conventions that are validated do not.

Related Tools

Related Use Cases

Relevant Reads

Naming Only Pays Off If Something Reads It

Soku parses your campaign names across every platform and turns them into the breakdowns your ad platforms will not give you — by funnel stage, by offer, by creative concept.

Get Started for Free

We use essential cookies to operate and secure Soku. With your permission, we also use optional analytics and advertising cookies to measure usage and campaigns. You can change your choice at any time. Privacy Policy