All networks
Criteo logo
Tracking reference · Banner / Display

Criteo tracking tokens & macros

Criteo runs both retargeting and acquisition campaigns: personalized product ads shown to people who've already visited your site, and to new shoppers likely to be interested. Its ad tracking covers both, and its macros are written inside double curly braces on your click tracking URL. Appending Criteo's macros lets ValidVisit attribute each visit to the campaign, publisher domain, and slot that produced it, and judge it Valid or Invalid, with its evidence, so a quiet drop in traffic quality doesn't hide inside an otherwise-healthy number.

Cross-check any macro against the network’s official documentation. Criteo official docs →

5
Criteo macros mapped to attribution
1
required for attribution
no-hop
one script, no link rewriting
Valid / Invalid
a verdict on every visit

{{criteo_campaign_id}} is the required token and anchors every visit to its campaign; Criteo describes it as the numerical ID for the Criteo Marketing Campaign. {{domain}} is the one worth building your reporting around — it's the domain name of the publisher where the ad was displayed. Criteo fills it on web supply and leaves it empty on app supply, where {{bundle_id}} carries the publisher app instead. {{width}} is the impression slot's width in pixels, which doubles as a rough placement descriptor. {{adid}} is the unique ad identifier, and {{creative_type}} is a number for the banner type: HTML, Video or Native. Criteo replaces each macro with its value at the time the banner is displayed. You add them in the ad set's tracking settings, where the suffix option appends parameters to the end of your landing page URLs; tracking set on an individual ad takes preference over the ad set's.

A rise in the invalid share on one publisher domain is a specific and useful thing to catch, and it's easy to miss inside a campaign-wide number. ValidVisit's part is limited to that detection, judging, and reporting; it doesn't have a way to stop Criteo from serving on a given domain or adjust bids on your behalf. If {{domain}} keeps surfacing the same publisher with a high invalid share, the follow-through happens inside your Criteo account. In Commerce Growth, deny the website under Placement Targeting in the ad set's Refine your targeting step. In Commerce Max, add it to a domain list under Shared Library > Domain/App Lists and apply that list to the line item as a block list.

MACRO MAP

Criteo macro → ValidVisit param

Campaign ID *campaign
Criteo macro
{{criteo_campaign_id}}
ValidVisit param
vv_campaign_id
Example
123456
Publisher Domainpublisher
Criteo macro
{{domain}}
ValidVisit param
vv_publisher_id
Example
pub_42
Slot Widthplacement
Criteo macro
{{width}}
ValidVisit param
vv_placement_id
Example
plc_7
Ad IDad
Criteo macro
{{adid}}
ValidVisit param
vv_ad_id
Example
456789
Creative Typecreative
Criteo macro
{{creative_type}}
ValidVisit param
vv_creative_id
Example
987

* required for Criteo attribution.

TRACKING URL

Ready-to-use Criteo tracking URL

criteo tracking URL
https://yoursite.com/landing
?utm_source=criteo
&utm_medium=banner
&vv_campaign_id={{criteo_campaign_id}}
&vv_publisher_id={{domain}}
&vv_placement_id={{width}}
&vv_ad_id={{adid}}
&vv_creative_id={{creative_type}}

Append these params to your landing-page URL — Criteo fills the macros at click time, so every visit arrives attributed and ready to judge. No funnel hop.

Using Criteo tokens?

See which Criteo sources send bots.

  • Every visit judged Valid or Invalid, worst source first.
  • Attributed through the Criteo tokens above, down to the placement.
  • Works beside your tracker, with nothing added to the click path.

Just your email · no card · unsubscribe anytime · privacy policy

Criteo traffic quality →
deal-alerts.example71% invalid
zone 447123% invalid
premium-news.example2% invalid
WHAT IT JUDGES BY

What Criteo tokens let you break bots down by

Breakdown the tokens allow
  • Publisher Domain
  • Slot Width

No per-click id: each verdict attaches to the visit.

Where you can act, in Criteo
  • IP exclusionnot offered
  • Device targetingdocumented
  • OS targetingdocumented
  • Browser targetingnot offered
  • Connection typenot offered
  • Languagedocumented

Tokens last verified against Criteo’s docs on 2026-10-02.

Found a bad publisher domain? Exclude it in Criteo

In Commerce Growth the buyer types the bad websites or apps into the deny list or imports a .txt/.csv file (a new file overwrites the current list); it takes effect within one hour. In Commerce Max the buyer builds a domain or app list (one domain per line, no http/https, up to 100,000 domains, 255 chars/entry) and applies it to each line item as a block list.

Commerce Growth: ad set > Refine your targeting > Placement Targeting (allow/deny websites & apps, plus a Supply Vendors toggle). Commerce Max: Shared Library > Domain/App Lists to build the list, then line item > Targeting step > Domain Lists / App Bundle Lists section to apply it
FAQ

Criteo tracking token FAQs

Does {{domain}} fill on every Criteo visit?+

No. Criteo describes {{domain}} as the publisher's domain where the ad is displayed on web, and says it is empty on app supply. For in-app visits, {{bundle_id}} gives the publisher app's ID and {{bundle_name}} its readable name, and {{display_env}} says whether the display was App or Web.

Which token identifies the publisher where the ad rendered?+

{{domain}}. It's the publisher domain the ad was displayed on, and it's the same unit Criteo's allow and deny controls take, so it's the key dimension for spotting a specific low-quality source.

Can I exclude a bad publisher domain directly through ValidVisit?+

No — ValidVisit never writes to your Criteo account. If a domain keeps being judged invalid, you deny it yourself inside your Criteo account: under Placement Targeting in Commerce Growth, or with a domain list applied as a block list in Commerce Max. Criteo says a Commerce Growth change takes effect within one hour.

Is Criteo traffic real? See how ValidVisit judges every Criteo visit for bot traffic.
deal-alerts.example71% invalid
zone 447123% invalid
premium-news.example2% invalid

Judge every Criteo visit — and find the fake ones.

See which Criteo publishers and placements send real buyers vs. bots.

Just your email · no card · unsubscribe anytime · privacy policy

Join the waitlist with just your email · 7-day trial at launch

One script · no cookies · no device IDs · raw IP never stored