How Native Ad Tracking Works: The Full Flow
Native ads follow a longer attribution chain than most paid channels, and each step introduces a place where data can break or go missing. Understanding the full flow before you touch any settings is what separates clean data from a reporting mess.
Here is the complete path from impression to attributed conversion. A user sees your native widget on a publisher site, perhaps in a “recommended content” block at the bottom of an article. They click the widget. That click request hits your tracker first, carrying every token the native network appended to the URL. The tracker logs the click, generates a unique click ID, and applies any traffic distribution rules you have configured, such as routing different geos to different landers.
The tracker then redirects the user to your landing page, appending the click ID. The user reads the page and clicks the call to action, landing on the offer. When they convert, the offer network fires a postback URL back to your tracker containing the click ID. The tracker matches that ID to the original click record, and the conversion is attributed to the exact native placement, widget, publisher site, and cost per click that drove it.
Every stage relies on the previous one. If the tokens are not passed from the native network in step one, nothing downstream can recover that data. Getting this right at the source is the whole game.
Setting Up Your Tracker for Native Campaigns
In ClickPattern, Voluum, or ClickFlare, the starting point is creating a traffic source for each native network. A traffic source is a template that tells your tracker how to interpret the parameters arriving with each click. Most trackers ship with pre-built templates for Taboola and Outbrain. For MGID and Revcontent you may need to create or modify a template manually.
The template maps each native network token to a named sub-ID slot in your tracker. Once saved, every click from that network automatically populates those slots, and you can group and filter your reports by any of them. Without the template, clicks arrive as anonymous hits with no placement data attached.
After creating the traffic source, you generate a tracking URL from your tracker and paste it into the native network as your campaign destination. For a Taboola campaign, the tracking URL looks like this:
https://track.yourdomain.com/click?ts=taboola&site={site}&widget={widget_id}&campaign={campaign_id}&cost={cpc}Taboola replaces each token dynamically at click time, so by the time the request reaches your tracker, the URL carries the actual site domain, widget ID, campaign ID, and the CPC you paid for that click. Your tracker reads those values, stores them against the click record, and you have placement-level data from the first click.
For full control over campaign structure across multiple traffic sources and offers, see how campaign management works inside ClickPattern.
Sub IDs and Tokens: Getting Placement-Level Data
Every native network uses its own token syntax, and the names are not interchangeable. Mapping the wrong token is one of the most common setup mistakes, and it results in sub-ID columns that are either empty or contain literal placeholder text like {widget_id} instead of the actual value.
Here are the core tokens for the four main native networks:
Taboola uses curly-brace tokens: {site} for the publisher domain, {widget_id} for the specific widget placement on that site, {campaign_id} for your campaign, and {cpc} for the cost per click.
Outbrain uses double curly braces: {{publisher_id}}, {{section_id}} for the content section, {{ad_id}} for the specific promoted link, and ${CPC} for cost. Note the dollar-sign syntax on the CPC token, which differs from every other token in the set.
MGID uses: {teaser_id} for the individual ad creative, {widget_id} for the placement widget, {domain} for the publisher domain, and {price} for the CPC.
Revcontent uses: {boost_id} for the ad unit, {widget_id} for the widget, {domain} for the publisher domain, and {pub_id} for the publisher ID.
In your tracker reports, once these tokens are mapped correctly, you can group by any sub-ID. Grouping by widget_id gives you ROI per widget placement. Grouping by site or domain gives you publisher-level data. This is the granularity that makes direct vs redirect tracking decisions matter: you need every click logged with full context.
Cost Tracking on Native Networks
Native networks are mostly CPC, so cost tracking is simpler than on CPM channels. The standard method is passing the CPC token in your tracking URL, as shown in the Taboola example above. Your tracker multiplies the CPC by the number of clicks to calculate spend, and you can see cost, revenue, and profit in the same report.
The limitation of token-based cost tracking is that it reflects the CPC at click time. If your bids fluctuate due to automated bidding rules or the network adjusting your smart bid, the token value may not always match your actual invoice. For campaigns where spend accuracy matters, some trackers including ClickPattern support API-based cost sync, which pulls actual spend figures directly from the network and reconciles them against your click data.
For most campaigns at scale, use token-based tracking to get started and layer in API cost sync once you are spending enough for the reconciliation to be worth the setup time. The cost token method is accurate enough for optimisation decisions at the placement level. For a full breakdown of how cost tokens and API sync work across all traffic sources, see our guide on real-time ad spend tracking.
Optimising by Widget, Publisher, and Section
Widget-level data is what makes native traceable. Without it, you are running blind at the site level at best. A single publisher domain can contain dozens of widget placements across different pages and positions, and their performance varies significantly.
The standard optimisation workflow is straightforward. Run the campaign until you have enough data per placement to make a statistically reasonable decision. A common threshold is three times your target CPA per placement. At that point, any placement that has not produced a conversion at or below your target is a candidate to pause.
Build a blacklist of underperforming widgets and a whitelist of proven ones. Native networks allow you to target specific site IDs and widget IDs directly, or block them at the campaign level. As your whitelist grows, increase budget toward campaigns targeting only those placements. For a detailed breakdown of this process, see the guide on placement optimisation.
Publisher-level data adds another layer. Some publishers consistently deliver low-quality traffic across all their widgets. Blocking at the publisher level rather than the widget level saves time when an entire domain is producing bad traffic. Grouping your tracker reports by the site or domain sub-ID makes this pattern visible within days of launch.
Common Mistakes When Tracking Native Campaigns
Not passing the widget ID token. This is the most damaging omission. Without widget_id in your tracking URL, you get site-level data only. You can see that a publisher domain is unprofitable, but you cannot identify which specific placements are dragging down performance and which are actually working. You end up blocking entire domains instead of surgical widget-level cuts, which wastes reach.
Mixing up token syntax between networks. Taboola uses {widget_id}, Outbrain uses {{section_id}}. If you copy a Taboola tracking URL template into an Outbrain campaign, the tokens will not resolve and every click will arrive with literal placeholder strings in your sub-ID columns. Always verify token syntax against the network's official documentation before launching.
Using redirect tracking when direct tracking is available. Some native networks flag campaigns with double redirects during their review process, which can delay approval or limit distribution. Where your tracker supports direct tracking via a pixel or script on the landing page, that is the preferred setup for native. It removes the redirect step entirely and makes the click path cleaner.
Ignoring content-to-offer match at the placement level. A widget placement on a finance news site and a widget placement on a health blog can have identical CPCs and click volumes, but completely different conversion rates for the same offer. Native traffic is contextual. Grouping reports by publisher category alongside widget ID reveals these patterns, but only if you are tracking at the right granularity from the start.
Conclusion
Native advertising is one of the few paid channels where the difference between a profitable campaign and a losing one often comes down entirely to tracking setup. The token mapping, the widget ID in your URL, the cost sync method: these are not optional details. They are the foundation of every optimisation decision you make.
Get the tracker template right for each network before you spend a dollar. Map every token. Verify that sub-ID columns are populating with real values on the first test click. Then run to significance at the placement level and let the data drive your whitelist. That workflow compounds over time in a way that bidding changes alone cannot replicate.
If you want to see how ClickPattern handles native traffic source templates, cost tracking, and placement-level reporting in one place, book a demo and we will walk through a live setup.
Ready to fix your tracking?
See how ClickPattern gives you accurate, server-side conversion data across every campaign.
Book a demoWritten by
Saud
Co-Founder, ClickPattern
Saud is the co-founder of ClickPattern. He writes about performance marketing, ad tracking, and building data infrastructure that actually works at scale.
