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 →
{{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.
| Token | Criteo macro | ValidVisit param | Example |
|---|---|---|---|
| Campaign ID *campaign | {{criteo_campaign_id}} | vv_campaign_id | 123456 |
| Publisher Domainpublisher | {{domain}} | vv_publisher_id | pub_42 |
| Slot Widthplacement | {{width}} | vv_placement_id | plc_7 |
| Ad IDad | {{adid}} | vv_ad_id | 456789 |
| Creative Typecreative | {{creative_type}} | vv_creative_id | 987 |
{{criteo_campaign_id}}vv_campaign_id{{domain}}vv_publisher_id{{width}}vv_placement_id{{adid}}vv_ad_id{{creative_type}}vv_creative_id* required for Criteo attribution.
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.
No per-click id: each verdict attaches to the visit.
Tokens last verified against Criteo’s docs on 2026-10-02.
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.
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.
{{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.
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.
See which Criteo publishers and placements send real buyers vs. bots.
Join the waitlist with just your email · 7-day trial at launch
One script · no cookies · no device IDs · raw IP never stored