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

# LiveIntent Conversion Tracking & Postback Setup

> Set up LiveIntent conversion tracking in ClickFlare: pass the Decision ID, post conversions to LiveIntent's pixel, and track your LiveIntent cost.

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

LiveIntent places native and display ads inside publishers' email newsletters, targeted by email-based identity. It has been part of Zeta Global since October 2024. Advertisers buy it through LiveIntent's own platform with a managed team, or programmatically through DSPs, on CPM, CPC or CPA goals. This guide sets up LiveIntent as a traffic source in ClickFlare: capturing LiveIntent's Decision ID and campaign data in your reports, and posting your conversions back to LiveIntent.

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

## At a glance

| | |
| - | - |
| **Ad formats** | Native and display ads in email newsletters, animated teasers, dynamic product ads, retargeting |
| **Click ID** | The Decision ID, passed as `decision_id=${DECISION_ID}` |
| **Conversion tracking** | S2S postback to LiveIntent's conversion pixel, `rp.liadm.com/p` |
| **Payout passed back** | Yes, as `li_tp` |
| **Events** | One postback per LiveIntent conversion name (`li_n`), for example purchase and lead |
| **Cost** | Not passed in the URL. Use **CPC**, or upload costs. |
| **Buying** | No public self-serve sign-up. Through a LiveIntent account team, or through a DSP. |

## How it works

**1. LiveIntent sends the click**

A reader clicks your ad in a newsletter. LiveIntent opens your ClickFlare campaign URL with its macros filled in: the Decision ID, and the campaign, line item, creative, publisher, template and device IDs.

**2. ClickFlare stores the Decision ID**

ClickFlare saves the Decision ID as the visit's **External ID**, stores the other IDs 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. ClickFlare posts it to LiveIntent**

ClickFlare calls LiveIntent's conversion pixel with the Decision ID in `li_did` and the payout in `li_tp`. LiveIntent attributes the conversion to the ad decision that produced the click.

> [!NOTE]
>
> The two halves mirror each other. In the campaign URL, `${DECISION_ID}` is LiveIntent's macro and `decision_id` is the name ClickFlare reads it from. In the postback, ClickFlare's `{external_id}` token gives that same value back to LiveIntent as `li_did`.

## 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 and mail clients. 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).
* **Have a LiveIntent account or a buying route.** LiveIntent has no public self-serve sign-up. You work with a LiveIntent account team, log in to an existing platform account, or buy LiveIntent inventory through a DSP such as The Trade Desk or DV360. With a DSP, the click macros may differ: check them with your DSP and LiveIntent contact.
* **Get your LiveConnect App ID and conversion names from your account team.** The postback needs both:
  * The **App ID** looks like `a-` followed by a short code, for example `a-0abc`. It is the ID in your LiveConnect tag, `b-code.liadm.com/a-0abc.min.js`. If you don't have the tag, your account team gives you the ID.
  * The **conversion names** are the events LiveIntent should count, for example `product_purchase`. See [Conversion names](#conversion-names).

***

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

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

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

| Name | TS Parameter | TS Token (LiveIntent macro) | ClickFlare Token | What it carries |
| - | - | - | - | - |
| External ID | `decision_id` | `${DECISION_ID}` | `{external_id}` | LiveIntent's Decision ID, which the postback sends back as `li_did` |
| Cost | (empty) | (empty) | `{cost}` | Nothing. No cost is passed. See [Cost](#cost). |
| Campaign ID | `campaign_id` | `${CAMPAIGN_ID}` | `{trackingField1}` | The LiveIntent campaign |
| Creative ID | `creative_id` | `${CREATIVE_ID}` | `{trackingField2}` | The ad creative |
| Publisher ID | `publisher_id` | `${PUBLISHER_ID}` | `{trackingField3}` | The publisher whose newsletter showed the ad |
| Template ID | `template_id` | `${TEMPLATE_ID}` | `{trackingField4}` | The ad slot template inside the newsletter |
| Device Type | `device_type` | `${DEVICE_TYPE}` | `{trackingField5}` | The device type, taken from the user agent |
| Line Item ID | `line_item_id` | `${LINE_ITEM_ID}` | `{trackingField6}` | The line item inside the campaign, where budget, bid and targeting are set |

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

LiveIntent writes its macros as `${NAME}`, and it won't let you save a creative whose click URL contains an invalid macro. `${LINE_ITEM_ID}` is not in LiveIntent's public macro list, but the platform accepts it and it passes the line item ID in live accounts. `publisher_id` is the one you will use most: it tells you which newsletters convert, so you can ask your account team to block or favor them. LiveIntent has no macro for country, OS, newsletter name or cost.

> [!WARNING]
>
> Don't remove the **External ID** row. The Decision ID is the only value LiveIntent uses to match a postback to the ad, and ClickFlare stores it only there.

You can rename the TS Parameters to suit your analytics, for example `utm_content` for the creative and `utm_medium` for the publisher. Keep each LiveIntent macro unchanged.

LiveIntent may also add the Decision ID to the click on its own, as `li_did`. That is the same value. The template reads the explicit `decision_id` parameter, so it doesn't depend on LiveIntent appending anything. LiveIntent also has `${US_PRIVACY}` and `${GDPR}` macros, but it says not to use them in email. The template leaves them out.

## Step 2 – Set up the postback to LiveIntent

Scroll down in the **New Traffic Source** form to **Passing conversion info to traffic source** and turn on **Traffic source postback URL**. The template fills in LiveIntent's conversion pixel:

```text theme={null}
https://rp.liadm.com/p?aid=REPLACE_WITH_APP_ID&li_t=conversion&li_n=REPLACE_WITH_CONVERSION_NAME&li_did={external_id}&li_tp={payout}
```

![The LiveIntent postback URL in the New Traffic Source form](https://mintcdn.com/clickflare/_GKP6mVpn3dqFMPa/images/integrations/templates/liveintent/postback.png?fit=max\&auto=format\&n=_GKP6mVpn3dqFMPa\&q=85\&s=bfeeadf8920e7e8d6ee5019d88177526)

1. Replace `REPLACE_WITH_APP_ID` with your LiveConnect App ID, for example `aid=a-0abc`.
2. Replace `REPLACE_WITH_CONVERSION_NAME` with the conversion name for this event, for example `li_n=product_purchase`.
3. In the dropdown on the left, choose which ClickFlare conversions fire this postback: **Conversions** for all of them, or a custom conversion event such as Purchase.
4. Click **Save**. You are back in the campaign editor with the LiveIntent traffic source selected.

| Parameter | Value | What it carries |
| - | - | - |
| `aid` | Your App ID, `a-...` | Your LiveIntent advertiser account. Without the right ID the conversion lands nowhere. |
| `li_t` | `conversion` | The event type. Keep it as is. |
| `li_n` | `product_purchase`, `email_signup`, `form_fill`, `download` or a custom name | Which LiveIntent conversion this is |
| `li_did` | `{external_id}` | The Decision ID ClickFlare stored on the click |
| `li_tp` | `{payout}` | The conversion value, as a plain number |

You can add `&li_tid={txid}` to pass the conversion's transaction ID, if your affiliate network sends one. LiveIntent can use it to tell repeat conversions apart. There is no currency parameter: LiveIntent reads the value in your account's currency.

> [!WARNING]
>
> LiveIntent doesn't publish this pixel format. It is the format LiveIntent's tag collector accepts, and ClickFlare customers run it in production, but confirm the App ID and each conversion name with your LiveIntent account team before you scale. Ask them to check that the first test conversions appear in your LiveIntent reports.

### Conversion names

`li_n` tells LiveIntent which conversion happened. LiveIntent's predefined names are:

| `li_n` | Use it for |
| - | - |
| `product_purchase` | A sale or purchase |
| `email_signup` | An email or newsletter sign-up |
| `form_fill` | A lead or form submission |
| `download` | An app or file download |

Custom names work too, for example `click_out` for a click from your lander through to a search ad or an offer. A custom name must exist in your LiveIntent account first: your account team sets up the conversion tracker for it. Send only names they confirm, or LiveIntent may not count the conversion.

### One postback per event

If you track more than one event, add one postback per event, each with its own `li_n`:

1. Click **+ Another postback URL**.
2. In the new row's dropdown, choose the ClickFlare conversion event, for example **Lead**.
3. Paste the postback URL with that event's `li_n`, for example `li_n=form_fill`.
4. Repeat for every event, then click **Save**.

For example, a campaign that optimizes on sales but also reports leads and lander clicks can have:

| ClickFlare event | `li_n` |
| - | - |
| Purchase | `product_purchase` |
| Lead | `form_fill` |
| Search ad click | `click_out` (custom) |

The events must exist in ClickFlare first. See [Custom Conversions](/docs/en/settings/custom-conversions.md). Don't also keep a postback on **Conversions** (all events) next to the per-event ones: each conversion would then reach LiveIntent twice.

To send only some conversions, for example only sales above a certain payout, use **Event filter** under the postback to add conditions.

## 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. Both pass the Decision ID to ClickFlare. 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 the template's macros, for example `decision_id=${DECISION_ID}&campaign_id=${CAMPAIGN_ID}`. LiveIntent fills them in on every click.

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 LiveIntent click.

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

## Step 4 – Use the URL as the click URL in LiveIntent

Use the ClickFlare campaign URL as the creative's **click URL**:

* **In the LiveIntent platform**, paste it into the creative's click URL field. LiveIntent checks the macros when you save: if it refuses the creative, a macro is misspelled.
* **With a LiveIntent account team**, send them the campaign URL and ask them to use it as the click URL for every creative, unchanged.
* **Through a DSP**, use it as the creative's landing or click-through URL in the DSP, and check with the DSP which of LiveIntent's macros it passes on.

Keep the macros exactly as ClickFlare gives them, with the `$` and the braces. Mail clients and link scanners may open the URL before a reader does, so expect some visits that never reach the offer.

## Step 5 – Test the integration

1. Click your live ad in a real newsletter, so the visit comes from LiveIntent with a real Decision ID.
2. In ClickFlare, open the campaign's report and check that the visit has an **External ID**, a UUID such as `16dcf0ad-d401-434c-801c-e84549a6be32`.
3. Check the tracking-field columns. They should show IDs, not `${CAMPAIGN_ID}` or other raw macros.
4. Complete the offer the way a real visitor would and check that the conversion appears in ClickFlare.
5. Check the postback ClickFlare sent for that conversion: `li_did` should hold the UUID and `li_tp` the payout.
6. Ask your LiveIntent account team to confirm the conversion arrived in LiveIntent under the right conversion name.

***

## Cost

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

Set the campaign's **Cost Model** to **CPC** and enter your expected cost per click. On CPM or CPA goals you don't pay per click, so enter your effective CPC instead: the spend divided by the clicks, both from your LiveIntent reports. Don't enter your CPM divided by 1,000: an impression in a newsletter is not a click, so that 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 actual costs vary by auction and goal, so CPC is an estimate. Export your spend from LiveIntent regularly and correct ClickFlare with a [manual cost upload](/docs/en/settings/manual-cost-upload.md). LiveIntent's reports split spend by campaign, line item, creative and publisher, the same IDs the template stores in tracking fields. A day's spend takes about 48 hours to finalize in LiveIntent, so upload it after that. See [Cost Models](/docs/en/core-platform-concepts/cost-models.md).

***

## Troubleshooting

> **The External ID is empty**
>
> * The click didn't come from a live LiveIntent ad, for example a direct visit, a preview or a link scanner.
> * The click URL in LiveIntent lost `decision_id=${DECISION_ID}`, or the macro is misspelled.
> * The **External ID** row was removed or renamed.

> **Columns show raw macros**
>
> * A macro is misspelled or lost its `$` or braces. LiveIntent only fills macros written exactly as `${NAME}`.
> * You buy through a DSP that doesn't pass LiveIntent's macros. Ask the DSP which macros it supports.
> * See [Traffic Source Tokens Arriving Empty](/docs/en/troubleshooting/tokens-arriving-empty.md).

> **LiveIntent shows no conversions**
>
> * `aid` still says `REPLACE_WITH_APP_ID`, or holds the wrong App ID.
> * `li_n` is a name your LiveIntent account doesn't know. Use a predefined name, or ask your account team to set up the custom one.
> * The External ID was empty on the click, so `li_did` went out empty.
> * The postback's dropdown is set to an event that never fires. Check which ClickFlare event each postback is on.
> * See [Conversions not showing](/docs/en/troubleshooting/conversions-not-showing.md).

> **LiveIntent counts conversions twice**
>
> * A postback on **Conversions** (all events) sits next to per-event postbacks, so each conversion fires two of them. Keep only the per-event postbacks.
> * The LiveConnect tag on your conversion page reports the same conversion. Fire the tag or the postback for each event, not both.

> **LiveIntent shows fewer conversions than ClickFlare**
>
> LiveIntent applies its own attribution rules, and may drop conversions it can't match or judges suspicious. Check that every converting visit has an External ID, and optimize on ClickFlare's numbers.

> **Many visits but almost no clicks to the offer**
>
> Mail clients and security scanners open links in emails to check them. Those visits never reach your offer. Compare the clicks LiveIntent reports with ClickFlare's visits, and judge campaigns on conversions, not visit counts.

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

***

**FREQUENTLY ASKED QUESTIONS**

> **Q1:** Where do I find my App ID?

**A1:** It is the `a-...` ID in your LiveConnect tag, the script that loads from `b-code.liadm.com`. If you don't run the tag, ask your LiveIntent account team for it.

> **Q2:** Can I send the conversion value?

**A2:** Yes. `li_tp={payout}` sends the payout of each conversion. LiveIntent uses it in its revenue and ROAS reporting.

> **Q3:** Is the Decision ID unique for every click?

**A3:** LiveIntent uses it to attribute each conversion to one ad decision. If a reader clicks the same ad twice, both clicks may carry the same Decision ID. ClickFlare still records each visit.

> **Q4:** Can ClickFlare pull my LiveIntent cost automatically?

**A4:** Not today. LiveIntent has a Reporting API, but it gives daily spend only and signs in with your LiveIntent username and password. Use CPC and correct it with a manual cost upload.

> **Q5:** Can I buy LiveIntent self-serve?

**A5:** LiveIntent has no public sign-up. Existing accounts log in to its platform; new advertisers go through LiveIntent's sales team or buy LiveIntent inventory through a DSP.

## Related

> **[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)**
>
> Set up the events each LiveIntent postback fires on.

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

> **[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.