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

# PopAds as a Traffic Source

> Track PopAds popunder campaigns in ClickFlare: capture the IMPRESSIONID click ID, pass the bid as cost and add the PopAds S2S postback with payout.

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

PopAds is one of the oldest popunder networks. It sells popunder traffic from publisher websites on a bid-per-thousand basis. This guide sets up PopAds as a traffic source in ClickFlare. It covers passing PopAds' visit data into your reports, passing the bid as cost, and sending conversions, with payout, back to PopAds.

ClickFlare's PopAds template comes ready for conversion tracking. It passes PopAds' impression ID as the click ID and includes the PopAds postback. You only add your PopAds account ID to the postback.

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

## At a glance

| | |
| - | - |
| **Ad format** | Popunder |
| **Click ID macro** | `[IMPRESSIONID]`, mandatory for conversion tracking |
| **Conversion tracking** | S2S postback to `serve.popads.net/cpixel.php`, included in the template. You add your `aid`. |
| **Payout passed back** | Yes, in the `value` parameter, in USD |
| **Multiple events** | One postback |
| **Cost** | Passed per visit by the `[BID]` macro. Check the amount. |
| **Conversion API** | No |

## How it works

**1. PopAds sends the visit**

A visitor opens a page on a PopAds publisher site and your popunder loads. PopAds opens your ClickFlare campaign URL and fills in its macros: the impression ID, your bid, the website, category, country, device type and other details.

**2. ClickFlare stores the PopAds impression ID**

ClickFlare saves the value of `[IMPRESSIONID]` as the visit's **External ID** 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 PopAds**

ClickFlare fires the PopAds postback, replacing `{external_id}` with the stored impression ID and `{payout}` with the revenue. PopAds matches it to the original impression.

> [!NOTE]
>
> The mirror to keep straight: in the **campaign URL** you write *ClickFlare's* parameter (`impressionid`) and *PopAds'* macro (`[IMPRESSIONID]`). In the **postback URL** you write *PopAds'* parameter (`id`) and *ClickFlare's* token (`{external_id}`). PopAds macros use square brackets. ClickFlare tokens use curly braces. A postback should contain only curly braces.

## 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 `aid` in PopAds.** It identifies your account in the postback. You copy it from PopAds' **Conversion Tracking** page in Step 2.
* **Decide which conversion PopAds should receive.** PopAds takes one conversion per impression. If your funnel has several steps (lead, then sale), decide now which one to send. See [Tracking several events](#tracking-several-events).

***

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

1. Go to **Campaigns** and click **New**.
2. In **Traffic Source**, open the dropdown and click **+ New Traffic Source**.
3. Type `popads` in the search box and select the **PopAds** template.
4. Enter a **Name**, for example `PopAds`.
5. Leave **Cost currency** on **USD**. PopAds bids and payouts are in US dollars.

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

| Name | TS Parameter | TS Token (PopAds macro) | ClickFlare Token | What it carries |
| - | - | - | - | - |
| external\_id | `impressionid` | `[IMPRESSIONID]` | `{external_id}` | PopAds' impression ID, the value the postback needs |
| cost | `bid` | `[BID]` | `{cost}` | Your bid. See [Cost](#cost). |
| Website ID | `websiteid` | `[WEBSITEID]` | `{trackingField1}` | The publisher website that showed the popunder |
| Quality score | `quality` | `[QUALITY]` | `{trackingField2}` | PopAds' quality score for the website |
| Category ID | `categoryid` | `[CATEGORYID]` | `{trackingField3}` | The website's category |
| Country | `country` | `[COUNTRY]` | `{trackingField4}` | The visitor's country |
| Form Factor Name | `formfactorname` | `[FORMFACTORNAME]` | `{trackingField5}` | The device type, for example desktop or mobile |
| Campaign ID | `campaignid` | `[CAMPAIGNID]` | `{trackingField6}` | The PopAds campaign ID |
| Campaign name | `campaignname` | `[CAMPAIGNNAME]` | `{trackingField7}` | The PopAds campaign name |
| Screen Resolution | `screenresolution` | `[SCREENRESOLUTION]` | `{trackingField8}` | The visitor's screen resolution |

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

Each tracking field becomes a column you can group reports by. `websiteid` is the one you will use most: it tells you which publisher sites convert, so you can block or bid up websites in PopAds. `quality` helps you see whether higher-quality inventory pays back its higher bid.

To pass more PopAds data, click **Add Parameter**, give it a name and parameter, and enter the PopAds macro as the **TS Token**. PopAds also offers macros such as `[OSNAME]`, `[BROWSERNAME]`, `[DEVICENAME]`, `[ISPNAME]` and `[CATEGORYNAME]`. ClickFlare assigns the next free tracking field. Check the macros your PopAds account offers before adding them.

## Step 2 – Set up the postback

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

### Find your aid in PopAds

1. In PopAds, open your campaign and go to **Conversion Tracking**.
2. PopAds shows a postback link of this form:

```text theme={null}
http://serve.popads.net/cpixel.php?s2s=1&aid=YOUR_AID&id=impressionId&value=conversionValue
```

3. Copy the value after `aid=`. It is unique to your account. You need only this value: the rest of the URL is already in the template, with ClickFlare tokens in place of PopAds' placeholders.

### Complete the template's postback 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 fills in the URL:

```text theme={null}
http://serve.popads.net/cpixel.php?s2s=1&aid=REPLACE&id={external_id}&value={payout}
```

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

3. Replace `REPLACE` with the `aid` you copied from PopAds. Leave `{external_id}` and `{payout}` as they are: ClickFlare fills them with the impression ID and the 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 PopAds traffic source selected.

> [!WARNING]
>
> Keep `s2s=1` in the URL. It tells PopAds the request comes from a server, not from a pixel in the visitor's browser. And replace `REPLACE` with your `aid`: if it stays in the URL as literal text, PopAds can't attribute the conversion to your account.

PopAds reads `value` as US dollars, written as a plain number with a dot as the decimal separator, for example `1.25`. ClickFlare's `{payout}` is sent in that format. If your offers pay in EUR or another currency, convert payouts to USD in ClickFlare first. 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**. See [Cost](#cost).
3. Choose **Redirect** or **Direct** tracking. Redirect is the usual choice for popunder 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 now contains every PopAds macro from the template, for example `impressionid=[IMPRESSIONID]`, `websiteid=[WEBSITEID]` and `bid=[BID]`. Check that `impressionid=[IMPRESSIONID]` is there before you paste it into PopAds.

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

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

## Step 4 – Create the campaign in PopAds

1. In PopAds, create a new campaign from the advertiser panel.
2. Paste the ClickFlare campaign URL into the campaign's URL field.
3. Choose your targeting, bid and budget as usual.
4. Save and start the campaign.

Paste the URL exactly as ClickFlare gives it. PopAds replaces each `[...]` macro when the popunder opens.

## Step 5 – Test the integration

PopAds has no documented test-conversion tool like some networks. Test from the ClickFlare side.

1. Run the campaign with a small budget until the first visits arrive.
2. In ClickFlare, open the campaign report and group by **External ID**. Each visit should show a PopAds impression ID. If the column is empty, `impressionid=[IMPRESSIONID]` is missing from the campaign URL.
3. Complete the offer yourself through a real visit, or wait for the first real conversion.
4. Go to **Logs → Postback Status** and filter by the campaign. A successful postback to `serve.popads.net` confirms ClickFlare sent it. Open it and check that `id=` holds an impression ID and `value=` holds the payout.
5. In PopAds, check that the campaign's statistics show the conversion.

***

## Tracking several events

The PopAds postback has no event or goal parameter, so PopAds cannot tell one event from another. Send it the one conversion you want PopAds to count.

1. In ClickFlare, create a [custom conversion](/docs/en/settings/custom-conversions.md) for each step of your funnel, for example `lead` and `purchase`.
2. Map the PopAds postback to the event that matters most, usually the sale.

Every step still shows in ClickFlare. Only the mapped event reaches PopAds.

> **Rules for the PopAds postback**
>
> * One postback, one event. Don't add a second postback for another event: without an event parameter, PopAds has no way to keep them apart.
> * `value` is in USD, with a dot as the decimal separator, no currency symbol and no thousands separator.
> * The `aid` belongs to your PopAds account. Copy it from your own **Conversion Tracking** page, never from another guide.

> **Sending only some conversions**
>
> 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 PopAds' bid with every visit. PopAds fills `bid=[BID]` in the campaign URL, and ClickFlare records it as the visit's cost.

Set the **Cost Model** on the campaign to **Not Tracked**. ClickFlare then uses the value PopAds passes in the URL. See [Cost Models](/docs/en/core-platform-concepts/cost-models.md).

> [!WARNING]
>
> PopAds prices traffic per 1,000 popunders. If `[BID]` arrives as that per-thousand bid, ClickFlare records each visit at a thousand times its real cost. After the first visits, compare ClickFlare's **Cost** column with the spend PopAds reports for the same period. If ClickFlare's cost is far too high, set the cost model to **CPC** and enter your bid divided by 1,000 as the cost per visit.

When the actual spend differs from what ClickFlare recorded, correct it with a [manual cost upload](/docs/en/settings/manual-cost-upload.md). See [How to Set Up Traffic Source Cost Tracking](/docs/en/tracking/how-to-setup-traffic-source-cost-tracking.md).

## Delayed revenue

If you run search arbitrage (RSOC or AFD) behind PopAds, the feed reports revenue hours or days after the click. To pass that revenue to PopAds 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

> **Conversions show in ClickFlare but not in PopAds**
>
> * **Traffic source postback URL** is off.
> * The postback still contains `aid=REPLACE`. Replace it with your own `aid`, as in Step 2.
> * `id=` in the postback is blank, because the campaign URL in PopAds has no `impressionid=[IMPRESSIONID]`. See the next item.
> * **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 PopAds returned.

> **The External ID column is empty**
>
> The campaign URL in PopAds has no `impressionid=[IMPRESSIONID]`, usually because it was edited or copied before the traffic source was saved. Check that the `external_id` row reads `impressionid` and `[IMPRESSIONID]`, then copy the campaign URL from ClickFlare again and update it in PopAds. Visits that already happened keep their empty External ID.

> **Cost is far too high**
>
> `[BID]` is passing your per-thousand bid. Switch to **CPC** with your bid divided by 1,000. See [Cost](#cost).

> **Website or category columns are empty**
>
> The macros were not replaced, usually because the URL was edited or pasted somewhere PopAds doesn't process macros. 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 PopAds traffic source for all my PopAds campaigns?

**A1:** Yes. The `aid` identifies your account, so one postback serves every campaign. If your PopAds **Conversion Tracking** page shows a different `aid` for a campaign, create a second PopAds traffic source with that postback.

> **Q2:** Where do I see PopAds' impression ID in my reports?

**A2:** In the **External ID** column. The template's `external_id` row stores `[IMPRESSIONID]` there, and the postback sends it back to PopAds as `id={external_id}`.

> **Q3:** Why does PopAds call the click ID an impression ID?

**A3:** The visitor never clicks your ad. The popunder opens behind the page they are on, so PopAds identifies each popunder by its impression. For ClickFlare it plays the same role as a click ID.

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

**A4:** Redirect is the usual choice for popunder traffic. Use Direct only if PopAds must see your lander's domain as the destination. See [Direct Campaign Tracking](/docs/en/campaigns/direct-campaign-tracking.md).

> **Q5:** Do I need the postback if I only buy on CPM?

**A5:** ClickFlare tracks your conversions and ROI without it. The postback is what lets PopAds see them too, in your PopAds statistics and for its own optimization. Set it up anyway. It takes a minute.

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

> **[Tokens arriving empty](/docs/en/troubleshooting/tokens-arriving-empty.md)**
>
> What to check when macros come through blank.

> **[Cost models](/docs/en/core-platform-concepts/cost-models.md)**
>
> How CPC, CPA and Auto 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.