A naming convention that survives 300 ads

A naming convention is not admin. It is the only thing that makes an account readable later, and the thing that decides whether a quarterly review takes an hour or a week. The rules below are deliberately boring: a fixed vocabulary, one delimiter, the same field order every time, and UTMs that mirror the names so analytics and Ads Manager tell the same story.

0 of 28 checked

The rules

  • One delimiter, everywhere

    Pick the pipe or the underscore and never mix. Spaces around delimiters are invisible and break exact-match filtering, so do not use them.

  • Fixed field order, always the same

    A name is only scannable if the third segment is always the same kind of thing. Empty fields get a placeholder rather than being skipped.

  • A closed vocabulary per field

    UGC, not ugc or User Generated. Write the list down once. Free text in a name is how a convention dies.

  • Dates as YYYY-MM-DD

    Sorts correctly, reads unambiguously in every country, and does not need explaining to a new hire.

  • Nothing that will change

    Do not put budget or status in a name. Anything that changes turns the name into a lie the first time it is edited.

Campaign level

Pattern: OBJECTIVE | MARKET | OFFER | STRUCTURE | YYYY-MM-DD

  • OBJECTIVE

    SALES, LEADS, TRAFFIC, AWARENESS, APP. Matches the Meta objective so filtering by name matches filtering by objective.

  • MARKET

    Country or region code: US, CA, UK, EU, AU, ROW.

  • OFFER

    The commercial thing being promoted: EVERGREEN, BF-SALE, BUNDLE, NEWSLETTER. Closed list.

  • STRUCTURE

    CBO or ABO, plus ASC for Advantage plus shopping. Tells you how the budget behaves before you open it.

  • DATE

    The launch date, not today's date. Example: SALES | US | EVERGREEN | CBO | 2026-08-26

Ad set level

Pattern: AUDIENCE | TARGETING | PLACEMENT | OPTIMISATION

  • AUDIENCE

    BROAD, LAL1-PUR180, INT-FITNESS, RET-ATC30. Encode the source and the window so a retargeting set is never ambiguous.

  • TARGETING

    Age and gender band if you split them: 25-54-ALL, 18-34-F. Use ALL rather than leaving it blank.

  • PLACEMENT

    ADV for Advantage placements, or the manual set: FEED, REELS, STORIES. If you never split placements, keep the field with ADV anyway so field positions stay stable.

  • OPTIMISATION

    The optimisation event: PUR, LEAD, ATC, LPV. The single most useful thing to see at a glance. Example: BROAD | 25-54-ALL | ADV | PUR

Ad level

Pattern: CONCEPT | HOOK | FORMAT | RATIO | VERSION | YYYY-MM-DD

  • CONCEPT

    The idea, not the file: SOCIAL-PROOF, FOUNDER-STORY, PROBLEM-AGITATE, DEMO. This is the field you will group by when you review what worked.

  • HOOK

    The opening line or device in three words: STOP-SCROLLING, 3-REASONS, BEFORE-AFTER.

  • FORMAT

    UGC, STATIC, MOTION, CAROUSEL, TESTIMONIAL, GREENSCREEN.

  • RATIO

    1x1, 4x5, 9x16. Placement performance analysis is impossible without it.

  • VERSION

    V1, V2, V3. Increment for any change to the asset, never reuse. Example: SOCIAL-PROOF | 3-REASONS | UGC | 9x16 | V2 | 2026-08-26

The UTM mapping

Use Meta dynamic macros so each ad fills its own values at click time

  • utm_source=facebook

    Static. Use instagram only if you split by publisher platform and genuinely act on the difference.

  • utm_medium=paid-social

    Static. Consistency across channels matters more than the exact word, but pick one and never change it.

  • utm_campaign={{campaign.name}}

    The macro, not a hardcoded string. Hardcoding is what breaks when campaigns are duplicated.

  • utm_content={{ad.name}}

    This is why the ad name matters: it becomes the row in your analytics report.

  • utm_term={{adset.name}}

    Ad set in term keeps audience-level analysis available without adding a custom parameter.

  • Verify the braces survive publishing

    Some tools URL-encode the macros, which sends a literal percent-encoded string to analytics instead of the resolved name.

Making it stick

  • Store the convention in the tool, not a document

    A template applied at launch produces compliant names without anyone remembering the rules. A document produces arguments in month three.

  • Audit monthly with a filter

    Filter ad names that do not contain your delimiter, or that contain a space. Anything returned was created outside the convention.

  • Never rename live ads to fix history

    Renaming does not retroactively fix the UTM values already sent to analytics, so you end up with two identities for one ad. Fix the convention going forward instead.

Copy the patterns above into your own doc, replace the vocabularies with your own, and store the final version wherever your ads are actually created.

Want the editable copy?

The whole template is on this page already. Leave an address and we will send a copy you can edit, plus the occasional note when the Meta behaviour behind it changes.

Make these checks settings, not steps.

Launch 100 ads with one click. Free for 7 days, no card required.

Start free trial →