Open almost any Meta ad account six months into a testing programme and the ad list tells the story: "UGC Sarah v2", "New Hook FINAL v3", "Testimonial 3 (2)". Every result from every test is still in there. What's missing is the ability to ask a useful question of it, like which angle keeps winning, or whether one creator carries every script they read. Without an ad creative naming convention you can only sort by ad, so every test teaches you about one ad and nothing else.
An ad creative naming convention fixes that, but only if it's built for the questions you'll ask later, and only if the tracker behind it uses the same codes. So the template comes first, ready to copy. Below it sits the tracker that uses the same codes, then the UTM strings that carry each name into your analytics, then why we pick the fields we do. If you run creative testing on Meta or TikTok, this is the part of the system that decides whether your tests add up to anything.
The ad creative naming convention (copy this)
Three levels, one pattern each. Campaign and ad set names stay short because they describe the container. The ad name does the heavy lifting, because the ad is where the creative lives and where results get read.
CAMPAIGN objective_stage_structure_geo
sales_test_abo_uk
AD SET conceptid_audience_launchdate
c014_broad_261027
AD launchdate_conceptid_angle_persona_format_hook_creator_ratio_version
261027_c014_painrelief_busymum_testimonial_h2-kitchen_cr07_9x16_v1
Four rules hold it together:
- Underscores between fields, hyphens inside a field.
h2-kitchenis one field; the underscore either side tells a spreadsheet where it ends. - Lowercase, always. Google Analytics treats
Metaandmetaas different values, so mixed case quietly splits one row of data into two. - No spaces. Spaces turn into
%20once a name lands in a URL parameter, which makes reports ugly and filters fragile. - Fixed order, every time. Field six is always the hook. The moment someone swaps two fields, every parse built on the convention breaks.
Put simply, a good ad naming convention records the same fields in the same order on every ad, so you can split the name into columns and group results by idea, hook or creator instead of reading them one ad at a time. The fields that matter most are the concept ID, which ties every variation of an idea together, and the hook, which separates openings within it.
What goes in each field
Each field gets a short controlled vocabulary. Keep the allowed values in a tab of your tracker and pick from a dropdown, never from memory. Free typing is how "busymum", "busy-mom" and "mums" end up as three personas.
| Field | What it records | Rule | Example values |
|---|---|---|---|
| Launch date | The day the ad went live | YYMMDD, so names sort in date order | 261027 |
| Concept ID | The idea the ad belongs to | One ID per idea, issued in the tracker before anything is filmed | c014, c015 |
| Angle | The desire or problem the ad sells to | One word or a hyphenated pair from your list | painrelief, saves-time |
| Persona | Who the ad talks to | From the persona list in your brief | busymum, gymnew |
| Format | The type of ad | Format list, not production method | testimonial, unboxing, greenscreen |
| Hook | The opening, numbered within the concept | h + number, then a hyphen and a short descriptor | h1-question, h2-kitchen |
| Creator | Whose face and voice | A code from your creator roster, not a full name | cr07, cr12 |
| Ratio | Which cut of the file | Width x height | 9x16, 4x5 |
| Version | Original or iteration | v1 is the first cut; edits to the same hook and creator go up a number | v1, v2 |
Angle, persona and format are separate fields on purpose. They're the three variables a creative test actually moves, and we break them apart for the same reason we keep them apart in creative diversity planning: if they share one field, you can never tell which of them made the ad work.
The tracker behind the names
The name is only half the system. The other half is a tracker with one row per concept, keyed by the same concept ID. Here are the columns to set up:
Concept ID | Concept name | Angle | Persona | Format | Brief link
Hooks written | Creators cast | Launch date | Status
Spend | Result vs target | What we learned
The concept ID is issued in the tracker when the idea is approved, before a brief exists. It then goes on the brief, so the creator's files come back already tagged, and from the brief into the ad name. (If you brief creators yourself, put the ID in the brief's header; our guide to briefing a UGC creator shows where the rest of that brief comes from.)
To read results, export the ad-level report from Ads Manager with the ad name column, paste it into the tracker workbook and split the name back into fields. In Google Sheets, with the ad name in A2:
=SPLIT(A2, "_") splits the name into its nine fields
=REGEXEXTRACT(A2, "_(c\d{3})_") pulls just the concept ID
From there, three pivot tables do most of the work:
- By concept ID. Which ideas earn their spend? This is the decision that matters most, and the one ad-by-ad reporting hides.
- By hook, inside a winning concept. Once an idea works, which opening carries it? That tells you what to iterate next.
- By creator, across concepts. Does one face win whatever the script, or does the script win whatever the face? You'll want to know before you rebook anyone.
Then write one line in the "What we learned" column for each concept. Skip that and you've built a very tidy spreadsheet that nobody reads. Write it, and it's what makes a weekly creative sprint start from evidence instead of a blank page.
How do you get ad names into your analytics?
Use the platforms' dynamic URL parameters, so the ad name travels with every click and nobody types it twice. These are the strings to paste into the URL parameters field.
Meta
utm_source=facebook&utm_medium=paid_social&utm_campaign={{campaign.name}}&utm_content={{ad.name}}
One detail in Meta's URL parameters documentation changes how you should work: name-based parameters such as ad.name are set to the name used when the ad was first published. You can rename the ad afterwards, but the parameter keeps the original name, and Meta says changing URL parameters on a published campaign can send the ad set back into the learning phase. In practice, a naming mistake made at launch stays in your analytics for the life of that ad. So check the name before you hit publish, not after.
Ads Manager has naming templates too (Meta's Marketing API lists them as an ad account edge). They're handy for campaign and ad set names, which come mostly from settings. The creative fields (angle, persona, hook) don't live in Ads Manager at all, though, so the ad name still has to come from your tracker.
TikTok
utm_source=tiktok&utm_medium=paid_social&utm_campaign=__CAMPAIGN_NAME__&utm_content=__CID_NAME__
In TikTok's macro list, __CID_NAME__ is the creative name and __AID_NAME__ is the ad group name. TikTok notes the macros change for upgraded Smart+ campaigns, where __ADID_V2_NAME__ carries the ad name, so check which campaign type you're running before you copy the string.
Google Analytics
Google's own UTM guidance recommends a strict, case-sensitive naming convention and lowercase as standard practice, and warns that values like SpringSale and Spring_Sale count as different. That's where the lowercase and underscore rules above come from. Break them and GA splits a single ad into several rows.
Why we name the concept, not the file
A lot of naming advice stops at mechanics: delimiters, field order, a generator. The mechanics matter less than the choice of fields, and the field that's easiest to skip is the concept ID.
Here's the problem it solves. Your best idea gets five hooks, three creators and two ratios. That's thirty ads. Without a shared ID, it reads in reporting as thirty separate experiments, most of which "lost" on thin spend, and the idea looks average. With the ID, it reads as one concept with a clear result and an obvious best hook. Read the first way, a working idea can easily get switched off.
A few rules we hold to:
- A new desire gets a new concept ID, even with the same creator and the same set. A new hook on the same idea keeps the ID and takes the next hook number.
- Results never go in the name. No "WINNER" or "2x-roas" suffixes. The name says what the ad is and the tracker says how it did, partly because results change and partly because you can't rename the parameter anyway.
- Duplicating an ad carries its name into the copy, so rename it before you publish.
- The file, the tracker row and the ad share one code, so anyone can get from a number in a report to the brief behind it with a single search.
It's close to how we name our own deliverables. Every file we deliver carries the same fields in a fixed order (script date, studio, brand, creative name, creator or avatar, ratio, hook description), and on some accounts a single base name is shared by the Drive folder, the tracker row, the script and the edit project. It's dull admin, and it means anyone can get from a file to the script and edit project behind it with one search. If you'd rather hand that discipline to a team that already runs it, here's how we work and what it costs. For reading the numbers once your names are clean, our guide to reading Meta's creative report picks up where this leaves off, and there's more in the resources library.
Ad naming convention FAQs
What is the best naming convention for Meta ads?
One that puts the same fields in the same order on every ad, so the name can be split into columns. A practical pattern is launch date, concept ID, angle, persona, format, hook, creator, ratio and version, joined by underscores, all lowercase, with no spaces. Campaign and ad set names can stay shorter.
Can you rename a Meta ad after it goes live?
You can rename it in Ads Manager, but Meta sets name-based URL parameters such as ad.name to the name used when the ad was first published, so your UTM data keeps the original name. Changing URL parameters on a published campaign can also send the ad set back into the learning phase. Get the name right before publishing.
Should ad names include the date?
Yes, at the start, in YYMMDD format. A leading date sorts ads chronologically in any export, separates relaunches of the same creative, and makes it easy to filter a test window. Put the launch date in, not the date the ad was filmed.
What should a UGC ad name include?
For UGC, add two fields that are easy to leave out: a creator code, so you can compare faces across scripts, and a numbered hook, so you can compare openings within one idea. Use a roster code rather than the creator's full name, and tie both to a concept ID in your tracker.