Skip to content

Taboola

Taboola is a traffic source (native). Its own documentation: https://developers.taboola.com/backstage-api/.

  • Sends your conversions back to Taboola.
  • Pulls your spend from its API.
  • Blocks placements in a source campaign.
  • Pauses and resumes its campaigns and ads.
  • Sets bids on its campaigns and placements.
  • Counts impressions (fired by the ad’s own pixel in the browser).
  • Checks the connection with a harmless request when you test it.

Client credentials. Tallyray gets an access token with the client id and secret you set below, and gets a new one when it expires.

Conversions go without it: the postback carries no credentials, so a connection that lacks the API’s goes on sending conversions.

Set these on the connection:

FieldNameKindWhat to enter
Account idaccount_idstring, requiredYour Taboola account’s id, letters and dashes, such as acme-sc; Taboola gives it with the API’s credentials
Account currencycurrencystringYour account’s currency, such as USD, which the probe checks against Taboola’s
Account time zonetime_zonestringFor spend, your account’s time zone, such as America/New_York; Taboola reports by its days, and it can’t change once spend is reported
API client idclient_idstring, secretFrom your Taboola account manager, for spend, sites and pauses; conversions go without it
API client secretclient_secretstring, secret

A secret is set by the workspace’s owner alone and never shown again. A required secret that is missing holds the connection’s deliveries until it is set; one that is optional holds only what reads it.

Each token is a query parameter on the campaign URL; the source replaces its macro with the value when it sends the visitor. The columns say which part of the visit it fills and which report column (v1 to v20) it lands in.

ParameterMacroFillsReport column
click_id{click_id}The source’s click id
site{site}Placementv1 (Site)
cmp{campaign_id}Source campaignv2 (Campaign)
item{campaign_item_id}Creativev3 (Item)
domain{site_domain}Sitev4 (Site domain)
site_id{site_id}Custom valuev5 (Site id)
platform{platform}Custom valuev6 (Platform)

The campaign URL you paste into the source is the tracking domain, the campaign’s key and the tokens the source fills, in this order (the domain below is an example, and {url_key} stands for the campaign’s own key):

https://trk.example.com/{url_key}?click_id={click_id}&site={site}&cmp={campaign_id}&item={campaign_item_id}&domain={site_domain}&site_id={site_id}&platform={platform}

Cost models, the first the default: cpc (cost per click), cpm (cost per thousand visits), api (the spend pulled from the source’s API).

Campaign URL

https://trk.example.com/{url_key}?click_id={click_id}&site={site}&cmp={campaign_id}&item={campaign_item_id}&domain={site_domain}&site_id={site_id}&platform={platform}

Impression URL

https://trk.example.com/i/{url_key}?site={site}&cmp={campaign_id}&item={campaign_item_id}

Paste the campaign URL into the source's ad. {url_key} stands for the campaign's own key, which the portal fills in; the macros are the source's, which it replaces with each visit's values.

Tallyray sends a conversion to Taboola when it enters one of these statuses: approved. A conversion is sent once per status it enters; an adjustment, with revenue moving and its status not, isn’t sent. A conversion older than 30d isn’t sent.

Tallyray’s event kinds, and the name each is sent as. A conversion of a kind not listed isn’t sent:

Tallyray eventSent to Taboola as
leadlead
registrationregistration
salesale
depositdeposit
subscriptionsubscription

The request: GET https://trc.taboola.com/actions-handler/log/3/s2s-action.

A conversion is sent only when this holds:

=visit.external_click_id != ''

Conversions are retried when the source can’t be reached or answers with an error that can pass; see the limits below.

Tallyray pulls spend from the source’s API every 1h, covering the last 2d again, as sources restate spend, 1d at most per request, by day, in the zone =conn.time_zone != '' ? conn.time_zone : 'set the account time zone'. With api among the cost models, a campaign is priced by it.

The request: GET https://backstage.taboola.com/backstage/api/1.0/{…}/reports/campaign-summary/dimensions/campaign_site_day_breakdown.

Pulling spend needs the API’s credential. A connection without it goes on sending conversions and pulls no spend.

Placements are the visit’s placement value, as the tokens above fill it.

Blocking: PATCH https://backstage.taboola.com/backstage/api/1.0/{…}/campaigns/{…}. Mode append: Tallyray sends the placements to add. Lifting a block is sent too.

Rules and reports can pause and resume the source’s own objects at these levels. Tallyray reads an object before it writes, and writes only what isn’t so already, so a repeated pause never toggles anything.

LevelNamed by
campaignscmp
adscmp + item

Rules and reports can set the source’s bids at these levels. Each value is read before it’s written, in the account’s currency, never converted; a value the source sets itself isn’t written.

LevelNamed byPricesBoundsNotes
campaignscmpcpc, cpastep 0.001
placementscmp + sitefactormin 0.011, max 2, step 0.001can be reset to the inherited value

The source fires a URL when its ad shows. It’s fired by the ad’s own pixel in the browser, so Tallyray judges them by the visit’s bot signals. Tokens on it: site, cmp, item.

  • Rate: at most 1/s per connection, 1 at once.
  • Retries: up to 15 attempts, waiting from 30s and doubling up to 6h, longer when the source’s Retry-After asks, and never past the conversion’s age limit.
  • Hosts it reaches: trc.taboola.com, backstage.taboola.com. No other.
  • What a connection may override: /tokens, /conversions/events, /conversions/send_on, /cost. Hosts, authentication and requests never are, and an override may only lower the limits.

This page describes version 2 of the Taboola template, the latest published. The version your connection runs is the one your administrators approved, and the portal shows it.