The tokens, by position
| Position in the tag | Token | Encoding |
|---|---|---|
| URL prefix (directly before the landing URL) or standalone click value | %%c1;cpdir= |
None |
| Nested inside a URL query-param value | %%ec1%3Bcpdir= |
Separator manually percent-encoded |
| Nested two redirects deep (double encoding) | No documented token — JS-encode manually | — |
| Cachebuster | __ADFRND__ |
— |
The prefix form is %%c1;cpdir= followed immediately by the landing URL. In
the nested form, %%ec1%3Bcpdir=, the ; separator is manually
percent-encoded as %3B — exactly the shape Adform's own nested-redirect
examples use, because the whole macro is riding inside another URL's query string.
Alongside __ADFRND__, CreativeValidator also recognizes
__ADFTIMESTAMP__, %%ADFRND%%, and %%ADFTimeStamp
as Adform cachebusters.
A correct Adform tag
<!-- Image creative trafficked to Adform:
%%c1;cpdir= as the URL prefix, right before the landing URL -->
<a href="%%c1;cpdir=https://example.com/fall-catalog" target="_blank">
<img src="https://cdn.example.com/creatives/fall-300x250.jpg"
width="300" height="250" border="0" alt="Fall Catalog" />
</a>
<!-- Click URL nested in another URL's query string: the encoded ec1 form,
with the nested landing URL percent-encoded as any nested URL must be -->
<a href="https://redirect.example.net/go?u=%%ec1%3Bcpdir=https%3A%2F%2Fexample.com%2Ffall-catalog&rnd=__ADFRND__">...</a>
The wrong-platform trap
Adform expands only its own tokens. Paste GAM's %%CLICK_URL_UNESC%%, a
DV360/Xandr ${CLICK_URL}, or Equativ's [countgo] into a tag
destined for Adform and the platform serves the token as literal text:
the ad renders, the landing page usually loads, and click reporting is silently lost —
there is no error to catch, only a reporting gap discovered weeks later.
CreativeValidator classifies any foreign click token as
WRONG PLATFORM MACRO before the tag is trafficked.
Source and verification
Primary source: Adform documentation, "Guide to Third-Party Tags in Adform". These tokens are docs-derived: correct to Adform's published documentation, but not behaviorally verified the way CreativeValidator's Google Ad Manager tokens are (those ran through a live GAM test network). Confirm in Adform before launch.
Paste your tag — the validator renders it and tells you if clicks will actually track: native macro, unfilled placeholder, wrong-platform token, or hardcoded URL.
Test an Adform tag now →Every rule cites its primary source — see the Policy Studio.
FAQ
What does %%c1;cpdir= do in an Adform tag?
It is Adform's click macro in its URL-prefix / standalone form: placed immediately before the landing URL, it expands into the click-tracking redirect so the click is counted before the browser reaches the destination.
When do I use %%ec1%3Bcpdir= instead?
When the click URL is nested inside another URL's query parameter. The
; separator is manually percent-encoded (%3B) — the form
Adform's own nested-redirect examples use.
Does Adform have a double-encoded click macro?
No — there is no documented double-encoded token. When a click URL sits two redirects deep, JS-encode it manually.
What is Adform's cachebuster macro?
__ADFRND__. Also recognized: __ADFTIMESTAMP__,
%%ADFRND%%, and %%ADFTimeStamp.