Judge every MediaGo visit by publisher site. Find the ${SITE_ID} values inflating your native spend before they distort campaign optimization.
site in MediaGoThe buyer adds each bad site’s site_id and domain name to the campaign’s or the account’s block list (op=0 block / op=1 unblock), max 100 sites per API call; the site_id must be exact and cannot be 0 or null.
MediaGo is a primarily CPC-priced advertising platform that buys native and display placements from publishers across the open web. Every click can carry a ${SITE_ID} identifying the site the placement ran on and a ${TRACKING_ID}, the tracking id MediaGo expects back on a conversion postback. That site-level transparency matters because it matches the control MediaGo gives you: its block lists work on site ids, for one campaign or for the whole account. A verdict attributed to ${SITE_ID} shows which sites carry an invalid share far above the rest of the campaign, which is the list you take to the block list.
MediaGo describes its supply as premium publishers and says enhanced anti-fraud strategies keep its inventory safe. What its documentation gives an advertiser to act on is the site: daily reports in the site dimension, and block lists at campaign and account level. So invalid traffic on MediaGo is something you find and handle per ${SITE_ID}.
Two details from MediaGo’s own docs matter when you read a site list. The same domain can appear under more than one site id — its API examples list msn.com twice with different ids — so judge the id, not the domain, and add ${PUBLISHER_NAME} if you want the publisher’s name in the URL beside it. And a block needs the exact site id together with its domain name: MediaGo warns that 0 or null cannot be used to block a site.
${SITE_ID}Segment your report by ${SITE_ID}. Sites contributing a disproportionate share of click volume with Invalid verdicts are the ones to look at first. A ${SITE_ID} whose invalid share sits well above your campaign baseline is a candidate for the campaign block list before its volume starts shaping how the campaign optimizes.
${ASSET_ID} on the same site${ASSET_ID} is MediaGo’s id for one ad asset: a URL, image and title combination. If one asset on a ${SITE_ID} draws a disproportionately high invalid share while another on the same site draws valid traffic, rule out the creative before blocking — otherwise you may cut a site that is actually fine.
MediaGo keeps two block lists, one per campaign and one for the whole account. When a ${SITE_ID} shows a high invalid share in several campaigns, the account list covers them all at once; when it is bad in only one, keep the block on that campaign.
Invalid share broken down by:
${SITE_ID}Identifier of the publisher site where the click was served.Per-click id: MediaGo passes a unique click id, and ValidVisit stores it with each visit, so a verdict traces back to the click in MediaGo’s own reports.
Compare bot & invalid-traffic breakdown across every ad network →See your own MediaGo sub-sources judged this way.
Each MediaGo macro maps to a normalized parameter, so every judged visit is pinned to the right campaign, creative and publisher.
https://yoursite.com/landing?utm_source=mediago&utm_medium=native&vv_campaign_id=${CAMPAIGN_ID}&vv_campaign_name=${CAMPAIGN_NAME}&vv_ad_id=${AD_ID}&vv_publisher_id=${SITE_ID}&vv_click_id=${TRACKING_ID}&vv_creative_id=${ASSET_ID}| Token | MediaGo macro | Maps to | Identifies |
|---|---|---|---|
| Campaign ID | ${CAMPAIGN_ID} | campaign_id | campaign |
| Campaign Name | ${CAMPAIGN_NAME} | campaign_name | campaign |
| Ad ID | ${AD_ID} | ad_id | ad |
| Site ID | ${SITE_ID} | publisher_id | publisher |
| Tracking ID (Click ID) | ${TRACKING_ID} | click_id | click |
| Asset ID (Creative) | ${ASSET_ID} | creative_id | creative |
${CAMPAIGN_ID}${CAMPAIGN_NAME}${AD_ID}${SITE_ID}${TRACKING_ID}${ASSET_ID}Macros checked against MediaGo’s own documentation on 2026-10-02. MediaGo docs
The verdict works the same way on every network. ValidVisit never changes your MediaGo account: you make the exclusion there yourself. How the verdict works →
Add the ${SITE_ID} values to a block list through the Sites Block Management API: “Block/Unblock Sites at Campaign” for one campaign, or “Block/Unblock Sites at Account” for every campaign, with “Get Campaign Block List” and “Get Account Block List” to read the lists back. Each entry needs the site id and its domain name. MediaGo’s public documentation covers these API calls, not the dashboard screens.
Yes. The Sites Block Management API takes up to 100 sites per call (op=0 to block, op=1 to unblock) and returns an error above that, so longer lists go in batches. The calls are also rate-limited: MediaGo lists a QPS limit of 60.
${SITE_ID} is the highest-leverage token: it maps to the publisher site behind each click and is the same dimension MediaGo’s block list acts on. ${TRACKING_ID} is the tracking id MediaGo provides on each click and expects back on a server-to-server conversion postback, so it ties a judged visit back to a MediaGo click record. ${CAMPAIGN_ID} and ${ASSET_ID} show whether a weak pattern is site-wide or specific to one creative served there, which decides between blocking the site and replacing the creative.
In the Tracking field at the bottom of the Create Ad Set page. MediaGo’s notes: the tracking code cannot include ?, @, #, /, a space or a line break, and two macros used together need a separator, for example ${AD_ID}_${AD_TITLE}.
Its campaign API lists location (country, plus states or zip codes in the US), language, platform (Desktop, Mobile, Tablet, Xbox), operating system, browser and audience category such as News, Sports or Finance, each as an include or exclude list. It documents no IP exclusion; the site is the unit you block.
Weighing a blocker for native traffic? How ValidVisit compares to Opticks, PureGuard and Adscore.
See which publishers and placements send real buyers vs bots — every visit judged Valid or Invalid, worst first.
Join the waitlist with just your email · 7-day trial at launch
One script · no cookies · no device IDs · raw IP never stored