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

# AdSupply Conversion Tracking & Postback Setup

> Set up AdSupply conversion tracking in ClickFlare: pass the {s2sParam} ID and {cpv} cost, then post s2sParam={external_id} back to AdSupply.

![AdSupply traffic source template](https://mintcdn.com/clickflare/vJtghtd_XfrC_OXQ/images/integrations/covers/templates/adsupply.png?fit=max\&auto=format\&n=vJtghtd_XfrC_OXQ\&q=85\&s=a85e23ba61e26c2613b82f2659e8f994)

AdSupply is a US-based CPM and CPC ad network, running since 2011. It sells popunder, native, Floating Banner, Before You Go and push traffic from its own publisher network, and is best known for popunders. This guide sets up AdSupply as a traffic source in ClickFlare. It covers passing AdSupply's click and cost data into your reports and sending conversions back to AdSupply so you can see them next to your spend.

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

## At a glance

| | |
| - | - |
| **Ad formats** | Popunder, native, Floating Banner, Before You Go, push and in-page push |
| **Click ID macro** | `{s2sParam}`, required for server-to-server conversion tracking |
| **Conversion tracking** | S2S postback to `engine.4dsply.com`, included in the template and ready to use. AdSupply also offers a browser conversion pixel. |
| **Payout passed back** | Not documented. The postback sends the click ID only. |
| **Multiple events** | One postback per ClickFlare event. AdSupply counts each as a conversion. |
| **Cost** | Passed per visit by the template, as AdSupply's winning price (`{cpv}`). Cost Model: **Not Tracked**. |
| **Conversion API** | No |

## How it works

**1. AdSupply sends the visit**

Your ad is shown or clicked. AdSupply opens your ClickFlare campaign URL and fills in its macros: the conversion tracking ID in `s2sParam`, the price in `cpv`, plus the campaign, placement, bid, channel and media.

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

ClickFlare saves the value of `s2sParam` as the visit's **External ID**, 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 AdSupply**

ClickFlare fires the template's AdSupply postback, replacing `{external_id}` with the stored AdSupply ID. AdSupply matches it to the original visit.

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

## 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).
* **Have an AdSupply advertiser account.** Sign up at AdSupply, then create your campaign and fund the account. Your account manager can confirm the conversion tracking options on your account.
* **Decide which conversions AdSupply should receive.** AdSupply shows what you send it. If your funnel has several steps (lead, then sale), decide now whether to send one event or several. See [Tracking several events](#tracking-several-events).

***

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

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

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

| Name | TS Parameter | TS Token (AdSupply macro) | ClickFlare Token | What it carries |
| - | - | - | - | - |
| cost | `cpv` | `{cpv}` | `{cost}` | The winning price of the impression after bid. See [Cost](#cost). |
| externalId | `s2sParam` | `{s2sParam}` | `{external_id}` | AdSupply's conversion tracking ID. Required for the postback. |
| Campaign name | `campaignname` | `{campaignName}` | `{trackingField1}` | The AdSupply campaign |
| Placement name | `placementname` | `{placementName}` | `{trackingField2}` | The placement inside the campaign: format, targeting and bid |
| Bid | `bid` | `{bid}` | `{trackingField3}` | Your bid ceiling for the placement |
| Total CPV | `totalcpv` | `{totalcpv}` | `{trackingField4}` | AdSupply's total cost per view |
| Channel | `channel` | `{channel}` | `{trackingField5}` | The publisher channel |
| Subchannel | `subchannel` | `{subchannel}` | `{trackingField6}` | The publisher sub-channel |
| Media name | `medianame` | `{mediaName}` | `{trackingField7}` | The creative, by the name you gave it |
| Keywords | `keywords` | `{keywords}` | `{trackingField8}` | Keywords matched for the visit |

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

Each tracking field becomes a column you can group reports by. **Channel** and **Subchannel** tell you which publisher inventory converts. **Placement name** and **Media name** let you compare your own placements and creatives.

> [!WARNING]
>
> Don't change or remove the `externalId` row. Without `{s2sParam}` in the campaign URL, AdSupply has no ID to match your postback against, and server-to-server conversions can't be credited.

To pass more AdSupply data, click **Add Parameter**, give it a name and parameter, and enter the AdSupply macro as the **TS Token**. ClickFlare assigns the next free tracking field. Other tracker integrations list macros such as `{PLACEMENTID}`, `{SITEID}`, `{MEDIAID}`, `{COUNTRYCODE}` and `{IPADDRESS}`. Check the macros your AdSupply account offers, and their exact spelling, before adding them.

## Step 2 – Set up the postback

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

### What the template gives you

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, with ClickFlare's `{external_id}` token as the value of `s2sParam`:

```text theme={null}
https://engine.4dsply.com/conversion.engine?s2sParam={external_id}
```

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

There is nothing to replace. The URL is ready to use as it is.

3. 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.
4. Click **Save**. You are back in the campaign editor with the AdSupply traffic source selected.

`{external_id}` is the AdSupply ID that ClickFlare stored from `s2sParam` on the visit. Don't replace it with ClickFlare's own click ID: AdSupply doesn't know it.

> [!NOTE]
>
> AdSupply doesn't document a payout parameter for this postback. AdSupply counts the conversion, and your revenue and ROI stay in ClickFlare. Ask your AdSupply account manager if you need revenue reported in AdSupply.

### The alternative: AdSupply's conversion pixel

AdSupply also offers a browser pixel. In AdSupply, the placement setup has a **Conversion tracking** step with a **Script** tab and three pixels. They report conversions at advertiser, campaign or placement level.

The pixel is a script that runs in the visitor's browser on your thank-you page. It doesn't use ClickFlare and depends on the browser, so ad blockers and cookie restrictions can drop conversions. Use it only if you own the thank-you page and the postback isn't an option. Don't run the pixel and the postback together, or AdSupply counts each conversion twice.

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** to **Not Tracked**, so ClickFlare uses the cost AdSupply passes. See [Cost](#cost).
3. Choose **Redirect** or **Direct** tracking. Redirect is the usual choice for AdSupply's popunder 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 AdSupply macro from the template, for example `s2sParam={s2sParam}` and `cpv={cpv}`.

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

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

## Step 4 – Create the campaign in AdSupply

In AdSupply, a campaign holds one or more placements. Each placement has its own ad type, targeting, media and bid.

1. Click **Create New Campaign**, enter a **Campaign name**, click **Next**, set the budget and click **Create Campaign**.
2. Inside the campaign, click **Create New Placement** and choose the **Ad type**.
3. Set the traffic targeting and the schedule, clicking **Next** after each.
4. Under **Select Media Rotation**, click **Create a New Media Rotation**, then **Create a New Media**.
5. Enter a media name, choose the **Source type**, upload your creative, and paste the ClickFlare campaign URL into **Click-through URL**.
6. Set the placement caps, enter a **Max bid**, review and click **Create placement**.

Paste the URL exactly as ClickFlare gives it. AdSupply replaces each `{...}` macro when the ad runs. Name your placements and media clearly: their names are what arrive in the **Placement name** and **Media name** columns.

## Step 5 – Test the integration

1. Open the campaign URL with test values, or let the placement run briefly, and check the visit in ClickFlare. The **External ID** must contain a real value, not the text `{s2sParam}`.
2. Complete the offer the way a real visitor would, or fire a test conversion through your affiliate network.
3. In ClickFlare, go to **Logs → Postback Status** and filter by the campaign. A successful request to `engine.4dsply.com` confirms ClickFlare sent it.
4. In AdSupply, check that the conversion appears in your campaign's reporting.

If ClickFlare sent the postback but AdSupply shows no conversion, ask your AdSupply account manager to confirm that server-to-server tracking is enabled for your placement and that the `s2sParam` value arrived.

***

## Tracking several events

AdSupply's postback has no event parameter. Each postback that fires counts as a conversion. To send more than one ClickFlare event:

1. In ClickFlare, create a [custom conversion](/docs/en/settings/custom-conversions.md) for each step, for example `lead` and `purchase`.
2. On the AdSupply traffic source, click **+ Another postback URL** once per extra event, and paste the template's postback into it.
3. Map each postback to its ClickFlare event.

AdSupply then counts both steps as conversions on the same visit. Most advertisers send only the final event.

> **Sending only one event**
>
> If AdSupply should only see your final sale, keep a single postback and map it to that event. Earlier steps (leads, add to carts) still show in ClickFlare. They just don't reach AdSupply.
>
> 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.

> **Pixel conversion levels**
>
> If you use AdSupply's pixel instead of the postback, pick the level carefully. The advertiser-level pixel counts conversions across all your campaigns. The campaign and placement pixels tie them to one campaign or one placement.

## Cost

The template passes cost per visit. The `cost` row sends AdSupply's `{cpv}` macro, the winning price of the impression after bid, and ClickFlare records it as the visit's cost. For popunders, one impression is one visit, so the recorded cost follows your actual spend.

On the campaign, set the **Cost Model** to **Not Tracked** so ClickFlare uses the cost passed in the URL.

> [!NOTE]
>
> The template also passes `{bid}` and `{totalcpv}` as tracking fields. Use them to compare your bid ceiling with what you actually paid. Only `{cpv}` feeds ClickFlare's cost.

If `{cpv}` doesn't arrive for your format, switch the Cost Model to **CPC** and enter your bid as the cost. On CPM placements, enter your CPM bid divided by 1,000.

ClickFlare has no cost integration for AdSupply. When the recorded spend differs from your AdSupply 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 AdSupply, the feed reports revenue hours or days after the click. ClickFlare can fire the postback again once that revenue arrives. See [Sending Delayed Revenue to Traffic Sources](/docs/en/advanced-tracking-configuration/how-to-send-delayed-revenue-to-traffic-sources.md). Since AdSupply's postback carries no payout, only the conversion itself reaches AdSupply.

***

## Troubleshooting

> **No conversions reach AdSupply**
>
> * **Traffic source postback URL** is off on the AdSupply traffic source, or the template's postback was deleted or edited. Restore it as in Step 2.
> * **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 returned.

> **ClickFlare sent the postback but AdSupply doesn't show it**
>
> * The External ID on the visit is empty or contains `{s2sParam}` as text, so the postback sent nothing AdSupply can match. Check the `externalId` row and the URL in AdSupply's **Click-through URL**.
> * The postback uses ClickFlare's click ID instead of `{external_id}`.
> * Server-to-server tracking isn't enabled for your placement. Ask your AdSupply account manager.

> **AdSupply counts conversions twice**
>
> You run both the AdSupply pixel and the ClickFlare postback. Remove the pixel from your thank-you page, or turn off the postback.

> **Placement or media columns are empty**
>
> The macros were not replaced, usually because the URL was pasted somewhere AdSupply doesn't process macros, or was edited. Paste the campaign URL from ClickFlare unchanged. 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 AdSupply traffic source for all my AdSupply campaigns?

**A1:** Yes. The postback is set once on the traffic source and every campaign using it sends conversions the same way.

> **Q2:** Do I need to change anything in the template's postback?

**A2:** No. It sends `s2sParam={external_id}`, which is all AdSupply's postback takes. There is no account ID or goal to fill in.

> **Q3:** Can I send my payout to AdSupply?

**A3:** Not with the documented postback, which carries only `s2sParam`. Your revenue, profit and ROI are in ClickFlare. Ask your AdSupply account manager if your account supports a payout value.

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

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

> **Q5:** Is the cost exact?

**A5:** It is the price AdSupply passes per visit in `{cpv}`. Compare the **Cost** column with your AdSupply spend after the first day. If they differ, fix the totals with a [manual cost upload](/docs/en/settings/manual-cost-upload.md).

## 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)**
>
> Split leads and sales into separate events.

> **[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 postbacks don't arrive.


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