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

# FlexOffers and ClickFlare Integration Guide

> Track FlexOffers offers in ClickFlare: pass the click ID in fobs, add one global postback under Flex Apps, and use #ca# as the payout.

![FlexOffers and ClickFlare Integration](https://mintcdn.com/clickflare/gS923ib4WFySqxSL/images/integrations/covers/flexoffers.png?fit=max\&auto=format\&n=gS923ib4WFySqxSL\&q=85\&s=aa8327e794dd4b59f05068d3be6a972d)

FlexOffers is an affiliate network for advertiser programs, mostly paid as a commission on each sale. As a publisher you apply to each program, then copy your tracking link for it from your FlexOffers account.

To track FlexOffers offers in ClickFlare, two links have to carry the ClickFlare click ID in both directions:

* **The offer URL** sends the ClickFlare click ID to FlexOffers in `fobs`.
* **The postback URL** sends it back to ClickFlare with every transaction, together with your commission and the order number. FlexOffers calls it a **global postback URL**: you set it once and it covers all your programs.

This guide covers the setup, why the payout must be `#ca#` and not `#sa#`, what to use as the transaction ID, and how to check that it all works.

> [!TIP]
>
> Only need the two values? The [Click ID & postback macros](/docs/en/integrations/click-id-and-postback-macros.md?q=flexoffers) page has them ready to copy with your tracking domain.

***

## At a glance

To set up FlexOffers with ClickFlare:

1. Set the domain and reporting time.
2. Create the FlexOffers affiliate network.
3. Create the offer.
4. Add the global postback.

Each step is explained in [Setup](#setup).

| | FlexOffers + ClickFlare |
| - | - |
| **How it connects** | S2S global postback, set under Flex Apps > Postback URLs |
| **What reaches ClickFlare** | Commission and order number per click |
| **Timing** | Real time, per conversion |
| **Key parameters** | `fobs`, `#fobs#`, `#ca#`, `#on#` |
| **Works with** | All programs on the traffic sources the postback covers |
| **Good to know** | Payout must be `#ca#`. `#sa#` is the whole order value. |

***

## How the data flows

```text theme={null}
Ad click
  → https://trk.yourdomain.com/cf/r/CAMPAIGN?...
     (ClickFlare records the click and generates the click ID)
  → [optional lander → CTA uses the ClickFlare click URL]
  → your FlexOffers tracking link &fobs=CF_CLICK_ID
     (FlexOffers stores the ClickFlare click ID as Subtracking 1)
  → Visitor buys on the advertiser's site
  → FlexOffers fires your global postback:
     https://trk.yourdomain.com/cf/cv?click_id=CF_CLICK_ID&payout=6.40&txid=ORDER_NUMBER
     (ClickFlare matches the conversion to the original click)
```

The two links mirror each other:

| Link | Built from | FlexOffers side | ClickFlare side |
| - | - | - | - |
| **Offer URL** (in ClickFlare) | FlexOffers' parameter + ClickFlare's token | `fobs` | `{cf_click_id}` |
| **Postback URL** (in FlexOffers) | ClickFlare's parameter + FlexOffers' variable | `#fobs#`, `#ca#`, `#on#` | `click_id`, `payout`, `txid` |

> [!NOTE]
>
> **Offer URL = their parameter + your token. Postback URL = your parameter + their variable.** FlexOffers writes the click ID into `fobs` on the way in and reads it back with `#fobs#` on the way out. FlexOffers variables are wrapped in `#`, not braces.

***

## What you'll need

* An active ClickFlare account with your **own tracking domain** set up. Shared domains get flagged by networks and blocked by browsers. See [Tracking domains](/docs/en/settings/tracking-domains.md).
* An approved FlexOffers publisher account, approved in the programs you want to promote.
* Access to **Flex Apps → Postback URLs** in your FlexOffers account.

***

## What the FlexOffers template contains

ClickFlare has a **FlexOffers** affiliate network template. It fills in the FlexOffers variables ClickFlare needs.

![The FlexOffers template in ClickFlare: Click Id is #fobs#, Payout is #ca# and Transaction ID is #on#](https://mintcdn.com/clickflare/b2lpDlx8sR69TsUK/images/integrations/flexoffers/clickflare-flexoffers-template-parameters.png?fit=max\&auto=format\&n=b2lpDlx8sR69TsUK\&q=85\&s=0a2429c54e8a482b0ab30ba414fb4aae)

| Field | FlexOffers variable | ClickFlare parameter | What it does |
| - | - | - | - |
| **Click Id** | `#fobs#` | `click_id` | Returns the ClickFlare click ID that the offer URL put in `fobs` (Subtracking 1). |
| **Payout** | `#ca#` | `payout` | The **commission amount**: what you earned on the transaction. |
| **Transaction ID** | `#on#` | `txid` | The **order number** of the transaction. See [the transaction ID](#the-transaction-id). |
| **Event Type** | leave empty | `ct` | The conversion type. FlexOffers has no event name variable, so leave it empty. |

> [!WARNING]
>
> Make sure **Payout** is `#ca#`. `#sa#` is the **sale amount**, the value of the whole order. With `#sa#`, ClickFlare records the customer's order value as your revenue, and ROI looks far better than it is. Older copies of the template used `#sa#`, so check affiliate networks you created before.

***

## Setup

Everything in ClickFlare is done from inside the campaign editor. Create the offer and the affiliate network inline as you go.

**1. Set up your own tracking domain**

Add a custom tracking domain before anything else, for example `trk.yourdomain.com`. The postback URL is built on this domain, so changing it later means updating the postback in FlexOffers too. See [Tracking domains](/docs/en/settings/tracking-domains.md).

**2. Report conversions by postback time**

Go to **Settings → General Settings** and set **Conversion registration time reporting** to **Postback Timestamp**.

FlexOffers reports a transaction on the day it happened. With the default **Visit Timestamp**, ClickFlare reports it on the day of the original click, so a sale that comes in days later lands on a different date in each platform. See [Conversion registration time](/docs/en/settings/conversion-registration-time-reporting.md).

> [!NOTE]
>
> This is an account-wide setting. It changes the date conversions are reported on for every campaign.

**3. Create the campaign**

Go to **Campaigns → New Campaign**, choose **Redirect tracking**, pick your traffic source and select your tracking domain. See [Creating a campaign](/docs/en/campaigns/creating-a-campaign-in-click-flare.md).

**4. Create the FlexOffers affiliate network**

While creating the offer for the campaign, create a new affiliate network in its **Affiliate Network** field. You can also create it first under **Affiliate Networks → + New**. Either way:

1. Search for **FlexOffers** and pick the **FlexOffers** template.
2. Name it, for example "FlexOffers". The global postback covers every program, so one affiliate network is enough.
3. Check that **Click Id** is `#fobs#`, **Payout** is `#ca#` and **Transaction ID** is `#on#`.
4. Leave **Event Type** empty.
5. Under **Conversion tracking**, select your own **Tracking Domain** and keep **S2S Postback URL** as the tracking method.
6. Set **Payout currency** to the currency FlexOffers pays you in.

ClickFlare builds the postback URL from these fields:

```text theme={null}
https://trk.yourdomain.com/cf/cv?click_id=#fobs#&payout=#ca#&txid=#on#
```

![The Conversion tracking section of the FlexOffers network in ClickFlare, with the generated postback URL: click\_id=#fobs#\&payout=#ca#\&txid=#on#](https://mintcdn.com/clickflare/b2lpDlx8sR69TsUK/images/integrations/flexoffers/clickflare-flexoffers-postback-url.png?fit=max\&auto=format\&n=b2lpDlx8sR69TsUK\&q=85\&s=12bf76f8f44f42cf694fce705d00b920)

Copy the postback URL and save the network.

**5. Get the tracking link from FlexOffers**

In your FlexOffers account, copy the tracking link for the program you want to promote. FlexOffers ties postbacks to the traffic sources registered in your account, so note which traffic source the link belongs to.

**6. Create the offer in ClickFlare**

In the offer form:

1. Name the offer, for example after the advertiser.
2. Select the FlexOffers affiliate network you just created.
3. Paste the FlexOffers link into **Offer URL** and turn on **Append Click ID to Offer Url**. ClickFlare adds `fobs={cf_click_id}` from the template. You can also add `&fobs={cf_click_id}` yourself. Use one or the other, not both.

   ![The Offer URL field of the ClickFlare New Offer form with a FlexOffers link ending in fobs=\{cf\_click\_id}](https://mintcdn.com/clickflare/b2lpDlx8sR69TsUK/images/integrations/flexoffers/clickflare-flexoffers-offer-url.png?fit=max\&auto=format\&n=b2lpDlx8sR69TsUK\&q=85\&s=64d6c9119c088f5aebb55d80d3d6f5ac)

> [!WARNING]
>
> Write `{cf_click_id}` with braces. Without them FlexOffers stores the literal text `cf_click_id`, the postback returns that text, and the conversion cannot be matched to a click.

Set the payout to **Auto** so ClickFlare uses the `payout` value from the postback.

**7. Add the global postback in FlexOffers**

In your FlexOffers account:

1. Click the **Flex Apps** menu, then **Postback URLs**.
2. Click **Create Postback**.
3. Select the traffic source or sources the postback is for. Pick every source whose links you'll run through ClickFlare.
4. Paste the ClickFlare postback URL into **Postback URL**. Keep the variables exactly as written: `#fobs#`, `#ca#`, `#on#`.
5. Select the **Request Method**. Choose GET, so FlexOffers fills the variables into the URL that ClickFlare reads.
6. Click **Save**.

> [!NOTE]
>
> The postback only works if the tracking link carries your click ID in `fobs`. FlexOffers can't send back a click ID it never received.

**8. Add a lander (optional)**

If you send traffic through a lander before the offer, the lander's CTA must use the **ClickFlare click URL**, not the FlexOffers link. ClickFlare then fills in the click ID when it redirects to the offer. See [Paths with landers and offers](/docs/en/campaigns/campaign-s-path-destination-to-landers-offers.md).

**9. Save the campaign and launch**

Save the campaign, copy the campaign URL from the **Tracking** tab and use it in your ads. Before you spend money on traffic, run the checks in [Verify the setup](#verify-the-setup).

***

## The transaction ID

By default ClickFlare keeps **one conversion per click ID**. If several postbacks arrive with the same click ID and no transaction ID, ClickFlare treats them as the same conversion and keeps only the last one received. The `txid` parameter tells ClickFlare that each postback is a separate conversion, so its value has to be different on every transaction.

| FlexOffers variable | Value | Use it as txid? |
| - | - | - |
| `#on#` | The order number | **Yes**, the template default |
| `#flx_salesid#` | The FlexOffers sales ID | Possibly: confirm with FlexOffers that it's unique per sale |
| `#clickid#` | FlexOffers' own click ID | No: the same for every sale on one click |
| `#pgid#` | The advertiser program ID | No: the same for every sale in a program |

The order number comes from the advertiser. If you see conversions arrive with an empty `txid`, or two sales on one click collapse into one, ask FlexOffers support whether `#flx_salesid#` is unique per sale. If it is, switch **Transaction ID** to `#flx_salesid#` in the affiliate network and in the FlexOffers postback.

***

## More FlexOffers variables

Turn on **Include additional parameters in the postback URL** to send more values with each conversion. ClickFlare accepts `param1` to `param20`. Useful ones:

| Variable | Value | Example |
| - | - | - |
| `#sa#` | Sale amount | `param1=#sa#` |
| `#pgid#` | Advertiser program ID | `param2=#pgid#` |
| `#et#` | Event time and date | `param3=#et#` |
| `#fobs2#` to `#fobs5#` | Subtracking 2 to 5 | `param4=#fobs2#` |

`fobs2` to `fobs5` work like `fobs`. Keep the click ID in `fobs` and use the others for your own labels, for example `&fobs2=native` on the offer URL. They show up in FlexOffers' reports too.

***

## Verify the setup

**1. Click through the campaign**

Open the ClickFlare campaign URL (with a lander, also click the CTA). When the offer loads, the first request goes to FlexOffers. In the address bar or your browser's network tab, check that it has `fobs=` followed by a real ClickFlare click ID, not the literal text `{cf_click_id}`.

**2. Test the postback by hand**

Copy a real click ID from ClickFlare. Open the postback URL in your browser with that click ID and test values in place of the variables, for example `https://trk.yourdomain.com/cf/cv?click_id=REAL_CLICK_ID&payout=1&txid=test1`. The conversion should show on the campaign. This tests ClickFlare's side only.

**3. Check the first real transaction**

When the first sale comes in, check **Logs → Event Logs** in ClickFlare: it should arrive with the commission and an order number as `txid`. Compare it with the **Transaction Details** page in FlexOffers.

***

## Troubleshooting

> [accordion] Transactions show in FlexOffers but not in ClickFlare
>
> Work through these in order:
>
> * **The postback isn't attached to the right traffic source.** Open **Flex Apps → Postback URLs** and check the postback covers the traffic source your links belong to.
> * **The click ID isn't in the link.** The offer URL is missing `fobs={cf_click_id}`, or the lander CTA links straight to FlexOffers instead of using the ClickFlare click URL.
> * **The click ID went into another sub ID.** If the link uses `fobs2` but the postback reads `#fobs#`, ClickFlare gets an empty value. Both sides must use the same one.
> * **The program doesn't support postbacks.** Not every advertiser on FlexOffers may fire them. Ask FlexOffers support if one program never posts back while others do.
>
> FlexOffers lists every transaction on the **Transaction Details** page, so you can see which ones didn't reach ClickFlare. See [Troubleshooting S2S postbacks](/docs/en/tracking/troubleshooting-s2s-postback-url-in-clickflare.md) for the general checks.

> [accordion] Revenue in ClickFlare is far too high
>
> The postback uses `#sa#` (sale amount) as the payout. Change **Payout** to `#ca#` in the affiliate network, then update the postback in FlexOffers.

> [accordion] ClickFlare receives a literal #fobs# or cf\_click\_id
>
> * A literal `#fobs#` means FlexOffers didn't replace the variable. Check the spelling against the list in **Create Postback**.
> * A literal `cf_click_id` means the offer URL in ClickFlare has the token without braces. It must be `{cf_click_id}`.

> [accordion] Only one of several sales shows in ClickFlare
>
> The `txid` is empty or repeats. Consider `#flx_salesid#` instead, as described in [the transaction ID](#the-transaction-id).

***

## FAQ

> [accordion] Does ClickFlare integrate with FlexOffers?
>
> Yes. ClickFlare has a FlexOffers template. You pass the click ID in fobs, and FlexOffers' global postback sends the click ID, commission and order number to ClickFlare.

> [accordion] Do I need a postback per program?
>
> No. The global postback covers all transactions for the traffic sources you selected when you created it.

> [accordion] How fast do FlexOffers conversions arrive?
>
> FlexOffers says global postbacks track conversions in real time: its system pings yours when a transaction occurs.

> [accordion] Does FlexOffers send a postback when a sale is reversed?
>
> FlexOffers' postback documentation doesn't mention reversals or a status variable, and ClickFlare doesn't read a status. Compare ClickFlare with FlexOffers' reports before payday and adjust if sales were reversed.

> [accordion] Can I send the conversion back to my traffic source?
>
> Yes. Once ClickFlare records the FlexOffers conversion, it can send it to the traffic source through the traffic source's postback or conversion API integration. Nothing changes on the FlexOffers side.

***

## Related

> [card] [Macro reference](/docs/en/integrations/click-id-and-postback-macros.md)
>
> Every network's values

> [card] [Postback parameters](/docs/en/tracking/click-flare-parameters-in-postback-urls.md)
>
> click\_id, txid, param1–20

> [card] [Postback issues](/docs/en/tracking/troubleshooting-s2s-postback-url-in-clickflare.md)
>
> Troubleshoot S2S


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