VASTlint

UniversalAdId: one creative, one identity

UniversalAdId is the VAST element that gives a creative a single identity across every system that touches it. Ad servers, DSPs, SSPs, and verification vendors each assign their own internal creative IDs, and none of them match. The UniversalAdId, typically a registered Ad-ID code, is the one identifier that means the same creative everywhere.

The element was introduced in VAST 4.0 and is required inside the <Creative> of every InLine ad from 4.0 onward.

Why creative identity is a money problem

Several revenue-adjacent systems only work if the same creative is recognizable as the same creative across platforms:

  • Frequency capping. A viewer who sees the same spot on two apps and a CTV channel counts as three exposures to three different internal IDs. Cross-platform caps need one ID.
  • Creative deduplication in pods. Two DSPs win adjacent slots in the same ad pod with the same creative under different internal IDs. Pod dedup logic can only catch it via UniversalAdId.
  • Competitive separation. Keeping two car brands out of the same break requires knowing what the creatives actually are, not what each seller labeled them.
  • Audits and brand safety. Tracing one creative across a quarter of delivery logs from different vendors requires a join key.

This is also one of the quiet casualties of version downgrades: when a 4.x tag is re-rendered as VAST 2.0 or 3.0 for compatibility, UniversalAdId has no home and the identity is stripped. The version mismatch post covers that failure mode.

Syntax by VAST version

The element's shape changed in 4.2, and the difference is a recurring source of invalid tags.

VAST 4.0 and 4.1: idValue attribute

<Creative id="5480" sequence="1">
  <UniversalAdId idRegistry="Ad-ID" idValue="CNPA0484000H">CNPA0484000H</UniversalAdId>
  <Linear>...</Linear>
</Creative>

VAST XML fragment only. This excerpt belongs inside a complete VAST document, so standalone validation will fail until it is wrapped in a full <VAST>response.

VAST 4.2 and 4.3: value in text content, multiple IDs allowed

<Creative id="5480" sequence="1">
  <UniversalAdId idRegistry="Ad-ID">CNPA0484000H</UniversalAdId>
  <UniversalAdId idRegistry="clearcast.co.uk">AAA/BBBB123/030</UniversalAdId>
  <Linear>...</Linear>
</Creative>

VAST XML fragment only. This excerpt belongs inside a complete VAST document, so standalone validation will fail until it is wrapped in a full <VAST>response.

  • idRegistry (required): the registry that issued the ID. Ad-ID is the standard registry for US commercial creative; Clearcast serves the same role in the UK. When no registry ID exists, use unknown and supply your ad server's creative ID as the value.
  • The value: in 4.0/4.1, both the idValue attribute and the text content (kept identical); in 4.2+, text content only.
  • Multiplicity: exactly one element through 4.1; one or more in 4.2+.

UniversalAdId vs the other identifiers in a tag

IdentifierIdentifiesScope
UniversalAdIdThe creative assetGlobal, cross-system, stable across campaigns
Creative id attributeThe creative in one ad serverPrivate to that system
Ad id attributeThe ad buy wrapping the creativePrivate to that system
AdServingId (VAST 4.1+)One serving transactionUnique per impression, used to join logs across parties

Common UniversalAdId mistakes

  • Missing entirely in a 4.x InLine. The element is required from 4.0 onward; its absence is a spec violation that vastlint flags.
  • idValue under version 4.2 or 4.3. The attribute was removed; strict parsers read only text content and may see an empty identifier.
  • Attribute and content disagreeing in 4.0/4.1. When both carry a value, they must match; a mismatch means downstream systems disagree about which creative played.
  • idRegistry="Ad-ID" with a made-up value. Claiming the Ad-ID registry for an internal ID poisons dedup for everyone. Use unknown honestly instead.
  • Regenerating the value per response. The point is stability. An ID that changes on every serve is a session ID, and AdServingId already exists for that.

Does vastlint validate UniversalAdId?

Yes. vastlint checks presence in 4.x InLine creatives, version-appropriate structure (attribute vs text content), idRegistry presence, and Ad-ID code format where the registry claims it. See the rules reference for the exact rule IDs.

Check whether your tags carry a valid creative identity.Open the VAST tag validator →

Further reading