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; that’s what builds this level’s dictionary. Testing identifiers, below, are optional and only apply while a test is running.
1

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.
2

Append a testing identifier if the ad is part of an active test

Only for ads currently running a hypothesis test.
3

Assemble the name

Concatenate standard identifiers first, then the testing identifier, if any, at the end.

Standard identifiers

Creative name is freeform, for example AutoGlaze, and doesn’t need a table of its own. Whenever possible, the creative name should match the file name. See File naming conventions for more information.
Creative name alone does not make an ad name unique. Two ads running the same image with different primary text share a creative, a file, and every other standard identifier, so they assemble to the same string. Where copy is the thing that differs, the message angle category below is what separates them.

Ad type

Offer

CTA

Destination

Creative name, together with ad type, offer, CTA, and destination, is what lets you run creative analysis. When two ads are identical except for one field, for example the same creative and CTA but a different offer, the naming convention is what makes that comparison visible in a report without having to open each ad individually. Ad type, offer, CTA, and destination are the enumerable ones worth standardizing and logging above.Creative name is the one freeform field, and it carries less weight than it looks like it does. It identifies the asset, not the ad. One image can run under four different offers, three CTAs, and two message angles, which is eleven ads sharing one creative name, and the other fields are what tell them apart. The case that catches teams out is copy: change only the words and every standard field matches, which is why a copy test needs either a message angle value or a testing identifier before the two ads can coexist in the same ad set with different names.

Additional categories many teams add

Optional: add this if you run display ads with fixed creative dimensions.

Message angle

Optional, and the one to add first if you ever test copy. It is what makes two ads with the same creative and different words distinguishable, and what lets a report group performance by the argument the copy made rather than only by the picture.
Message angle sits after ad type and before offer. It describes the argument the copy makes; offer describes what is on the table. They move independently: a social proof ad and a discount ad can carry the same free-trial offer.
This table owns the closed list of argument kinds, because a report needs a small set to group by. The arguments themselves live in the angle library, where each one carries a type from this table. Forty angles group into these six columns. See angle concepts.

Ad format / size

Ad format / size only matters for channels with fixed creative dimensions, mainly display. Skip it for channels where creative is responsive or single-format by default.

Assemble the name

  • Standard only: AutoGlaze-STATIC-FREETRIAL-TRY-LP
  • With message angle: AutoGlaze-STATIC-SOCPROOF-FREETRIAL-TRY-LP
This document covers ad-level identifiers, including this level’s dictionary of values. See Campaign naming conventions and Ad set / ad group / variant naming conventions for the other two levels.

Testing identifiers

Optional: append only to ads that are part of an active test.
Testing identifiers mark a hypothesis you’re currently running, for example a creative format test or a copy test. Because a test only applies to some ads for a limited time, testing identifiers aren’t part of the standard identifier set: append one to the end of the ad name, after the standard identifiers, instead of building it into a table above.
  • With a testing identifier appended: AutoGlaze-STATIC-FREETRIAL-TRY-LP-TEST01
The control does not carry a testing identifier. It keeps the name it already has, because appending one to a live ad renames it and splits its history in two. Only the arms under test carry the ID. A copy test on the same creative then looks like this: The two differ twice over: the message angle says what changed, and the testing identifier says why. The angle survives the test; the identifier comes off when it ends. This document only covers where a testing identifier sits in the name. Which arm carries it, how it gets created, and where the result gets logged are in the experiment ID convention and the Experiment ID concepts.
Last modified on August 13, 2026