Adsterra exposes a set of double-hash macros you drop straight into your landing-page link. Append the macros below and every click arrives at ValidVisit already stamped with the exact placement it came from, so we can attribute the visit to the right Adsterra placement and judge it Valid or Invalid, with its evidence.
Cross-check any macro against the network’s official documentation. Adsterra official docs →
On Adsterra the macro that ties a click back to the source you actually care about is ##PLACEMENT_ID##, which identifies the specific placement serving your ad; ##BANNER_ID## narrows it further down to the creative, while ##CAMPAIGN_ID## keeps everything grouped by campaign. The ##SUB_ID_SHORT(action)## macro, obligatory on CPA campaigns, carries Adsterra's own click identifier, so each visit lands with a unique click id plus its placement attached. Note the format quirk: every Adsterra macro is wrapped in double hashes (##...##), which Adsterra says are part of the macro, and these are plain URL parameters, so nothing here needs a funnel hop or an extra hop.
Once each click is tied to its ##PLACEMENT_ID##, the data stops being a vague campaign-level average and becomes per-placement. ValidVisit judges each visit after the click arrives, so when a placement keeps sending invalid traffic or bots, you see exactly which placement is responsible and can act on it yourself: open the Statistics page, pick the campaign, group by Placement and switch off the State toggle for the offending placement IDs, or add them to the Blacklist in the campaign's Advanced Settings. ValidVisit flags them, but the exclusion is always a manual step you take in Adsterra's own dashboard.
| Token | Adsterra macro | ValidVisit param | Example |
|---|---|---|---|
| Click ID (Sub ID) *click | ##SUB_ID_SHORT(action)## | vv_click_id | a1b2c3d4e5f6 |
| Campaign ID *campaign | ##CAMPAIGN_ID## | vv_campaign_id | 1843217 |
| Placement IDplacement | ##PLACEMENT_ID## | vv_placement_id | 5582910 |
| Banner ID (Creative)creative | ##BANNER_ID## | vv_creative_id | 990321 |
##SUB_ID_SHORT(action)##vv_click_id##CAMPAIGN_ID##vv_campaign_id##PLACEMENT_ID##vv_placement_id##BANNER_ID##vv_creative_id* required for Adsterra attribution.
https://yoursite.com/landing?utm_source=adsterra&utm_medium=pop&vv_click_id=##SUB_ID_SHORT(action)##&vv_campaign_id=##CAMPAIGN_ID##&vv_placement_id=##PLACEMENT_ID##&vv_creative_id=##BANNER_ID##Append these params to your landing-page URL — Adsterra fills the macros at click time, so every visit arrives attributed and ready to judge. No funnel hop.
Carries a per-click id, stored with each visit so a verdict traces back to the click.
Tokens last verified against Adsterra’s docs on 2026-10-02.
The buyer either toggles the State switch OFF next to underperforming placement IDs on the Statistics page (bulk actions supported), or pastes the comma-separated placement IDs into the Blacklist field in the campaign’s Advanced Settings (also possible in bulk via API v3).
##PLACEMENT_ID## is the one that names the specific placement serving your ad. Pair it with ##BANNER_ID## if you want to drill down to the creative level, and keep ##CAMPAIGN_ID## so everything stays grouped by campaign.
No. The Adsterra macros (##SUB_ID_SHORT(action)##, ##CAMPAIGN_ID##, ##PLACEMENT_ID## and the rest) are plain URL parameters appended to your destination link. There is no funnel hop, no extra hop, and no script to install.
Add the macros to the Landing URL when you set up or edit the campaign in Adsterra. When ValidVisit flags a placement sending invalid traffic, open the Statistics page, pick the campaign, group by Placement and switch off the State toggle next to those placement IDs, or paste them, comma-separated, into the Blacklist in the campaign's Advanced Settings.
See which Adsterra 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