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

# OnClickA Conversion Tracking & Postback Setup

> Set up OnClickA conversion tracking in ClickFlare: [CLICK_ID] and [CAMPAIGN_ID] macros, the token S2S postback with payout, conversion_id events and CPM cost.

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

OnClickA is a self-serve ad network selling popunder, in-page, video, banner, web push and native teaser traffic, plus Telegram ads, on CPC, CPM, Smart CPM and CPA. This guide sets up OnClickA as a traffic source in ClickFlare. It covers passing OnClickA's click data into your reports and sending conversions, with payout, back to OnClickA so its statistics and your stats agree.

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

OnClickA runs on the same ad platform as ClickAdilla: the same bracket macros and the same postback format. If you already track ClickAdilla, the setup will look familiar. See [ClickAdilla as a Traffic Source](/docs/en/integrations/clickadilla-as-a-traffic-source.md).

## At a glance

| | |
| - | - |
| **Ad formats** | Popunder, tab-direct links, in-page, video, banners, web push, native teasers, Telegram ads |
| **Click ID macro** | `[CLICK_ID]`, mandatory for conversion tracking |
| **Conversion tracking** | S2S postback to `tracking.onclicka.com`, with your unique token and the campaign ID |
| **Payout passed back** | Yes, in the `payout` parameter (optional on OnClickA's side) |
| **Multiple events** | Yes, one postback per event, told apart by `conversion_id` |
| **Cost** | Passed by the template as OnClickA's price (`[PRICE]`). Exact on CPC only. See [Cost](#cost). |
| **Conversion API** | No |

## How it works

**1. OnClickA sends the click**

A visitor clicks your ad. OnClickA opens your ClickFlare campaign URL and fills in its macros: the click ID in `click_id`, the campaign ID in `campaign_id`, the price in `price`, plus the domain, creative, country, browser and other details.

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

ClickFlare saves the value of `click_id` as the visit's **External ID**, stores the campaign ID in tracking field 1, records the cost, 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 back to OnClickA**

ClickFlare fires the OnClickA postback, replacing `{external_id}` with the stored click ID, `{trackingField1}` with the OnClickA campaign ID and `{payout}` with the revenue. OnClickA matches it to the original click.

> [!NOTE]
>
> The mirror to keep straight: in the **campaign URL** you write *ClickFlare's* parameter (`click_id`) and *OnClickA's* macro (`[CLICK_ID]`). The template does this for you. In the **postback URL** you write *OnClickA's* parameter (`click_id`) and *ClickFlare's* token (`{external_id}`). Here both parameters happen to share the name `click_id`. The same goes for `campaign_id`: `[CAMPAIGN_ID]` in the campaign URL, `{trackingField1}` in the postback.

## 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).
* **Find your OnClickA postback token.** In your OnClickA dashboard, open **Tracking → Conversion tracking**. OnClickA creates your postback URL automatically, and it contains your unique token. The token goes into the postback URL.
* **Know which ad format you will run.** OnClickA's macros differ by format. Some of the template's rows only fill on some formats, as Step 1 explains.

***

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

1. Go to **Campaigns** and click **New**.
2. In **Traffic Source**, open the dropdown and click **+ New Traffic Source**.
3. Type `onclicka` in the search box and select the **OnClickA** template.
4. Enter a **Name**, for example `OnClickA`.
5. Leave **Cost currency** on **USD**. OnClickA reports `[PRICE]` in USD.

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

| Name | TS Parameter | TS Token (OnClickA macro) | ClickFlare Token | What it carries |
| - | - | - | - | - |
| External ID | `click_id` | `[CLICK_ID]` | `{external_id}` | OnClickA's click ID. Required for the postback. |
| Cost | `price` | `[PRICE]` | `{cost}` | Your ad price, in USD. See [Cost](#cost). |
| Campaign ID | `campaign_id` | `[CAMPAIGN_ID]` | `{trackingField1}` | Your OnClickA campaign ID. The postback sends it back. |
| Domain | `domain` | `[DOMAIN]` | `{trackingField2}` | The referring domain, the site that showed the ad |
| Pricing Model | `pricing_model` | `[PRICING_MODEL]` | `{trackingField3}` | CPM or CPC |
| Country | `country` | `[COUNTRY_ISO_CODE]` | `{trackingField4}` | The visitor's country code |
| Browser | `browser` | `[BROWSER_FAMILY]` | `{trackingField5}` | The visitor's browser |
| Device Type | `os_type` | `[OS_TYPE]` | `{trackingField6}` | Despite the macro's name, the device type: computer, mobile, tablet |
| Mobile Operator | `mobile_brand` | `[MOBILE_BRAND]` | `{trackingField7}` | The mobile operator brand |
| Popunder Creative ID | `popunder_creative_id` | `[POPUNDER_CREATIVE_ID]` | `{trackingField8}` | The URL in rotation (popunders only) |
| Banner Creative ID | `banner_creative_id` | `[BANNER_CREATIVE_ID]` | `{trackingField9}` | The banner image in rotation (banners only) |
| Native Creative ID | `native_creative_id` | `[NATIVE_AD_CREATIVE_ID]` | `{trackingField10}` | The native ad image in rotation (native only) |
| Push Creative ID | `web_push_creative_id` | `[WEB_PUSH_CREATIVE_ID]` | `{trackingField11}` | The push notification in rotation (web push only) |

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

Each tracking field becomes a column you can group reports by. `domain` tells you which sites convert, so you can block weak spots or bid up strong sites in OnClickA.

> [!WARNING]
>
> Don't change or remove the **External ID** and **Campaign ID** rows. OnClickA requires both the click ID and the campaign ID in the postback. The template sends `[CLICK_ID]` back as `{external_id}` and `[CAMPAIGN_ID]` back as `{trackingField1}`. If **Campaign ID** moves to another tracking field, the postback sends the wrong value and OnClickA can't match the conversion.

### Which rows work on which format

OnClickA publishes a separate macro list per ad format. The template mixes them, so on any one format some columns stay empty.

| Format | Template rows OnClickA fills in |
| - | - |
| Banners | All except Popunder, Native and Push Creative ID |
| Popunder, tab-direct links | All except Banner, Native and Push Creative ID. Popunder Creative ID fills on popunders only. |
| Native | External ID, Cost, Campaign ID, Domain, Native Creative ID |
| Web push | External ID, Cost, Campaign ID, Domain, Pricing Model, Push Creative ID |

OnClickA's macro list doesn't cover in-page, video or Telegram ads. On those formats, check the macros your OnClickA account offers when you create the ad, and expect only the click ID, campaign ID and price to be reliable.

You can remove rows your format doesn't support. Keep **External ID**, **Campaign ID** and **Cost**.

### Add more OnClickA macros

Native and web push have two macros the template leaves out: `[DEVICEUA]`, the user agent (native and push), and `[WEB_PUSH_ID]`, the push ad's ID (push only). To add one, click **Add Parameter**, give it a name and a TS Parameter such as `deviceua`, and enter the macro as the **TS Token**. ClickFlare assigns the next free tracking field.

## Step 2 – Set up the postback

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

### Get your token from OnClickA

1. In your OnClickA dashboard, open **Tracking → Conversion tracking**.
2. Find your postback URL. OnClickA creates it automatically. It looks like this, with your own token in place of `KKK999`:

```text theme={null}
https://tracking.onclicka.com/in/postbacks/?token=KKK999&campaign_id=[CAMPAIGN_ID]&click_id=[CLICK_ID]&payout=[PAYOUT]
```

3. Copy the `token` value. Every account has its own.

### Add it 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://tracking.onclicka.com/in/postbacks/?token=REPLACE_WITH_TOKEN&campaign_id={trackingField1}&click_id={external_id}&payout={payout}
```

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

It already sends the campaign ID (`{trackingField1}`), the click ID (`{external_id}`) and the payout (`{payout}`), all as ClickFlare tokens. It matches OnClickA's own URL, with ClickFlare's tokens in place of OnClickA's bracket placeholders.

3. Replace `REPLACE_WITH_TOKEN` with your OnClickA token. The result:

```text theme={null}
https://tracking.onclicka.com/in/postbacks/?token=YOUR_TOKEN&campaign_id={trackingField1}&click_id={external_id}&payout={payout}
```

4. 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 (for example `purchase`), choose that instead.
5. Click **Save**. You are back in the campaign editor with the OnClickA traffic source selected.

> [!WARNING]
>
> Replace `REPLACE_WITH_TOKEN` with your token, exactly as it appears in the postback URL under **Tracking → Conversion tracking**. If the placeholder stays in the postback, OnClickA cannot match the conversions to your account.

Only replace the token. Don't paste OnClickA's URL as it is: its `[CAMPAIGN_ID]`, `[CLICK_ID]` and `[PAYOUT]` placeholders are not ClickFlare tokens and would be sent as literal text.

`payout` is optional for OnClickA, but keep it. It lets you see real revenue and profit in your OnClickA statistics. If your offers pay in a currency other than USD, see [Multicurrency in ClickFlare](/docs/en/tracking/multicurrency-support-in-click-flare-how-it-works.md).

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**: **Not Tracked** for CPC campaigns, so ClickFlare uses the price OnClickA passes. For CPM, Smart CPM and CPA, see [Cost](#cost).
3. Choose **Redirect** or **Direct** tracking. Redirect is the usual choice for OnClickA's popunder, push and banner traffic.
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 OnClickA macro from the template, for example `click_id=[CLICK_ID]` and `campaign_id=[CAMPAIGN_ID]`.

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 OnClickA.

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

## Step 4 – Create the campaign in OnClickA

1. In OnClickA, create a campaign.
2. Choose the ad format, targeting and pricing model as usual.
3. Paste the ClickFlare campaign URL into the campaign's URL field.
4. Submit the campaign for approval.

Paste the URL exactly as ClickFlare gives it. OnClickA replaces each `[...]` macro with real values when the ad is clicked.

## Step 5 – Test the integration

1. Once the campaign runs, check the first visits in ClickFlare. The **Campaign ID** column should show your OnClickA campaign ID, not the text `[CAMPAIGN_ID]`.
2. Complete a test conversion on your offer, or post one to ClickFlare from your affiliate network.
3. In ClickFlare, go to **Logs → Postback Status** and filter by the campaign. A successful request to `tracking.onclicka.com` confirms ClickFlare sent the postback.
4. In OnClickA, open the **Tracking** section or your campaign statistics. The conversion appears in the campaign's conversion count.

***

## Tracking several events

OnClickA calls this dual postbacks: several conversion types in one campaign, for example a newsletter sign-up, an account creation and a first purchase. Each event needs its own postback, with a `conversion_id` parameter added at the end, starting at 1:

```text theme={null}
https://tracking.onclicka.com/in/postbacks/?token=YOUR_TOKEN&campaign_id={trackingField1}&click_id={external_id}&payout={payout}&conversion_id=1
https://tracking.onclicka.com/in/postbacks/?token=YOUR_TOKEN&campaign_id={trackingField1}&click_id={external_id}&payout={payout}&conversion_id=2
```

1. In ClickFlare, create a [custom conversion](/docs/en/settings/custom-conversions.md) for each step, for example `signup` and `purchase`.
2. On the OnClickA traffic source, click **+ Another postback URL** once per extra event.
3. Map each postback to its ClickFlare event: `signup` to the `conversion_id=1` URL, `purchase` to `conversion_id=2`.
4. Test each event.

> **Rules for multi-event postbacks**
>
> * One postback per event. Number them `conversion_id=1`, `conversion_id=2`, `conversion_id=3` and so on.
> * Every postback still needs your `token`, `click_id` and `campaign_id`.
> * If you only track one conversion per campaign, leave `conversion_id` out.
> * In OnClickA's **Statistics**, the split by event shows on every tab except **Dates**, **Hours** and **Campaigns**.

> **Sending only one event**
>
> If OnClickA should only learn from your final sale, keep a single postback and map it to that event. Earlier steps still show in ClickFlare. They just don't reach OnClickA.
>
> 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 passes cost through the **Cost** row, which sends OnClickA's `[PRICE]` macro, your ad price in USD. ClickFlare records it as the visit's cost.

On CPC campaigns, `[PRICE]` is the price of the click. Set the **Cost Model** to **Not Tracked** so ClickFlare uses the cost passed in the URL.

> [!NOTE]
>
> On CPM and Smart CPM campaigns, `[PRICE]` is the price per 1,000 impressions, not per click. With **Not Tracked**, ClickFlare would record that as the cost of each visit and overstate spend about 1,000 times. On CPM and Smart CPM, set the Cost Model to **CPC** and enter your CPM bid divided by 1,000 as the cost value. A popunder impression is roughly one visit. For push, in-page, banners and native, the result is only an estimate.

For OnClickA's CPA campaigns, set the Cost Model to **CPA**, with your price per conversion.

When the recorded spend differs from your OnClickA spend, correct it with a [manual cost upload](/docs/en/settings/manual-cost-upload.md). See [Cost Models](/docs/en/core-platform-concepts/cost-models.md).

## Delayed revenue

If you run search arbitrage (RSOC or AFD) behind OnClickA, the feed reports revenue hours or days after the click. To pass that revenue to OnClickA once it arrives, see [Sending Delayed Revenue to Traffic Sources](/docs/en/advanced-tracking-configuration/how-to-send-delayed-revenue-to-traffic-sources.md).

***

## Troubleshooting

> **OnClickA doesn't record the conversion**
>
> * The campaign URL in OnClickA is missing `click_id=[CLICK_ID]`, or the macro was edited. Copy the URL from ClickFlare again.
> * `REPLACE_WITH_TOKEN` was never replaced with your token.
> * The postback uses OnClickA's `[CLICK_ID]`, `[CAMPAIGN_ID]` or `[PAYOUT]` placeholders instead of ClickFlare's `{external_id}`, `{trackingField1}` and `{payout}`.
> * The **Campaign ID** row was removed or moved, so `{trackingField1}` sends the wrong value.

> **Conversions show in ClickFlare but not in OnClickA**
>
> * **Traffic source postback URL** is off on the OnClickA 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.
> * Check **Logs → Postback Status**: a failed request shows the status code OnClickA returned.

> **Cost is far too high**
>
> The campaign is on CPM or Smart CPM and the Cost Model is **Not Tracked**, so ClickFlare records the CPM price as the cost of each visit. Switch to **CPC** with your CPM bid divided by 1,000. See [Cost](#cost).

> **Some columns are empty**
>
> OnClickA only fills in the macros your ad format supports. A native campaign never fills **Banner Creative ID** or **Country**, for example. See [Which rows work on which format](#which-rows-work-on-which-format). If every column is empty, the URL was edited or pasted somewhere OnClickA doesn't process macros. 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:** Can I use the same OnClickA traffic source for all my OnClickA campaigns?

**A1:** Yes. The postback is set once on the traffic source and every campaign using it sends conversions the same way. The campaign ID travels with each click, so one postback serves every campaign.

> **Q2:** Why does the postback send `{trackingField1}`?

**A2:** OnClickA's postback requires the campaign ID next to the click ID. The template stores `[CAMPAIGN_ID]` in tracking field 1, so `{trackingField1}` sends it back.

> **Q3:** I run ClickAdilla too. Can I reuse that traffic source?

**A3:** No. OnClickA and ClickAdilla share a platform, but each has its own postback host and token. Create a separate traffic source with the OnClickA template.

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

**A4:** Redirect is the usual choice and works with every OnClickA format. Use Direct only if OnClickA must see your lander's domain as the destination. See [Direct Campaign Tracking](/docs/en/campaigns/direct-campaign-tracking.md).

> **Q5:** Does the template work for OnClickA's CPA campaigns?

**A5:** Yes, and CPA depends on it. OnClickA unlocks CPA only after a CPM or CPC goal campaign passes a testing period, and the test counts the conversions your postback sends: at least 10 per country. Countries with fewer get no traffic after the test. Set the campaign's cost model to **CPA** in ClickFlare.

## Related

> **[ClickAdilla](/docs/en/integrations/clickadilla-as-a-traffic-source.md)**
>
> The sister network on the same ad platform.

> **[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 sign-ups and sales into separate events.

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


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