PropellerAds delivers your push and pop traffic through ad zones, and by its own account an offer can perform very well on some zones and not at all on others. Append these macros to your destination URL and every click arrives stamped with the exact zone, subzone, and campaign it came from, so ValidVisit can attribute it down to the precise zone that delivered it and judge that visit Valid or Invalid, with its evidence.
Cross-check any macro against the network’s official documentation. PropellerAds official docs →
Attribution on PropellerAds hangs on a couple of tokens. The ${SUBID} macro is the per-click identifier you pass back for S2S tracking, but the token that actually names the sub-source you care about is {zone_id} (with {subzone_id} drilling one level deeper) alongside {campaign_id} for the campaign context. Note the format quirk: ${SUBID} uses the dollar-brace style while the zone and campaign tokens are plain curly braces like {zone_id} and {bannerid} — keep each one exactly as written. If your tracker can't handle the dollar sign or the capitals, PropellerAds accepts aliases for ${SUBID} such as {SUBID} and {clickid}. The tokens available for your ad format and pricing model are listed below the Target URL field on the campaign creation page.
Once every click is tied to its zone, the granularity becomes actionable. ValidVisit looks at 100+ data points per visit and rolls them into one verdict, Valid or Invalid, then ranks the zone_ids with the highest invalid share for you. The verdict blocks nothing and ValidVisit never edits your PropellerAds campaign, so you take that ranked list and act on it yourself: open the campaign's targeting in your PropellerAds dashboard, find Zone Limitation, set it to exclude and add the bad zone IDs manually. The verdict points the finger at the underperforming zone or subzone, not at PropellerAds itself.
| Token | PropellerAds macro | ValidVisit param | Example |
|---|---|---|---|
| Click ID (SUBID) *click | ${SUBID} | vv_click_id | a1b2c3d4e5f6 |
| Campaign ID *campaign | {campaign_id} | vv_campaign_id | 7654321 |
| Zone IDpublisher | {zone_id} | vv_publisher_id | 3456789 |
| Subzone IDplacement | {subzone_id} | vv_placement_id | 112233 |
| Banner / Creative IDcreative | {bannerid} | vv_creative_id | 998877 |
${SUBID}vv_click_id{campaign_id}vv_campaign_id{zone_id}vv_publisher_id{subzone_id}vv_placement_id{bannerid}vv_creative_id* required for PropellerAds attribution.
https://yoursite.com/landing?utm_source=propellerads&utm_medium=push&vv_click_id=${SUBID}&vv_campaign_id={campaign_id}&vv_publisher_id={zone_id}&vv_placement_id={subzone_id}&vv_creative_id={bannerid}Append these params to your landing-page URL — PropellerAds 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 PropellerAds’s docs on 2026-10-02.
The buyer pastes the list of bad zone IDs into the campaign’s Zone Limitation field set to Exclude (blacklist), or excludes individual subzones. Excluding a zone removes all of its subzones, and when a subzone is excluded PropellerAds moves the budget to the other subzones in the campaign.
{zone_id} is the one that names the ad zone behind each click, and {subzone_id} narrows it further. {campaign_id} gives you campaign context and ${SUBID} is the per-click ID for S2S, but zone and subzone are what you rank and act on for traffic quality.
No. These are ordinary URL parameters appended to your destination link. PropellerAds fills in the values when it fires the click — there's no extra hop or extra script required, you just add the macros to the URL.
Inside PropellerAds, not in ValidVisit. ValidVisit ranks the bad zone_ids; you add them to Zone Limitation, set to exclude, in your campaign's targeting in the PropellerAds dashboard. ValidVisit never adds a zone to your PropellerAds exclusions for you.
See which PropellerAds 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