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

# AdRoll Click & Conversion Tracking Setup

> Set up AdRoll conversion tracking in ClickFlare: the [ADROLL:...] click macros, the adct click ID as External ID, and conversions via the AdRoll Pixel or API.

![AdRoll traffic source template](https://mintcdn.com/clickflare/JnEca3lx3v_LxcNj/images/integrations/covers/templates/adroll.png?fit=max\&auto=format\&n=JnEca3lx3v_LxcNj\&q=85\&s=6b1a1de4b54414ab8fc6ebb7b7c0bd81)

AdRoll, part of NextRoll, is a self-serve retargeting and prospecting platform. It buys display, native, video and CTV inventory, and can also run your ads on Facebook and Instagram from the same account. This guide sets up AdRoll as a traffic source in ClickFlare. It covers capturing AdRoll's campaign, ad and placement data in your reports, keeping AdRoll's own click ID intact, and the ways you can report conversions back to AdRoll.

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

> [!WARNING]
>
> The AdRoll template has **no postback URL**. AdRoll doesn't accept conversions by S2S postback URL, and ClickFlare has no integration with AdRoll's Conversions and Events API. AdRoll receives conversions only through the AdRoll Pixel on your pages or through an API connection you run yourself. See Step 2 below.

## At a glance

| | |
| - | - |
| **Ad formats** | Display, native, video and CTV ads, plus Facebook and Instagram ads run from AdRoll |
| **Click ID** | `adct`, which AdRoll appends to the URL itself. ClickFlare stores it as the External ID. No macro is needed. |
| **Conversion tracking** | Not from ClickFlare. AdRoll Pixel on your pages, or AdRoll's Conversions and Events API. |
| **Payout passed back** | No. Values reach AdRoll only through the pixel or the API. |
| **Multiple events** | In AdRoll, through pixel events and conversion audiences |
| **Cost** | Not passed in the URL. Use **CPC**, or upload costs. AdRoll's default pricing is dynamic CPM. |
| **Conversion API** | AdRoll has one, in open beta. ClickFlare has no integration with it. |

## How it works

**1. AdRoll sends the click**

A visitor clicks your ad. AdRoll opens your ClickFlare campaign URL with its macros filled in: the campaign, ad group, ad, domain, network and device. It also appends its own click ID, `adct`, to the end of the URL.

**2. ClickFlare stores the click data**

ClickFlare saves the value of `adct` as the visit's **External ID**, stores the other values in tracking fields, and redirects the visitor to your lander or offer.

**3. The conversion reaches ClickFlare**

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

**4. AdRoll learns about it separately**

ClickFlare does not post the conversion to AdRoll. If the AdRoll Pixel fires on your conversion page, or you send the event through AdRoll's API with the `adct` value, AdRoll attributes it to the ad.

> [!NOTE]
>
> With most networks there is a mirror: the network's macro in the campaign URL, ClickFlare's token in the postback. With AdRoll only the first half exists. The template writes ClickFlare's parameters (`campaign_id`, `ad_id`...) with AdRoll's macros (`[ADROLL:CAMPAIGN_EID]`, `[ADROLL:AD_EID]`...). The click ID needs no macro: AdRoll appends `adct` itself. There is no postback to send anything back in.

## Before you start

* **Set up your own tracking domain.** Run the campaign 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).
* **Install the AdRoll Pixel on your site.** AdRoll is built around it: retargeting audiences, conversions and attribution all come from the pixel. Without it on your landing pages, AdRoll can't attribute click-through conversions.
* **Decide how AdRoll will see conversions.** If you own the conversion page, the pixel can record the conversion there. If you send traffic to an affiliate offer you don't control, AdRoll only sees what the pixel catches on your lander. See Step 2 below.

***

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

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

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

| Name | TS Parameter | TS Token (AdRoll macro) | ClickFlare Token | What it carries |
| - | - | - | - | - |
| External ID | `adct` | (empty) | `{external_id}` | AdRoll's click ID. AdRoll appends it to the URL itself, so there is no macro. See below. |
| Cost | (empty) | (empty) | `{cost}` | Nothing. No cost is passed. See [Cost](#cost). |
| Campaign ID | `campaign_id` | `[ADROLL:CAMPAIGN_EID]` | `{trackingField1}` | The AdRoll campaign ID |
| Campaign Name | `campaign_name` | `[ADROLL:CAMPAIGN_NAME]` | `{trackingField2}` | The campaign name |
| Ad Group ID | `adgroup_id` | `[ADROLL:AD_GROUP_EID]` | `{trackingField3}` | The ad group ID |
| Ad ID | `ad_id` | `[ADROLL:AD_EID]` | `{trackingField4}` | The ad (creative) ID |
| Domain | `domain` | `[ADROLL:DOMAIN]` | `{trackingField5}` | The site where the ad was shown |
| Network | `network` | `[ADROLL:NETWORK]` | `{trackingField6}` | The inventory network that served the ad |
| Device Type | `device` | `[ADROLL:DEVICE_TYPE]` | `{trackingField7}` | The device type |
| Campaign Type | `campaign_type` | `[ADROLL:CAMPAIGN_TYPE]` | `{trackingField8}` | The campaign type. On Facebook and Instagram it is `facebook`. |
| Advertiser ID | `advertiser_id` | `[ADROLL:ADVERTISABLE_EID]` | `{trackingField9}` | Your AdRoll advertiser profile. Useful if you run several. |

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

All macros come from AdRoll's list of click macros for web ads. `domain` and `network` are the ones you will use most for display: they show which sites and exchanges send converting traffic.

### The adct click ID

`adct` is the ID AdRoll uses for conversions. AdRoll appends it to the landing page URL on every ad, without a macro, for example `?utm_campaign=display&adct=...`. The value is up to 140 characters. Its pixel reads it on your landing page, and its Conversions and Events API uses it to match server events to clicks.

That is why the **External ID** row has a TS Parameter but an empty TS Token. ClickFlare reads the `adct` value AdRoll has already added, the same way the [Quora Ads](/docs/en/integrations/quora-ads-as-a-traffic-source.md) template reads `qclid`, and stores it as the visit's External ID. To pass it on, to your lander or to a relay, use `adct={external_id}`.

> [!WARNING]
>
> On Facebook and Instagram placements, AdRoll fills in only a few macros: the ad, campaign type and advertiser for static ads, plus ad group, campaign name and campaign ID for dynamic ads. The domain, network and device columns stay empty there. That is expected.

## Step 2 – Decide how AdRoll learns about conversions

There is no postback to configure. In the **New Traffic Source** form, leave **Traffic source postback URL** off and click **Save**. You are back in the campaign editor with the AdRoll traffic source selected.

### Option A – The AdRoll Pixel, with a conversion audience

Use this when you own the page where the conversion happens, for example your own store or lead form.

1. In AdRoll, click **Setup Your Pixel Now** on the red **Pixel Setup Required** banner. If it doesn't appear, go to **Analytics > Insights > Website > View Pixel**. Click **Copy** under **Connect your Pixel**.
2. Paste the pixel in the global header of your site, just above the closing `</head>` tag. Google Tag Manager or an ecommerce integration (Shopify, WooCommerce and others) also works. Use one method only.
3. Back in AdRoll, click **Verify Connection**. Verification can take up to 24 hours. The **PixelPal** Chrome extension shows right away whether the pixel fires.
4. To record a sale with its value, fire `adroll.track("purchase", ...)` on the confirmation page, with `order_id`, `currency` and `conversion_value`.
5. Create a conversion audience: build the audience for your conversion page or event under **Audiences > Website Audiences**, and tick **This is a conversion audience**.

The pixel must also fire on your **landing pages** and see `adct` in their URL. AdRoll warns that redirects which strip or change `adct` break click-through attribution. With **Redirect** tracking, AdRoll adds `adct` to the ClickFlare campaign URL, not to your lander. Pass it on: add `adct={external_id}` to your lander's URL in ClickFlare. With **Direct** tracking, the lander is the destination and receives `adct` itself.

### Option B – The pixel on your lander only

Use this when you send traffic to an affiliate offer you don't control. Install the AdRoll Pixel on your lander, pass `adct` to it as in Option A, and build a conversion audience from the action you can see, for example visitors who clicked through to the offer.

AdRoll then reports and optimizes on lander engagement, not on the sale. Your real conversions and revenue stay in ClickFlare. Judge campaigns there.

### Option C – AdRoll's Conversions and Events API

AdRoll's Conversions and Events API takes events from your server. As of October 2026 it is in open beta: you request a **Server Access Token** from your Account Manager, Customer Onboarding Manager or AdRoll Customer Support. It is a different key from the Personal Access Tokens of AdRoll's other APIs.

Each event needs an identifier, the `adct` click ID or a first-party cookie, and one of AdRoll's standard event names: `homeView`, `productSearch`, `pageView`, `addToCart` or `purchase`. Custom names aren't supported. Click IDs map to clicks for 30 days.

ClickFlare doesn't send to this API, but it stores the `adct` click ID as each visit's External ID. A developer can send it from your own system, or from a relay that a ClickFlare postback calls with `adct={external_id}`. Don't send the same event through both the pixel and the API: AdRoll warns that this creates duplicates. See the [Conversions and Events API](https://help.adroll.com/hc/en-us/articles/48086278746893-AdRoll-Conversions-and-Events-API) article.

> [!NOTE]
>
> Whichever option you use, ClickFlare remains your source of truth for revenue. AdRoll's numbers will differ from ClickFlare's. AdRoll counts view-through as well as click-through conversions, uses a lookback window of 7 days by default (adjustable from 1 to 30), and applies the attribution model you choose under its attribution settings.

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

1. Name the campaign.
2. Set the **Cost Model** to **CPC** and enter your expected cost per click. See [Cost](#cost).
3. Choose **Redirect** or **Direct** tracking. If the AdRoll Pixel sits on your lander, **Direct** keeps `adct` on the lander without extra setup. See [Direct Campaign Tracking](/docs/en/campaigns/direct-campaign-tracking.md).
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 contains every AdRoll macro from the template, for example `campaign_id=[ADROLL:CAMPAIGN_EID]&campaign_name=[ADROLL:CAMPAIGN_NAME]`. Because the External ID row has no macro, the URL may also contain an empty `adct=`. Delete it, so the only `adct` in the click is the one AdRoll adds.

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 the AdRoll click.

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

## Step 4 – Add the URL to your ads in AdRoll

In AdRoll, the destination URL belongs to each ad.

* **New ads:** go to **Creatives** in the left menu, click **Create** or **Upload**, fill in the fields and enter the ClickFlare campaign URL as the destination URL.
* **Existing ads:** go to **Creatives**, hover over the ad, click **Edit**, then click **Edit UTM** next to the **Destination URL** field.
* **Dynamic ads:** add the parameters both as tracking parameters and in the fallback URL, as AdRoll asks for UTMs.

Paste the URL exactly as ClickFlare gives it. AdRoll replaces each `[ADROLL:...]` macro when the ad is clicked. AdRoll's help shows its macros inside `utm_` values. The template uses its own parameter names, which AdRoll should treat the same way. Confirm it with the test below.

Then attach the ads to your campaign and launch it as usual.

## Step 5 – Test the integration

1. Click a live AdRoll ad, so the visit comes from AdRoll. A copied URL opened by hand has no macros filled in and no `adct`.
2. In ClickFlare, open the campaign's report and check the **External ID** column. It should hold the `adct` value AdRoll appended.
3. Check the tracking-field columns. They should show values, not `[ADROLL:CAMPAIGN_EID]` or other raw macros.
4. Look at your lander's URL after the click. With Redirect tracking and `adct={external_id}` on the lander URL, `adct` should be there.
5. Complete the offer the way a real visitor would and check that the conversion appears in ClickFlare.
6. Check the AdRoll Pixel with **PixelPal** on the lander and the conversion page.

There is nothing to check under **Logs → Postback Status**. No postback is sent to AdRoll.

***

## Cost

The template doesn't pass cost. Its **Cost** row is empty, AdRoll has no cost macro, and ClickFlare has no cost integration for AdRoll.

AdRoll's default pricing is dynamic CPM: you pay per thousand impressions. ClickFlare only sees clicks, so set the campaign's **Cost Model** to **CPC** and enter your effective cost per click: your AdRoll spend divided by your AdRoll clicks. Don't enter the CPM divided by 1,000: a display impression is not a click, and that figure would understate your cost many times over.

> [!NOTE]
>
> Don't use **Not Tracked** with this template. It records cost only when the URL or a cost integration provides it, and neither does here, so your cost would show as zero.

Your effective CPC moves with CTR and auction prices, so CPC is an estimate. Export your spend from AdRoll regularly and correct ClickFlare with a [manual cost upload](/docs/en/settings/manual-cost-upload.md). See [Cost Models](/docs/en/core-platform-concepts/cost-models.md).

***

## Troubleshooting

> **Columns show \[ADROLL:...] or stay empty**
>
> * The URL was opened by hand, not from an ad click.
> * The ad runs on Facebook or Instagram, where AdRoll fills in only a few macros.
> * For a dynamic ad, the parameters are missing from the fallback URL.
> * The **External ID** is empty: the campaign URL still contains an empty `adct=`. Delete it from the URL in your AdRoll ads.
> * See [Traffic Source Tokens Arriving Empty](/docs/en/troubleshooting/tokens-arriving-empty.md).

> **AdRoll shows no click-through conversions**
>
> * ClickFlare sends nothing to AdRoll. Conversions come only from the pixel or the API.
> * The pixel isn't on the lander or the conversion page. Check with PixelPal.
> * `adct` doesn't reach the lander. With Redirect tracking, add `adct={external_id}` to the lander URL, or switch to Direct tracking.
> * No conversion audience is marked with **This is a conversion audience**.

> **Cost is zero in ClickFlare**
>
> The Cost Model is **Not Tracked**. The template passes no cost, so switch to **CPC**, or upload costs.

> **ClickFlare and AdRoll conversion counts don't match**
>
> Expected. AdRoll includes view-through conversions and applies its own attribution model and lookback window. ClickFlare counts conversions posted by your affiliate network. Optimize on ClickFlare's numbers.

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

***

**FREQUENTLY ASKED QUESTIONS**

> **Q1:** Why is there no postback in the AdRoll template?

**A1:** AdRoll doesn't take conversions by postback URL. It takes them from its pixel or through its Conversions and Events API, which needs an authenticated server request. ClickFlare's traffic source postback can't make that request on its own.

> **Q2:** Why is the TS Token of the External ID row empty?

**A2:** AdRoll has no macro for its click ID. It appends `adct` to the URL on every click by itself, so the template only names the parameter. ClickFlare reads the value and stores it as the External ID, ready for AdRoll's pixel or API.

> **Q3:** Can I use the same AdRoll traffic source for all my AdRoll campaigns?

**A3:** Yes. With no postback, nothing on the traffic source is campaign-specific. The macros tell your campaigns and ads apart.

> **Q4:** Should I use Redirect or Direct tracking?

**A4:** Both capture the click. Direct is the simpler fit for AdRoll, because the lander, where the pixel runs, receives `adct` itself. With Redirect, pass it to the lander with `adct={external_id}`. See [Direct Campaign Tracking](/docs/en/campaigns/direct-campaign-tracking.md).

## Related

> **[Direct campaign tracking](/docs/en/campaigns/direct-campaign-tracking.md)**
>
> Track without a redirect, with your lander as the destination.

> **[Manual cost upload](/docs/en/settings/manual-cost-upload.md)**
>
> Correct your AdRoll spend in ClickFlare.

> **[Cost models](/docs/en/core-platform-concepts/cost-models.md)**
>
> How CPC, CPA and RevShare costs are calculated.

> **[Conversions not showing](/docs/en/troubleshooting/conversions-not-showing.md)**
>
> The general checklist when conversions don't arrive.


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