Taboola Macros & Native Network URL Parameters: The Cheat Sheet
The join key between your ad spend and your conversions is a macro. Here is the full Taboola set, the Outbrain, MGID and Revcontent equivalents, and the template mistakes that quietly break tracking.

Taboola macros are dynamic tokens — {click_id}, {site}, {campaign_id} and about a dozen more — that Taboola replaces with real values at the moment someone clicks your ad. Appended to your landing-page URL, they tell your tracker exactly which click, publisher placement, campaign and creative produced every visit and every conversion. Without macros you are buying native traffic blind; with them you can compute cost per conversion at the placement level and cut what loses. This cheat sheet covers the working macro set on Taboola, the matching dynamic parameters on Outbrain, MGID and Revcontent, and the handful of template mistakes that quietly break tracking on all of them.
Why macros decide whether you can optimize at all#
Native networks bill you per click, but they attribute nothing for you. Every optimization decision you will make — pause this placement, raise this bid, kill this creative, scale this campaign — depends on joining the network's spend data to your conversion data. The join key is the macro.
The standard setup is server-to-server (S2S) tracking:
- Taboola replaces
{click_id}with a unique value when your ad is clicked. - Your tracker (or your own backend) stores that click ID against the session.
- When the visitor converts, you fire the network's postback URL with the stored click ID.
- The network attributes the conversion to the exact click — placement, creative, geo, device and all — and its bidding algorithm starts learning from real conversions instead of raw clicks.
Skip the macros and none of that chain exists. You will see sessions in analytics and spend in the dashboard, with no reliable way to connect them. Taboola also offers an on-page pixel, and it is worth running both — but the S2S postback keyed on {click_id} is the one that survives ad blockers, iOS privacy features and cross-device journeys, which is why experienced buyers treat it as the source of truth.
The Taboola macro cheat sheet#
Taboola macros use single curly braces, all lowercase. The working set most media buyers actually use:
| Macro | What it returns | What you use it for |
|---|---|---|
{click_id} |
Unique ID for this click | The S2S join key — non-negotiable |
{site} |
Publisher site code | Placement-level optimization and blocking |
{site_id} |
Numeric site ID | Same job, as a stable numeric key |
{site_domain} |
Publisher domain | Human-readable placement reporting |
{campaign_id} |
Campaign ID | Multi-campaign reporting |
{campaign_name} |
Campaign name | Readable reports (mind URL encoding) |
{campaign_item_id} |
The specific ad (creative) ID | Creative-level winner analysis |
{title} |
The ad headline | Headline-level analysis |
{thumbnail} |
Creative image URL | Joining image variants across ads |
{platform} |
Device platform | Desktop / mobile / tablet splits |
{timestamp} |
Click timestamp | Debugging and dayparting analysis |
A complete tracking URL looks like this:
https://track.yourdomain.com/click?clickid={click_id}&source={site_id}&camp={campaign_id}&ad={campaign_item_id}&device={platform}
Two practical notes. First, macros are case-sensitive — {Click_ID} passes through as literal text and your tracker receives a useless string. Second, Taboola adds and occasionally renames macros; the list above is the stable core, but verify against Taboola's help center before a large launch. If you are setting up a first campaign end to end, the step-by-step Taboola setup guide shows where the tracking fields live in the interface.
The same concepts on Outbrain, MGID and Revcontent#
Every native network implements the same four concepts — click, placement, campaign, creative — under different names and syntax. The mapping:
| Concept | Taboola | Outbrain | MGID | Revcontent |
|---|---|---|---|---|
| Syntax | {macro} |
{{macro}} |
{macro} |
{macro} |
| Click ID | {click_id} |
{{ob_click_id}} |
{click_id} |
see dashboard |
| Placement | {site} / {site_id} |
{{publisher_id}} / {{section_id}} |
{widget_id} |
{widget_id} |
| Placement name | {site_domain} |
{{publisher_name}} / {{section_name}} |
— | — |
| Campaign | {campaign_id} |
{{campaign_id}} |
{campaign_id} |
{boost_id} |
| Creative | {campaign_item_id} |
{{ad_id}} / {{ad_title}} |
{teaser_id} |
{content_id} |
Details worth knowing:
- Outbrain uses double curly braces, and its placement model is two-level: a publisher and a section — the specific widget position on that publisher. Optimize on section, not just publisher; the widget under the article and the one in the sidebar can perform completely differently on the same site.
- MGID calls creatives "teasers," hence
{teaser_id}. Its widget IDs are the unit you will be blacklisting daily. - Revcontent organizes campaigns as "boosts," so
{boost_id}is the campaign key. Its macro list has shifted over the years — pull the current set from your dashboard rather than from an old forum thread. - A dash in the table means the network handles that dimension at campaign-structure level, or the macro has changed too often to print. When in doubt, check the network's current documentation instead of guessing.
One tracking template that survives all four networks#
Normalize on your side, not theirs. Define canonical parameter names — say clickid, source, camp, ad — and map each network's macros into them:
Taboola: ?clickid={click_id}&source={site_id}&camp={campaign_id}&ad={campaign_item_id}
Outbrain: ?clickid={{ob_click_id}}&source={{section_id}}&camp={{campaign_id}}&ad={{ad_id}}
Your tracker, your reports and your kill rules then work identically everywhere, and adding a fifth network becomes a five-minute mapping exercise. Route clicks through a dedicated click-tracking domain so you can switch tracking software later without rebuilding every campaign.
Prefer IDs to names in the template. {campaign_name} and {title} contain spaces, ampersands and emoji that arrive URL-encoded — and one unencoded & inside a headline will silently truncate every parameter after it. IDs are stable; names get edited mid-flight and split one row of data into two.
Macros and UTM parameters: run both, for different jobs#
UTM tags feed your analytics; macros feed your buying decisions. A sensible dual template sets utm_source=taboola, utm_medium=native and fills the rest dynamically — utm_campaign={campaign_id}, utm_content={campaign_item_id}, utm_term={site_id} — so your analytics traffic reports line up with the tracker's placement reports. Just don't optimize from analytics alone: session counts and click counts diverge (redirects, bounces before the tag fires, blocked scripts), and the gap widens exactly where traffic quality is worst — the placements you most need to catch.
Five macro mistakes that quietly burn budget#
- Literal macros in the URL. A typo — wrong braces, wrong case, a stray space — means the token is never replaced and your landing page receives the literal text
{click_id}. Conversions stop joining, the campaign "shows" zero CVR, and you kill what may have been a winner. Inspect the query strings of your first ten sessions after every launch. - No placement macro. Without
{site}or{widget_id}in the template you cannot build placement whitelists and blacklists — and placement pruning is where most native optimization profit lives. The publisher and site ID is the atom of native media buying. - Postback without deduplication. If the same click ID can fire your postback twice — page refresh, retry logic, a user revisiting a thank-you page — you double-count conversions and scale losers. Dedupe on click ID at the tracker.
- Names instead of IDs. A mid-flight campaign rename splits your data; see above.
- Testing with real spend. Verify replacement with the network's preview tools and a minimum-budget canary campaign in a cheap geo, not with your launch budget.
Reading a competitor's macros#
Tracking templates leak. When an ad library traces a native ad's click path, the captured landing URL preserves the advertiser's parameter string — with the macros already filled in. Pull a competitor's ads in the Taboola ad spy tool and inspect the traced landing URLs: the tracker domain tells you what software they run, the subid structure tells you what granularity they optimize on, and a placement ID sitting in a subid tells you they are pruning placements — the signature of an operator worth studying. The full workflow from a live ad to its funnel is covered in how to find competitor landing pages.
The bottom line#
Macros are thirty minutes of setup that determine whether every subsequent hour of media buying is measurable. Get {click_id} and a placement macro into your template on day one, postback conversions server-to-server, prefer IDs over names, and verify replacement before you scale anything. Networks rename macros occasionally; the four concepts they encode — click, placement, campaign, creative — have not changed in a decade.




