Tracking on TikTok Ads runs on dynamic macros you drop into your landing-page URL, which TikTok fills in at click time, plus an auto-tagged ttclid that rides along on every click. Appending these macros lets ValidVisit attribute each visit back to its exact sub-source inside TikTok and judge it Valid or Invalid, so you can see which placements actually send real people. The verdict is a report: it judges each visit after it arrives and changes nothing in TikTok Ads Manager.
Cross-check any macro against the network’s official documentation. TikTok Ads official docs →
On TikTok, attribution starts with __CAMPAIGN_ID__ (the one required macro) and narrows down through the optional __AID__ (ad group) and __CID__ (creative) tokens, so you can tell which specific creative and ad group a click came from. The piece most buyers care about is __PLACEMENT__, which separates TikTok's own inventory from TikTok Pangle, the ad network TikTok now calls TikTok Ad Network, and the auto-tagged ttclid click ID, which TikTok stamps onto the URL by itself with no macro to add. Note the distinctive all-caps, double-underscore format (__CAMPAIGN_ID__, __AID__, __CID__) TikTok uses for its placeholders.
Once every click is tied to its placement and campaign, the per-sub-source view tells you where invalid traffic and bots are concentrating. __PLACEMENT__ stops at the placement type and does not identify the app, so the levers are the ones TikTok gives you: add the offending apps' bundle IDs to the block list under Tools (up to 10,000), leave Pangle out under Select Placement when you build the next ad group, since TikTok does not let you change the placement of an existing one, and shift budget toward what is judged valid. ValidVisit never edits your TikTok campaigns; you make every one of those changes manually in TikTok Ads Manager.
| Token | TikTok Ads macro | ValidVisit param | Example |
|---|---|---|---|
| Campaign ID *campaign | __CAMPAIGN_ID__ | vv_campaign_id | 1700000001 |
| Ad Group IDadset | __AID__ | vv_adset_id | 1700000002 |
| Creative IDcreative | __CID__ | vv_creative_id | 1700000003 |
| Placementplacement | __PLACEMENT__ | vv_placement_id | TikTok |
| Click ID (ttclid) *click | (auto-tagging) | ttclid | EhZ… |
__CAMPAIGN_ID__vv_campaign_id__AID__vv_adset_id__CID__vv_creative_id__PLACEMENT__vv_placement_id(auto-tagging)ttclid* required for TikTok Ads attribution.
https://yoursite.com/landing?utm_source=tiktok-ads&utm_medium=social&vv_campaign_id=__CAMPAIGN_ID__&vv_adset_id=__AID__&vv_creative_id=__CID__&vv_placement_id=__PLACEMENT__Append these params to your landing-page URL — TikTok Ads 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 TikTok Ads’s docs on 2026-10-02.
The buyer adds bad bundle IDs individually or bulk-uploads an .xlsx (one bundle ID per row, up to 10,000) to the TikTok Ad Network (formerly Pangle) block list, which stops their ads serving on those apps for any ad group with the block list enabled.
__PLACEMENT__ is the key one, because it distinguishes TikTok's own inventory from TikTok Pangle, its third-party app network. Pair it with the required __CAMPAIGN_ID__ and the optional __AID__ and __CID__ to pin a click to a specific ad group and creative.
No. These are plain URL parameters appended to your landing-page link, and TikTok substitutes the real values at click time. The ttclid click ID is auto-tagged by TikTok on its own, so there's nothing extra to install.
Add them to your destination URL when building or editing the ad in TikTok Ads Manager. Once clicks start arriving with the macros populated, ValidVisit attributes and judges each visit, and you act on the results manually in Ads Manager.
See which TikTok Ads 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