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

# JuicyAds as a Traffic Source

> Track JuicyAds banner and popunder campaigns in ClickFlare and send conversions back with JuicyAds' S2S postback.

![JuicyAds traffic source template](https://mintcdn.com/clickflare/0jaeWC_DJvLt2SMH/images/integrations/covers/templates/juicyads.png?fit=max\&auto=format\&n=0jaeWC_DJvLt2SMH\&q=85\&s=7ca96b70bf2b61c73f3f2552382d59fe)

JuicyAds is an adult advertising network selling banner, native and popunder traffic, bought on CPC or CPM by ad zone and site. This guide sets up JuicyAds as a traffic source in ClickFlare. It covers passing JuicyAds' click data into your reports and sending conversions, with their value, back to JuicyAds so its stats and your reports agree.

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

## At a glance

| | |
| - | - |
| **Ad formats** | Banners, native, popunders |
| **Click ID macro** | `{dynamicS2S}`, a unique 31-character ID per click |
| **Conversion tracking** | S2S postback. The template ships the banner postback with `REPLACE` placeholders for `c`, `token` and `data`. Popunders use a different endpoint. |
| **Payout passed back** | Yes, in the `amount` parameter |
| **Multiple events** | Up to 3 goals on banner postbacks, with the `goal` parameter |
| **Cost** | Passed per click by the template, as JuicyAds' bid (`{dynamicBID}`). Cost Model: **Not Tracked**. Check it on CPM banners. |
| **Conversion API** | No |

## How it works

**1. JuicyAds sends the click**

A visitor clicks your ad. JuicyAds opens your ClickFlare campaign URL and fills in its dynamic links: the click ID in `dynamicS2S`, the bid in `dynamicBID`, plus the publisher, site, ad zone, image, campaign and country.

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

ClickFlare saves the value of `dynamicS2S` 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 JuicyAds**

ClickFlare fires the JuicyAds S2S postback, replacing `{external_id}` with the stored JuicyAds click ID and `{payout}` with the revenue. JuicyAds matches it to the original click, including the zone or site it came from.

> [!NOTE]
>
> The mirror to keep straight: in the **campaign URL** you write *ClickFlare's* parameter (`dynamicS2S`) and *JuicyAds'* macro (`{dynamicS2S}`). The template does this for you. In the **postback URL** you write *JuicyAds'* parameter (`s2s`) and *ClickFlare's* token (`{external_id}`).

## 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](https://clickflare.com/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](https://clickflare.com/docs/en/tracking/creating-an-offer-1.md) and [Adding an Affiliate Network](https://clickflare.com/docs/en/tracking/adding-an-affiliate-network.md).
* **Know where JuicyAds keeps your postback values.** JuicyAds shows the `c`, `token` and `data` values per campaign, in the campaign's **Performance Tracking** tab. The banner campaign must be approved before the full tracking options are available. Plan to create the JuicyAds campaign first and enter the values in the template's postback once you have them. See [Step 2](#step-2-set-up-the-postback).
* **Know your format.** Banner and popunder campaigns use different postback URLs and pass different data. Popunders are sold by site only, so they have no zone or image data.

***

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

1. Go to **Campaigns** and click **New**.
2. In **Traffic Source**, open the dropdown and click **+ New Traffic Source**.
3. Type `juicy` in the search box and select the **JuicyAds** template.
4. Enter a **Name**, for example `JuicyAds Banners`. If you run both banners and popunders, create one traffic source for each, because their postbacks differ.
5. Leave **Cost currency** on **USD** unless your JuicyAds account is billed in another currency.

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

| Name | TS Parameter | TS Token (JuicyAds macro) | ClickFlare Token | What it carries |
| - | - | - | - | - |
| cost | `dynamicBID` | `{dynamicBID}` | `{cost}` | The CPC or CPM bid at the time of the click or impression. See [Cost](#cost). |
| externalId | `dynamicS2S` | `{dynamicS2S}` | `{external_id}` | JuicyAds' unique click ID. Required for the postback. |
| Publisher ID | `dynamicPUB` | `{dynamicPUB}` | `{trackingField1}` | The publisher |
| Site ID | `dynamicSITE` | `{dynamicSITE}` | `{trackingField2}` | The site the ad was shown on |
| AdZone ID | `dynamicZNE` | `{dynamicZNE}` | `{trackingField3}` | The ad zone. Banners only. |
| Campaign Image ID | `dynamicIMG` | `{dynamicIMG}` | `{trackingField4}` | The image (creative) ID. Banners only. |
| Campaign Image Filename | `dynamicIMGNAME` | `{dynamicIMGNAME}` | `{trackingField5}` | The image's file name at upload, without the extension. Banners only. |
| Campaign ID | `dynamicCMP` | `{dynamicCMP}` | `{trackingField6}` | The JuicyAds campaign ID |
| Country Code | `dynamicGEO` | `{dynamicGEO}` | `{trackingField7}` | The visitor's 2-letter country code, for example `US` |
| Date of transaction | `dynamicDATE` | `{dynamicDATE}` | `{trackingField8}` | The date of the click. Banners only. |
| Hour of transaction | `dynamicHOUR` | `{dynamicHOUR}` | `{trackingField9}` | The hour of the click. Banners only. |

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

Each tracking field becomes a column you can group reports by. On banners, `AdZone ID` is the one you will use most: JuicyAds sells banners by zone, so it tells you which placements convert. On popunders, use `Site ID`, because pops are sold by site only. `Campaign Image ID` and `Campaign Image Filename` compare creatives.

On popunder traffic, the five rows marked *Banners only* stay empty. That is expected. `Date of transaction` and `Hour of transaction` duplicate what ClickFlare already records for every visit. You can repurpose those rows if you need the fields for something else.

> [!WARNING]
>
> Don't change or remove the `externalId` row. Without `dynamicS2S={dynamicS2S}` in the campaign URL, ClickFlare has no JuicyAds click ID to send back, and JuicyAds cannot match your conversions.

To pass more JuicyAds data, click **Add Parameter**, give it a name and parameter, and enter the JuicyAds macro as the **TS Token**. ClickFlare assigns the next free tracking field. For popunders, JuicyAds also offers `{dynamicCON}` (connection type, Wifi or carrier), `{dynamicDTY}` (device type) and `{dynamicDOS}` (device OS). They are not in the template.

## Step 2 – Set up the postback

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

The JuicyAds template comes with a postback. When you turn on the postback, the field is already filled in with the banner endpoint:

```text theme={null}
https://ck.juicyads.com/ilikeitjuicy.php?c=REPLACE&s2s={external_id}&amount={payout}&token=REPLACE&data=REPLACE
```

![The Traffic source postback URL switched on, showing the JuicyAds template's postback](https://mintcdn.com/clickflare/0jaeWC_DJvLt2SMH/images/integrations/templates/juicyads/postback.png?fit=max\&auto=format\&n=0jaeWC_DJvLt2SMH\&q=85\&s=3ecf2e15a446f09a3a6381f8ee175612)

`{external_id}` and `{payout}` are ClickFlare tokens and are already in place. Replace the three `REPLACE` values (`c`, `token` and `data`) with the values from your JuicyAds account.

### Get your values from JuicyAds

1. In JuicyAds, open your campaign.
2. Click the **Performance Tracking** tab, then **S2S Postbacks** in the menu.
3. Choose the postback type:

| Postback type | Use it when |
| - | - |
| **Global** | You run several JuicyAds campaigns. JuicyAds matches each conversion to its campaign through the click ID, so one URL serves all of them. Best for one ClickFlare traffic source. |
| **Campaign-specific** | You want this postback to count only for one JuicyAds campaign. |

4. Copy the `c` (campaign) or `u` (user), `token` and, on banners, `data` values from the URL JuicyAds shows. Keep them exactly as JuicyAds gives them.

### Finish the postback in ClickFlare

1. Back in the **New Traffic Source** form, or on the saved JuicyAds traffic source, scroll to **Passing conversion info to traffic source**.
2. Turn on **Traffic source postback URL**. The template's banner postback appears.
3. Replace `c=REPLACE`, `token=REPLACE` and `data=REPLACE` with your values from JuicyAds. Leave `s2s={external_id}` and `amount={payout}` as they are.
4. For popunders, replace the whole URL with the popunder endpoint, which has no `data` parameter, and fill in `c` and `token` the same way:

```text theme={null}
https://xapi.juicyads.com/service_s2s.php?c=REPLACE&s2s={external_id}&amount={payout}&token=REPLACE
```

5. 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.
6. Click **Save**.

> [!WARNING]
>
> If you paste a postback from JuicyAds instead of using the template's, replace JuicyAds' `{dynamicS2S}` and `{Amount}`, braces included. ClickFlare reads anything in braces as a token. It doesn't know these two, so it sends them as literal text, and JuicyAds can't match the conversion. Only `{external_id}` and `{payout}` belong in braces.

JuicyAds stresses one rule: what matters most is that the click ID goes back in `s2s=`. The template already does this, and fills `amount` too. Don't change `c`, `u`, `token` or `data` once they match JuicyAds.

To learn what each postback token does, see [How to Configure a Traffic Source S2S Postback URL](https://clickflare.com/docs/en/tracking/how-to-configure-a-traffic-source-s2s-postback-url.md).

### Tracking pixels

JuicyAds also offers **Tracking Pixels** for banner campaigns, under **Performance Tracking**. A pixel is a 1x1 image you place on your own thank-you page. It only works when you control that page, it only tracks JuicyAds traffic, and it doesn't use ClickFlare's data. With ClickFlare, use the S2S postback.

## 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 bid JuicyAds passes. On CPM banners, read [Cost](#cost) first.
3. Choose **Redirect** or **Direct** tracking. Redirect is the usual choice for banner and 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 already contains every JuicyAds macro from the template, for example `dynamicS2S={dynamicS2S}` and `dynamicZNE={dynamicZNE}`.

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

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

## Step 4 – Create the campaign in JuicyAds

1. In JuicyAds, click **Manage My Ads**.
2. Choose **New Banner Campaign** or **New Popunder Campaign**.
3. Fill in the required fields and paste the ClickFlare campaign URL into the campaign URL field.
4. Click **Get Started**, then complete **Campaign Settings**: bid type, campaign mode and targeting.
5. Request the campaign.

Paste the URL exactly as ClickFlare gives it. JuicyAds replaces each `{dynamic...}` link when the ad is clicked. JuicyAds' own examples join several macros with underscores in one parameter. You don't need to: the template gives each macro its own parameter.

Once the campaign is approved, go back to [Step 2](#step-2-set-up-the-postback) if you haven't added the postback yet.

## Step 5 – Test the integration

JuicyAds has no test-conversion button. It asks you to test the postback before going live, then monitor it.

1. Run a small amount of traffic, or click your own approved ad.
2. Complete the offer the way a real visitor would.
3. In ClickFlare, go to **Logs → Postback Status** and filter by the campaign. A successful request to `juicyads.com` confirms ClickFlare sent the postback, with a real click ID in place of `{external_id}`.
4. In JuicyAds, open the campaign's **S2S Postbacks** page. It lists the raw S2S events JuicyAds received.
5. Once traffic flows, check the campaign's **Traffic Sources** tab, which shows conversions per source, and the **Statistics** page, which adds KPIs and ROI.

***

## Tracking several events

JuicyAds banner postbacks accept a `goal` parameter, so you can track up to three events separately, for example a join-page visit, a free signup and a sale. Without `goal`, every postback counts as goal 1.

```text theme={null}
https://ck.juicyads.com/ilikeitjuicy.php?c=YOUR_C&s2s={external_id}&amount={payout}&goal=1&token=YOUR_TOKEN&data=YOUR_DATA
https://ck.juicyads.com/ilikeitjuicy.php?c=YOUR_C&s2s={external_id}&amount={payout}&goal=2&token=YOUR_TOKEN&data=YOUR_DATA
https://ck.juicyads.com/ilikeitjuicy.php?c=YOUR_C&s2s={external_id}&amount={payout}&goal=3&token=YOUR_TOKEN&data=YOUR_DATA
```

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

> **Rules for multi-goal postbacks**
>
> * Three goals at most: `goal=1`, `goal=2`, `goal=3`.
> * One postback per goal. Don't combine goals in one URL.
> * Events with no money attached, like a join-page visit, can still send `{payout}`. It is `0` when the conversion has no revenue.
> * JuicyAds documents `goal` for banner postbacks. Ask JuicyAds support before relying on it for popunders.

> **Sending only one event**
>
> If JuicyAds should only learn from your final sale, keep a single postback and map it to that event. Earlier steps (leads, installs) still show in ClickFlare. They just don't reach JuicyAds.
>
> JuicyAds itself suggests optimizing on the more frequent event when sales are rare, for example installs rather than sales. If that is your case, map the postback to the earlier event instead.
>
> 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 per click. The `cost` row sends JuicyAds' `{dynamicBID}` macro, the bid at the time of the click or impression, and ClickFlare records it as the visit's cost.

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

> [!NOTE]
>
> JuicyAds' `{dynamicBID}` is a price per click on CPC campaigns (for example `0.01`) and a price per impression on CPM campaigns (for example `0.0001`). On CPC banners and on popunders, where an impression is roughly one visit, it matches your spend. On CPM banners, only a share of impressions become clicks, so ClickFlare records the price of one impression for each visit and the cost comes out too low. For CPM banners, switch the Cost Model to **CPC** and enter your real cost per click, or correct the spend with a manual cost upload.

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

## Delayed revenue

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

***

## Troubleshooting

> **JuicyAds receives no S2S events**
>
> * **Traffic source postback URL** is off.
> * The postback still contains `REPLACE` in `c`, `token` or `data`. Enter your values from **S2S Postbacks**.
> * **Disable sending postbacks to traffic source** is on in the campaign.
> * The postback contains `{dynamicS2S}` or `{Amount}` from a JuicyAds sample. ClickFlare sends them as literal text. Replace them with `{external_id}` and `{payout}`.
> * The `c`, `u`, `token` or `data` values were changed. Copy them from **S2S Postbacks** again.
> * The template's banner postback is used on a popunder campaign. Popunders need the popunder endpoint.
> * Check **Logs → Postback Status**: a failed request shows the status code JuicyAds returned.

> **Conversions show in ClickFlare but not in JuicyAds**
>
> * The campaign URL in JuicyAds is missing `dynamicS2S={dynamicS2S}`, so the visit has no External ID. Copy the URL from ClickFlare again.
> * The postback is mapped to a different event than the one the conversion logged. Check **Logs → Event Logs** to see which event was recorded.
> * The visit came through a lander whose link skips the ClickFlare click URL.

> **JuicyAds shows conversions with no value**
>
> `amount` was removed, fixed to a sample value, or replaced with `{Amount}`. Set it to `amount={payout}`, as in the template.

> **Zone, image or date columns are empty**
>
> On popunders this is expected: JuicyAds only fills `{dynamicZNE}`, `{dynamicIMG}`, `{dynamicIMGNAME}`, `{dynamicDATE}` and `{dynamicHOUR}` on banners. Use `Site ID` for popunders.
>
> On banners, the URL was edited or pasted somewhere JuicyAds doesn't process dynamic links. Paste the campaign URL from ClickFlare unchanged. See [Traffic Source Tokens Arriving Empty](https://clickflare.com/docs/en/troubleshooting/tokens-arriving-empty.md).

> **Numbers differ between JuicyAds and ClickFlare**
>
> Some gap is normal: JuicyAds counts clicks on its side, ClickFlare counts visits that reach the tracker, and reports may use different time zones. For a large gap, check that every JuicyAds campaign uses the ClickFlare campaign URL, and that the lander links through the click URL.

For the general checklist, see [Conversions not showing](https://clickflare.com/docs/en/troubleshooting/conversions-not-showing.md).

***

**FREQUENTLY ASKED QUESTIONS**

> **Q1:** Can I use the same JuicyAds traffic source for all my JuicyAds campaigns?

**A1:** Yes, for one format. Use the **Global** `c`, `token` and `data` values and every banner campaign sends conversions through the template's postback. Create a second traffic source for popunders, because their postback endpoint is different.

> **Q2:** Why does the template's postback say `REPLACE`?

**A2:** JuicyAds' postback contains values unique to your account and campaign (`c` or `u`, `token`, and on banners `data`). The template can't know them, so you replace the three `REPLACE` values with the ones from **Performance Tracking → S2S Postbacks**.

> **Q3:** Why is it called `dynamicS2S` in the campaign URL and `s2s` in the postback?

**A3:** They are two halves of the same value. ClickFlare reads JuicyAds' click ID from its own `dynamicS2S` parameter. JuicyAds expects it back in its own `s2s` parameter. Both names are fixed. Change neither.

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

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

> **Q5:** Can JuicyAds optimize on my conversions?

**A5:** Once S2S events arrive, JuicyAds shows them per source on the campaign's **Traffic Sources** tab, so you can block sources that don't convert. Its Adsistant tools can automate that. Both only work with the postback in place.

## Related

> **[Traffic source postbacks](https://clickflare.com/docs/en/tracking/how-to-configure-a-traffic-source-s2s-postback-url.md)**
>
> Every token you can use in a postback.

> **[Custom conversions](https://clickflare.com/docs/en/settings/custom-conversions.md)**
>
> Split leads and sales into separate events.

> **[Cost models](https://clickflare.com/docs/en/core-platform-concepts/cost-models.md)**
>
> How CPC, CPA and RevShare costs are calculated.

> **[Conversions not showing](https://clickflare.com/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.