> ## Documentation Index
> Fetch the complete documentation index at: /docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Taboola Conversion Tracking & Postback Setup

> Set up Taboola conversion tracking in ClickFlare: Taboola macros in the campaign URL, click ID capture, and an S2S postback that sends conversions and revenue.

![Taboola traffic source template](https://mintcdn.com/clickflare/nZP6EuFBEVoKPMxM/images/integrations/covers/templates/taboola.png?fit=max\&auto=format\&n=nZP6EuFBEVoKPMxM\&q=85\&s=a81d062c216430de53981ea6d59ccebf)

Taboola is a native advertising platform. It places your ads as sponsored recommendations on premium publisher sites and apps. Taboola's advertiser platform is called Realize. This guide sets up Taboola as a traffic source in ClickFlare. It covers passing Taboola's click data into your reports and sending conversions, with revenue, back to Taboola so its bidding and your stats agree.

You do everything from the **campaign editor**. The Taboola traffic source is created inline, without leaving the campaign.

## At a glance

| | |
| - | - |
| **Ad formats** | Native ads (sponsored content recommendations) on publisher sites and apps |
| **Click ID macro** | `{click_id}`, mandatory for conversion tracking |
| **Conversion tracking** | S2S postback to `trc.taboola.com` |
| **Payout passed back** | Yes, in the `revenue` parameter, with the currency in `currency` |
| **Multiple events** | Yes, one postback per Taboola event |
| **Cost** | Not passed by the template. Use the Taboola cost integration, or set a cost model. |
| **Conversion API** | No |

## How it works

**1. Taboola sends the click**

A visitor clicks your ad. Taboola opens your ClickFlare campaign URL and fills in its macros: the click ID in `click_id`, plus the publisher site, campaign, item, platform and other details.

**2. ClickFlare stores the Taboola click ID**

ClickFlare saves the value of `click_id` as the visit's **External ID** and redirects the visitor to your lander or offer.

**3. The conversion reaches ClickFlare**

Your affiliate network, store or feed posts the conversion back to ClickFlare, matched on the ClickFlare click ID.

**4. ClickFlare posts it back to Taboola**

ClickFlare fires the Taboola postback, replacing `{external_id}` with the stored Taboola click ID, `{payout}` with the revenue and `{payout_currency}` with its currency. Taboola matches it to the original click and records it under the event name you set.

> [!NOTE]
>
> The mirror to keep straight: in the **campaign URL** you write *ClickFlare's* parameter (`click_id`) and *Taboola's* macro (`{click_id}`). The template does this for you. In the **postback URL** you write *Taboola's* parameter (`click-id`, with a hyphen) and *ClickFlare's* token (`{external_id}`).

## Before you start

* **Set up your own tracking domain.** Run the campaign and the postback on your own custom domain. Shared domains get flagged by networks and blocked by browsers. See [Custom Domains](/docs/en/settings/custom-domains.md).
* **Have an offer ready in ClickFlare**, and its affiliate network set up to post conversions back to ClickFlare. See [Creating an Offer](/docs/en/tracking/creating-an-offer-1.md) and [Adding an Affiliate Network](/docs/en/tracking/adding-an-affiliate-network.md).
* **Create the conversion event in Taboola first.** You need its exact **Event Name** for the postback. See [Create the event in Taboola](#create-the-event-in-taboola).
* **Decide which conversions Taboola should receive.** Taboola optimizes on what you send it. If your funnel has several steps (lead, then purchase, or an ad click on an arbitrage page), decide now whether to send one event or several. See [Tracking several events](#tracking-several-events).

***

## Step 1 – Create the campaign and the Taboola traffic source

1. Go to **Campaigns** and click **New**.
2. In **Traffic Source**, open the dropdown and click **+ New Traffic Source**.
3. Type `taboola` in the search box and select the **Taboola** template.
4. Enter a **Name**, for example `Taboola`.
5. Leave **Cost currency** on **USD** unless your Taboola account is billed in another currency.

The template fills in the **Parameters** table for you:

| Name | TS Parameter | TS Token (Taboola macro) | ClickFlare Token | What it carries |
| - | - | - | - | - |
| cost | *empty* | *empty* | `{cost}` | Not filled in. See [Cost](#cost). |
| externalId | `click_id` | `{click_id}` | `{external_id}` | Taboola's click ID. Required for the postback. |
| site | `site` | `{site}` | `{trackingField1}` | The publisher site or app name |
| site\_id | `site_id` | `{site_id}` | `{trackingField2}` | The unique ID of the publisher site or app |
| title | `title` | `{title}` | `{trackingField3}` | The headline of the ad |
| platform | `platform` | `{platform}` | `{trackingField4}` | The visitor's platform: Desktop, Mobile or Tablet |
| campaign\_id | `campaign_id` | `{campaign_id}` | `{trackingField5}` | The Taboola campaign ID |
| campaign\_item\_id | `campaign_item_id` | `{campaign_item_id}` | `{trackingField6}` | The Taboola item (ad) ID |
| thumbnail | `thumbnail` | `{thumbnail}` | `{trackingField7}` | The URL of the ad's image or video |
| campaign\_name | `camp_name` | `{campaign_name}` | `{trackingField8}` | The Taboola campaign name. Note the parameter is `camp_name`. |
| creative\_name | `creative_name` | `{creative_name}` | `{trackingField9}` | The custom creative name, if you set one in Taboola. Empty otherwise. |

![The Taboola template's Parameters table in ClickFlare, with Taboola's macros pre-filled](https://mintcdn.com/clickflare/nZP6EuFBEVoKPMxM/images/integrations/templates/taboola/parameters.png?fit=max\&auto=format\&n=nZP6EuFBEVoKPMxM\&q=85\&s=dda52ca20d1e7ab4f4b78894ba4e6bca)

You don't need to change these tokens unless you have a custom requirement. Each tracking field becomes a column you can group reports by. `site` and `site_id` are the ones you will use most: they tell you which publishers convert, so you can block or bid up sites in Taboola. `campaign_item_id`, `title` and `thumbnail` tell you which creative won.

> [!WARNING]
>
> Don't change or remove the `externalId` row. Without `{click_id}` in the campaign URL, ClickFlare has no Taboola click ID to send back, and Taboola cannot attribute any conversion.

To pass more Taboola data, click **Add Parameter**, give it a name and parameter, and enter the Taboola macro as the **TS Token**. ClickFlare assigns the next free tracking field. Taboola also offers `{site_domain}`, `{campaign_group_id}`, `{custom_id}` and `{timestamp}`. Check Taboola's macro list before adding others.

## Step 2 – Set up the postback

The postback is what sends conversions to Taboola. It lives on the traffic source, so every campaign that uses this Taboola traffic source sends conversions the same way.

### Create the event in Taboola

1. In Realize, select your account at the top left and click **Tracking** in the sidebar.
2. Click **+ New Conversion**.
3. Choose **Create conversions using code** and click **Continue**.
4. Enter a **Conversion Name**. It is for your reference only.
5. Set **Conversion Type** to **EVENT**.
6. Leave **Fixed Value** empty. ClickFlare sends the real revenue with each conversion.
7. Choose the **Category** that fits the action, for example **Complete Registration**.
8. Note the **Event Name**, or edit it, for example `make_purchase`. This is the value the postback must send.
9. Keep **Include in total conversions** ticked for the event Taboola should optimize on.
10. Skip the event code section. You don't need it for S2S. Click **Create**.

> [!NOTE]
>
> Taboola's Event Name should contain only alphanumeric characters, underscores, or dashes, without spaces. It is case-sensitive. The postback must use the **Event Name**, not the Conversion Name.

![Taboola's Event Name should contain only alphanumeric characters, underscores, or dashes, without spaces](https://mintcdn.com/clickflare/KMcStLNr08QQtIjN/images/help-center/05-integrations/06-traffic-source-templates/01-taboola-as-a-traffic-source-05.jpg?fit=max\&auto=format\&n=KMcStLNr08QQtIjN\&q=85\&s=07a40508094ecb6dc925da429bc80d04)

### Add the postback to the traffic source in ClickFlare

1. Back in the **New Traffic Source** form, scroll to **Passing conversion info to traffic source**.
2. Turn on **Traffic source postback URL**. The template's postback appears:

```text theme={null}
https://trc.taboola.com/actions-handler/log/3/s2s-action?click-id={external_id}&name=REPLACE_EVENT_NAME&revenue={payout}&currency={payout_currency}
```

3. In the dropdown on the left, choose the ClickFlare event that should fire the postback. Keep **Conversions** to send every conversion. If your final action is a custom conversion, such as an **Ad Click** or a `purchase`, choose that custom event instead.
4. Replace `REPLACE_EVENT_NAME` in the `&name=` parameter with the exact Event Name from Taboola. With the event above, the result is:

```text theme={null}
https://trc.taboola.com/actions-handler/log/3/s2s-action?click-id={external_id}&name=make_purchase&revenue={payout}&currency={payout_currency}
```

5. Click **Save**. You are back in the campaign editor with the Taboola traffic source selected.

![The Traffic source postback URL switched on, showing the Taboola template's postback](https://mintcdn.com/clickflare/nZP6EuFBEVoKPMxM/images/integrations/templates/taboola/postback.png?fit=max\&auto=format\&n=nZP6EuFBEVoKPMxM\&q=85\&s=e7e0f6fd4c1d13806fced953bc234ccb)

You don't build the rest of the URL yourself. Everything else in the template is already correct: `click-id` must be spelled exactly that way, with a hyphen, or Taboola records nothing.

> [!WARNING]
>
> If you leave `REPLACE_EVENT_NAME` in the URL, Taboola receives an event it doesn't know and drops the conversion. The same happens if the name differs from Taboola's Event Name by a single character or letter case.

**Currency.** `{payout_currency}` sends the currency of each conversion's payout, so Taboola converts it correctly. If every offer pays in the same currency, you can hardcode it instead, for example `&currency=USD`. Taboola expects a 3-letter code in capitals. If the parameter is missing, Taboola uses the account's default currency. See [Multicurrency in ClickFlare](/docs/en/tracking/multicurrency-support-in-click-flare-how-it-works.md).

Taboola also accepts optional `orderid` and `quantity` parameters. The template doesn't send them.

To learn what each postback token does, see [How to Configure a Traffic Source S2S Postback URL](/docs/en/tracking/how-to-configure-a-traffic-source-s2s-postback-url.md).

## Step 3 – Finish the campaign and copy its URL

1. Name the campaign.
2. Set the **Cost Model**. See [Cost](#cost).
3. Choose **Redirect** or **Direct** tracking. Redirect is the usual choice.
4. Click **Next** and, on **Destination**, add your lander (optional) and your offer.
5. Save, open **Tracking**, select your own tracking domain and copy the **campaign URL**.

The campaign URL already contains every Taboola macro from the template, for example `click_id={click_id}` and `site={site}`.

If you use a lander, its call-to-action must link to the ClickFlare **click URL**, not to the offer directly. Otherwise the visit reaches the offer without a ClickFlare click ID, and the conversion cannot be traced back to Taboola.

See [Creating a Campaign in ClickFlare](/docs/en/campaigns/creating-a-campaign-in-click-flare.md).

## Step 4 – Create the campaign in Taboola

1. In Realize, create a campaign. Choose the bidding, budget and targeting as usual.
2. Add the ClickFlare tracking to the campaign or to each ad (see below).
3. Submit the campaign for review.

Taboola accepts tracking parameters in two places:

| Where | What to enter | Note |
| - | - | - |
| Each ad's URL field | The full ClickFlare campaign URL | Editing it later sends the ad back to policy review. |
| The campaign's **Tracking Code** section | Everything after the `?` of the campaign URL, without the `?`. The ad URL then holds only the part before the `?`. | Applies to every ad in the campaign. Editing it doesn't trigger review. |

Use one place or the other, not both. Duplicate parameters corrupt your data. New Taboola campaigns start with `utm_source=taboola&utm_medium=referral` in the Tracking Code. You can keep it, but don't let it duplicate a ClickFlare parameter.

Paste the parameters exactly as ClickFlare gives them. Taboola replaces each macro in curly braces when the ad is clicked.

Taboola also appends its own `tblci` parameter with the click ID to every ad URL. ClickFlare doesn't use it. It reads the click ID from `click_id`, so keep that parameter in place.

## Step 5 – Test the integration

1. Click your ad, or wait for the first live clicks, and complete the offer the way a real visitor would.
2. In ClickFlare, check the visit. The **External ID** should hold a long Taboola click ID, not the literal text `{click_id}`.
3. Go to **Logs → Postback Status** and filter by the campaign. A successful request to `trc.taboola.com` confirms ClickFlare sent the postback.
4. In Realize, go to **Tracking**, open the **Conversions** tab and find your event. Check **Status**, **Last received** and **Events received**. Allow up to an hour.

| Status in Taboola | Meaning |
| - | - |
| **No Activity Yet** | Taboola has not received this event. Check the event name in the postback. |
| **Active** | Taboola received the event in the last 7 days. The integration works. |
| **No Recent Activity** | The event worked before but nothing arrived in the last 7 days. |

***

## Tracking several events

ClickFlare can send multiple conversions to multiple events, each with its own postback URL. This is useful when you want to report different conversion types, such as Lead, Purchase or Ad Click, to Taboola separately.

1. In Taboola, create one conversion per step, each with its own Event Name, for example `lead` and `make_purchase`.
2. In ClickFlare, create a [custom conversion](/docs/en/settings/custom-conversions.md) for each step.
3. On the Taboola traffic source, with **Traffic source postback URL** on, click **+ Another postback URL** once per extra event.
4. Assign a different ClickFlare event to each postback and a different Taboola event name to each `&name=`:

```text theme={null}
https://trc.taboola.com/actions-handler/log/3/s2s-action?click-id={external_id}&name=lead&revenue={payout}&currency={payout_currency}
https://trc.taboola.com/actions-handler/log/3/s2s-action?click-id={external_id}&name=make_purchase&revenue={payout}&currency={payout_currency}
```

5. Test each event. Each Taboola conversion shows its own status.

> **Which event should Taboola optimize on**
>
> In Taboola, keep **Include in total conversions** ticked only on the events that matter for bidding, usually the final sale. Earlier steps can still be sent for reporting with the option cleared.

> **Sending only one event**
>
> If Taboola should only learn from your final sale, keep a single postback and map it to that event. Earlier steps (leads, add to carts) still show in ClickFlare. They just don't reach Taboola.
>
> To send a postback only for some conversions, for example only those above a certain payout, use **Event filter** under the postback to add conditions.

## Cost

The template's Cost row is empty, so the campaign URL doesn't carry Taboola's cost per click. Taboola does have a `{cpc}` macro, but its value is encrypted and needs a decryption script, so ClickFlare can't read it directly.

The best option is ClickFlare's **Taboola cost integration**. It pulls actual spend from Taboola's API at campaign, content and publisher level. You need a Taboola Client ID and Client Secret, which you request from your Taboola account manager. Once the integration exists, select it under **Cost Integration** on the Taboola traffic source, and set the campaign's **Cost Model** to **Not Tracked** so ClickFlare uses the spend it pulls. Set the integration's timezone to match your Taboola account. See [Taboola Cost Integration](/docs/en/integrations/taboola.md).

Until then, set the **Cost Model** on the campaign to **CPC** and enter your bid. ClickFlare then estimates cost per visit, and your ROI is only as accurate as that bid. Correct past days with a [manual cost upload](/docs/en/settings/manual-cost-upload.md). See [Cost Models](/docs/en/core-platform-concepts/cost-models.md) and [Traffic Source Cost Tracking](/docs/en/tracking/how-to-setup-traffic-source-cost-tracking.md).

## Delayed revenue

If you work with feed providers like RSOC or AFD that report revenue after the initial conversion, you can send that revenue to Taboola once it arrives. This needs a separate delayed revenue postback, using a custom conversion mapped to the right event. See [Sending Delayed Revenue to Traffic Sources](/docs/en/advanced-tracking-configuration/how-to-send-delayed-revenue-to-traffic-sources.md).

***

## Troubleshooting

> **Taboola shows No Activity Yet**
>
> * `REPLACE_EVENT_NAME` is still in the postback, or the name doesn't match Taboola's **Event Name** exactly, including letter case.
> * The postback uses the Conversion Name instead of the Event Name.
> * The parameter was changed from `click-id` to `click_id`. The postback needs the hyphen.
> * Check **Logs → Postback Status**: a failed request shows the status code Taboola returned.

> **Conversions show in ClickFlare but not in Taboola**
>
> * **Traffic source postback URL** is off on the Taboola traffic source.
> * **Disable sending postbacks to traffic source** is on in the campaign.
> * The postback is mapped to a different event than the one the conversion logged. Check **Logs → Event Logs** to see which event was recorded.
> * The External ID is empty or truncated. Taboola ignores a click ID that was cut short or altered. Check that `click_id={click_id}` reaches ClickFlare unchanged.

> **Revenue in Taboola is wrong**
>
> * `&revenue={payout}` was removed from the postback.
> * The currency is missing or not a capital 3-letter code, so Taboola applied the account's default currency.

> **Site or campaign columns are empty**
>
> The macros were not replaced, usually because the parameters were added in both the Tracking Code and the ad URL, or were edited. Use one place only and paste the parameters from ClickFlare unchanged. See [Traffic Source Tokens Arriving Empty](/docs/en/troubleshooting/tokens-arriving-empty.md).

For the general checklist, see [Conversions not showing](/docs/en/troubleshooting/conversions-not-showing.md).

***

**FREQUENTLY ASKED QUESTIONS**

> **Q1:** Do I need to manually build the postback URL for Taboola?

**A1:** No. When you turn on **Traffic source postback URL**, the template's postback is filled in. You only replace `REPLACE_EVENT_NAME` in `&name=` with the Event Name you set in Taboola, for example `make_purchase`.

> **Q2:** Can I track multiple types of conversions with Taboola?

**A2:** Yes. Add one postback per event with **+ Another postback URL**, map each to a different ClickFlare event, and give each a different Taboola event name. See [Tracking several events](#tracking-several-events).

> **Q3:** Can I use static values in the postback, like currency?

**A3:** Yes. Hardcode values that never change, for example `&currency=USD`, or use dynamic tokens such as `{payout_currency}` if you need flexibility.

> **Q4:** Can I use the same setup for delayed revenue tracking?

**A4:** Not as is. Revenue that arrives later from feed providers like RSOC or AFD needs a separate delayed revenue postback, using a custom conversion mapped to the appropriate event. See [Sending Delayed Revenue to Traffic Sources](/docs/en/advanced-tracking-configuration/how-to-send-delayed-revenue-to-traffic-sources.md).

> **Q5:** Taboola already adds `tblci` to my URLs. Why do I need `click_id`?

**A5:** `tblci` carries the same click ID, but ClickFlare reads it from the `click_id` parameter set in the template. Keep `click_id={click_id}` in the campaign URL. Taboola still expects the value back as `click-id` in the postback.

> **Q6:** Can I use the same Taboola traffic source for all my Taboola campaigns?

**A6:** Yes, as long as they report the same events. The postback is set once on the traffic source. Create a second Taboola traffic source only if a campaign needs different event names.

## Related

> **[Taboola cost integration](/docs/en/integrations/taboola.md)**
>
> Pull actual spend from Taboola's API.

> **[Traffic source postbacks](/docs/en/tracking/how-to-configure-a-traffic-source-s2s-postback-url.md)**
>
> Every token you can use in a postback.

> **[Custom conversions](/docs/en/settings/custom-conversions.md)**
>
> Split leads and sales into separate events.

> **[Delayed revenue](/docs/en/advanced-tracking-configuration/how-to-send-delayed-revenue-to-traffic-sources.md)**
>
> Send feed revenue to Taboola after the click.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.