How to track native and push ad campaigns: a network-by-network setup guide

12 min readUpdated Oct 19, 2026

How to track native and push ad campaigns: a network-by-network setup guide

Native ads tracking breaks the moment you rely on the network's dashboard to tell you what's working. Taboola, MGID, RichAds and PropellerAds all report clicks, spend and sometimes conversions — but they can't see your affiliate payout, your funnel's drop-off, or the fact that one widget on one publisher is eating 40% of a campaign's budget while producing nothing. The fix is the same on every network: pass each network's placement and creative tokens into your own sub-IDs, fire a postback when a conversion happens, and read per-placement performance in a tracker you control. This guide walks through that setup network by network, with the exact token mapping, postback structure and cut rules for each.

What does native ads tracking actually require?

Four things, in this order. Miss any one and your optimisation data is either incomplete or wrong.

  1. A click URL with dynamic tokens. Your tracker link must accept the network's macros (placement ID, creative ID, site ID, zone ID) so every click arrives tagged with where it came from.
  2. Sub-ID storage. The tracker writes those token values into sub1–sub5 against the click, so the conversion inherits the same labels.
  3. A postback back to the network. When your affiliate network or offer source fires a conversion into the tracker, the tracker forwards it to the ad network via that network's S2S postback URL — this is what lets the network's algorithm learn, and what keeps your reported conversions aligned.
  4. Per-placement reporting. A view that groups clicks, conversions, cost and revenue by the token values you passed, so you can blacklist a zone or widget without exporting CSVs.

In Adtraxo, sub-ID passing and postback conversion tracking are Pro features. On the Free plan you get click tracking, link management and 5,000 clicks/month — enough to validate a funnel, but not enough to close the loop on conversions. Budget for Pro ($27/mo) before you scale anything, because optimisation without postbacks is guesswork.

How do you map ad network tokens to sub-IDs?

Every network exposes macros in curly braces or square brackets. You paste them into your tracker URL in fixed slots. The slot assignment doesn't matter as long as you're consistent — but a standard layout saves you from re-learning your own data every month.

A layout that works across all four networks:

  • sub1 — placement identifier (Taboola campaign/site, MGID widget, PropellerAds zone, RichAds creative)
  • sub2 — creative identifier (teaser or creative ID)
  • sub3 — publisher or site domain (native networks only)
  • sub4 — device or OS token, where the network exposes it
  • sub5 — a static campaign label you control, useful for cross-network comparisons

If you're new to macros, the mechanics are covered in detail in Ad network tracking macros explained: what tokens are and how to map them to sub-IDs. The short version: whatever the network substitutes into the macro at click time is what your tracker stores. If the macro is wrong or the token isn't supported, you get a literal string like {zone_id} in your report — a dead giveaway that something's misconfigured.

Taboola: track campaign, site and creative separately

Taboola is the most reporting-rich of the four, and the most expensive to run blind. Its click URL supports macros for campaign, campaign item (creative), site and site ID. The mistake most affiliates make is passing only the campaign ID — which tells you nothing about which publisher placement delivered the conversion.

Taboola click URL construction

Your tracker link, with Taboola macros appended:

https://yourdomain.com/click?campaign=tab_native_01
  &sub1={campaign_id}_{site_id}
  &sub2={campaign_item_id}
  &sub3={site}
  &sub4={platform}
  &sub5=taboola_us_desktop

Concatenating campaign and site into sub1 gives you a single sortable column that answers "which site, in which campaign." If you'd rather keep them separate, put the site in sub3 and sort on that — but then you lose the campaign context when the same site appears in multiple campaigns.

Taboola postback

Taboola accepts a server-to-server conversion postback with the click ID you captured. You set this up in the campaign's conversion tracking section, pasting your tracker's postback template with Taboola's click macro in the click-ID slot. In Adtraxo, you create a postback URL per traffic source under the campaign's integration settings; the tracker substitutes the stored click ID automatically when a conversion fires.

Two things to verify before you spend: that Taboola's click ID is actually being stored against the click (check a test conversion in the tracker's log), and that the postback returns a 200. A silent 403 from a misconfigured postback looks identical to "no conversions" in the network dashboard.

Full walkthrough, including the exact postback template and common failure modes: Taboola conversion tracking for affiliates: sending sales back with a postback.

Reading Taboola data to cut placements

Once sub1 carries site IDs, your tracker's per-sub-ID report becomes a blacklist generator. The rule that works: don't judge a site on fewer than a threshold number of clicks — set it at roughly the number of clicks your average conversion requires. If you convert at 1 in 200 clicks, a site with 40 clicks and zero conversions is noise, not a loser. A site with 400 clicks and zero conversions is a cut.

Native placements also decay. A site that converted last month can turn toxic after a creative refresh on the publisher side. Review the site-level report weekly, not once. The detailed method — including how to separate a bad site from a bad creative on a good site — is in How to find and block the Taboola publisher sites that waste your budget.

MGID: widget and teaser IDs are the whole game

MGID's inventory is organised around widgets — the recommendation blocks embedded on publisher sites — and teasers, which are your creatives. Widget ID is your equivalent of a placement; teaser ID is your creative. If you track only at campaign level, you're flying blind on both axes at once.

MGID click URL construction

https://yourdomain.com/click?campaign=mgid_native_01
  &sub1={widget_id}
  &sub2={teaser_id}
  &sub3={site_id}
  &sub4={device}
  &sub5=mgid_tier1

MGID's macro names have shifted over the years, so confirm the current token list in the network's help centre before you launch — a wrong macro name produces a literal placeholder in your report rather than an error, which is easy to miss on a small test.

MGID postback

MGID supports S2S postbacks with a click ID parameter. The setup mirrors Taboola: capture MGID's click macro in your tracker, then point MGID's postback URL at your tracker's conversion endpoint with the same click ID slot. The step-by-step, including where the click ID lives in MGID's interface, is in MGID tracking setup: passing widget and teaser IDs into your tracker.

Cutting widgets, not just campaigns

Widget-level data is where MGID gets interesting. The same teaser can convert on one widget and bleed on another, because widget context changes intent. Sort your sub1 report by spend and look for widgets with high click volume and zero conversions across multiple teasers — those are structural losers, not creative problems. Widgets that convert on one teaser but not another are a creative signal; don't blacklist those, rotate the creative instead.

When to cut and when to wait is covered in MGID widget blacklist: how to decide which widgets to cut and when.

RichAds: push campaigns live and die on creative IDs

Push traffic on RichAds behaves differently from native. There's no publisher site context in the same way — you're buying impressions in a notification feed, and the creative (the notification image and copy) is the dominant variable. That makes creative ID your most important sub-ID, not placement.

RichAds click URL construction

https://yourdomain.com/click?campaign=richads_push_01
  &sub1={creative_id}
  &sub2={zone_id}
  &sub3={country}
  &sub4={device_type}
  &sub5=richads_push_android

Note the inversion versus native: creative first, zone second. On push, you'll typically have more zones than creatives early on, and you want the creative comparison to be the primary sort.

RichAds postback

RichAds accepts a postback URL with its click ID macro. Configure it once per campaign in the network's conversion settings, pointing at your tracker's postback endpoint. Because push campaigns often run at low CPC and high volume, postback latency matters — if conversions arrive hours late, the network's optimiser learns from stale data. Test the round trip with a real conversion before scaling budget.

The full configuration, including creative ID token names and postback testing: RichAds tracking setup: postbacks and creative IDs for push campaigns.

Comparing creatives by conversions, not clicks

The classic push mistake is killing the creative with the lowest CTR. CTR tells you the notification was clickable, not that the traffic converted. Sort by conversions per creative at a fixed spend, and require a minimum click volume before you judge — the same threshold logic as native. A creative with a 0.4% CTR and three conversions beats one with a 1.2% CTR and zero, every time.

Method and thresholds: Push ad creative testing: how to compare creatives by conversions, not clicks.

PropellerAds: zone IDs and the blacklist workflow

PropellerAds gives you zone-level targeting, which is both its strength and its trap. Zones are numerous, quality varies wildly, and the only reliable signal is your own conversion data per zone. If you're not passing zone ID into a sub-ID, you're paying for the network's average and hoping.

PropellerAds click URL construction

https://yourdomain.com/click?campaign=prop_push_01
  &sub1={zone_id}
  &sub2={creative_id}
  &sub3={country}
  &sub4={browser}
  &sub5=propeller_onclick

PropellerAds exposes macros for zone, creative, country, browser and more depending on the campaign format (onclick, in-page push, interstitial). Confirm which macros your format supports — onclick and classic push don't expose identical token sets.

PropellerAds postback

Set the postback URL in the campaign's conversion tracking section with the network's click ID macro in the click-ID slot. PropellerAds also has its own conversion API; if you're running at volume, the S2S postback is the simpler path and the one Adtraxo's postback URL feature is built for.

The zone blacklist loop

This is the workflow that separates profitable PropellerAds accounts from break-even ones:

  1. Launch with zone targeting open and sub1 carrying zone ID.
  2. Let the campaign accumulate enough clicks per zone to be statistically meaningful — use your average clicks-per-conversion as the floor.
  3. Export or filter your tracker's sub1 report: zones with zero conversions above the click threshold get blacklisted.
  4. Upload the blacklist to PropellerAds, keep the winners, and repeat weekly.

Blacklisting is continuous, not one-and-done. New zones enter the pool as the network expands, and old zones change hands. The full loop, including how to avoid blacklisting zones that are just under-sampled, is in How to build a PropellerAds zone blacklist from your own tracker data.

How do you send conversions back by postback on any network?

The mechanism is identical across all four networks; only the click ID macro name changes. The sequence:

  1. Capture. When a click lands on your tracker, store the network's click ID (passed as a parameter in your tracker URL) against that click record.
  2. Receive. When your offer or affiliate network fires a conversion, it hits your tracker's conversion endpoint with its own click ID or a unique parameter you passed through.
  3. Forward. Your tracker looks up the stored network click ID and fires a GET request to the ad network's postback URL with that ID substituted in.
  4. Verify. Check the postback log for a 200 response. A 200 with the network still showing zero conversions usually means the click ID macro was wrong, not that the request failed.

In Adtraxo, you configure the postback URL per traffic source and the tracker handles the substitution and retry. The postback log shows each fire, the response code and the click ID used — which is the fastest way to diagnose the "network shows no conversions" problem.

Why do your tracker and the network show different click counts?

They always will, and the gap is diagnostic rather than alarming. Common causes: bot and crawler traffic that your tracker's fraud detection filters but the network bills for; redirect losses from slow landing pages; ad blockers dropping the tracker request; and timezone or attribution-window differences. A small consistent gap is normal. A gap that widens suddenly usually means a redirect problem or a new bot source.

How to read the discrepancy and when to worry: Why your ad network and your tracker show different click counts.

This is also where Adtraxo's fraud detection earns its keep on Pro. IP velocity checks, datacenter IP flags, bot user-agent matching and uniqueness conflicts surface the traffic that's inflating the network's click count but never converting. On native and push especially, that filtered traffic is the difference between a blacklist built on real signals and one built on noise.

What's the minimum viable tracking stack for native and push?

If you're starting from zero, this is the order to build in — each step depends on the one before:

  1. Custom tracking domain. Use a domain you own rather than a shared tracker subdomain. Some networks and browsers treat shared domains differently, and a custom domain keeps your links clean across campaigns.
  2. Token mapping per network. Write down your sub1–sub5 layout once and apply it everywhere. Inconsistency is the most common reason affiliates can't compare across networks.
  3. Postback per traffic source. One postback URL per network, each with the correct click ID macro. Test each with a real conversion before you scale.
  4. A reporting routine. Pick a day of the week and review sub1 (placement) and sub2 (creative) reports per campaign. Cut, rotate, repeat.
  5. Fraud filtering. Turn it on before you spend meaningfully. Bot traffic on push networks in particular will poison your placement data if it isn't filtered at the click level.

Adtraxo's Pro plan covers all five — custom domains, sub1–sub5, postback tracking, per-campaign geo/device breakdown and fraud detection — at $27/mo with unlimited links and clicks. The AI Campaign Optimizer agent can flag underperforming placements automatically, but the fundamentals above are what make its recommendations trustworthy. If you're still on Free, use

Track your affiliate campaigns for free

Clicks, conversions, fraud detection — all in one tracker.

Get started free →

Not ready for an account? Get the Tracking Domination Playbook — free, just your email.