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

# TrafficShop Conversion Tracking & Postback Setup

> Set up TrafficShop conversion tracking in ClickFlare: the {s2s_token} click ID, the track_id goal postback with ts_subid and atpay, and CPC/CPM cost.

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

TrafficShop is a long-running self-serve ad network, best known for adult and mainstream popunder traffic. It also sells skimmed traffic, display banners and native ads, on desktop and mobile, on CPC and CPM. This guide sets up TrafficShop as a traffic source in ClickFlare. It covers passing TrafficShop's click data into your reports and sending conversions, with payout, back to TrafficShop so its campaign stats and your stats agree.

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

## At a glance

| | |
| - | - |
| **Ad formats** | Popunders, mobile popunders, skimmed traffic, display banners, native ads |
| **Click ID macro** | `{s2s_token}`, mandatory for conversion tracking |
| **Conversion tracking** | S2S postback to `ad.trafficshop.com`, one `track_id` per conversion goal |
| **Payout passed back** | Yes, in the `atpay` parameter |
| **Multiple events** | Yes, one goal and one postback per event |
| **Cost** | Not passed. TrafficShop has no cost macro. Cost Model: **CPC**. See [Cost](#cost). |
| **Conversion API** | No |

## How it works

**1. TrafficShop sends the click**

A visitor clicks your ad, or a popunder opens. TrafficShop opens your ClickFlare campaign URL and fills in its macros: a unique tracking value in `externalid`, plus the campaign ID, order ID, publisher site ID, domain and country.

**2. ClickFlare stores the TrafficShop tracking value**

ClickFlare saves the value of `externalid` 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 TrafficShop**

ClickFlare fires the TrafficShop postback, replacing `{external_id}` with the stored tracking value and `{payout}` with the revenue. TrafficShop matches the value it receives in `ts_subid` to the original click and records the conversion under the goal in `track_id`.

> [!NOTE]
>
> The mirror to keep straight: in the **campaign URL** you write *ClickFlare's* parameter (`externalid`) and *TrafficShop's* macro (`{s2s_token}`). The template does this for you. In the **postback URL** you write *TrafficShop's* parameter (`ts_subid`) and *ClickFlare's* token (`{external_id}`). TrafficShop's macros use curly braces like ClickFlare's tokens, so check which side of the mirror you are on.

## 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).
* **Create a conversion goal in TrafficShop.** Its ID is the `track_id` in the postback. Step 2 shows how.
* **Know your bid.** TrafficShop passes no cost, so ClickFlare calculates it from the cost model and your bid. See [Cost](#cost).

***

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

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

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

| Name | TS Parameter | TS Token (TrafficShop macro) | ClickFlare Token | What it carries |
| - | - | - | - | - |
| External ID | `externalid` | `{s2s_token}` | `{external_id}` | TrafficShop's unique tracking value for the click. Required for the postback. |
| Cost | (empty) | (empty) | `{cost}` | Nothing. TrafficShop has no cost macro. See [Cost](#cost). |
| Campaign ID | `campaign_id` | `{campaign_id}` | `{trackingField1}` | Your TrafficShop campaign ID, a number without prefix |
| Order ID | `order_id` | `{order_id}` | `{trackingField2}` | TrafficShop's order ID, for example `SK_17448` |
| Site ID | `site_id` | `{site_id}` | `{trackingField3}` | The numeric ID of the publisher site |
| Site | `site` | `{site}` | `{trackingField4}` | The publisher site's domain |
| Domain | `domain` | `{domain}` | `{trackingField5}` | The source domain. TrafficShop documents it as the same value as **Site**. |
| Country | `country` | `{country}` | `{trackingField6}` | The visitor's two-letter country code |

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

Each tracking field becomes a column you can group reports by. **Site ID** is the one you will use most: TrafficShop's own reports break conversions down by Site\_ID, so a site you find in ClickFlare is easy to block or bid up in TrafficShop.

> [!WARNING]
>
> Don't change or remove the **External ID** row. TrafficShop only fills `{s2s_token}` when it is in the URL, and without it ClickFlare has nothing to send back in `ts_subid`. TrafficShop's own example uses this same parameter name, `externalid`.

**Site** and **Domain** carry the same value, according to TrafficShop's macro list. You can keep both or remove one.

To pass more TrafficShop data, click **Add Parameter**, give it a name and parameter, and enter the TrafficShop macro as the **TS Token**. ClickFlare assigns the next free tracking field. TrafficShop also offers `{timestamp}`, the click time in Unix format.

## Step 2 – Set up the postback

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

### Create a goal in TrafficShop and get its tracking code

1. In TrafficShop, open **Manage Conversion Tracking** (the S2S management page) and click **Create Conversion**.
2. Fill in the form:
   * **Action Name**: what the visitor does, for example `sale` or `registration`. Required.
   * **Tracking Purpose**: the type of conversion, for example **PURCHASE/SALE** or a lead.
   * **Profit Per Conversion**: optional, a fixed payout in US dollars for the goal.
3. Click **Create**. The goal appears in the list with its ID in the first column, for example `1`.
4. Click **Get Tracking Code** next to the goal.
5. In **Choose your tracking system**, keep **CUSTOM**. ClickFlare is not in TrafficShop's presets. TrafficShop shows a URL like this:

```text theme={null}
https://ad.trafficshop.com/track.php?track_id=1&ts_subid={clickid}&atpay={payout}
```

6. Note the `track_id` value. It is the goal's ID.

### 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://ad.trafficshop.com/track.php?track_id=REPLACE_WITH_TRACK_ID&ts_subid={external_id}&atpay={payout}
```

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

It already sends the tracking value (`{external_id}`) in `ts_subid` and the payout (`{payout}`) in `atpay`, both as ClickFlare tokens. Apart from the click ID token (TrafficShop's `{clickid}` placeholder, ClickFlare's `{external_id}`), it matches TrafficShop's **CUSTOM** URL.

3. Replace `REPLACE_WITH_TRACK_ID` with your goal's ID. The result:

```text theme={null}
https://ad.trafficshop.com/track.php?track_id=1&ts_subid={external_id}&atpay={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 TrafficShop traffic source selected.

> [!WARNING]
>
> Replace `REPLACE_WITH_TRACK_ID` with the ID of the goal you created, exactly as it appears in the tracking code. If the placeholder stays in the postback, TrafficShop cannot assign the conversion to a goal.

Don't paste TrafficShop's URL as it is. `{clickid}` is not a ClickFlare token, so ClickFlare would send it as literal text.

`atpay` reads the payout in US dollars. If your offers pay in another currency, 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** to **CPC** and enter your cost per visit. TrafficShop passes no cost. See [Cost](#cost).
3. Choose **Redirect** or **Direct** tracking. Redirect is the usual choice for TrafficShop's popunder and skimmed 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 TrafficShop macro from the template, for example `externalid={s2s_token}` and `site_id={site_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 TrafficShop.

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

## Step 4 – Create the campaign in TrafficShop

1. In TrafficShop, select the **Advertiser** role, go to **Campaigns** and click **Create new**.
2. Select the campaign type, for example **Pop under** or **Mobile pop under**.
3. Enter a **Campaign name**. Under **Landing page**, choose **Add new landing page** and paste the ClickFlare campaign URL into the **URL** field.
4. Set quality, frequency, content type and the rest of the targeting as usual, then create the campaign.
5. Wait for approval. TrafficShop's monitoring team reviews every campaign by hand, which can take up to 2 hours on business days.

Paste the URL exactly as ClickFlare gives it. TrafficShop replaces each `{...}` macro with real values when the ad is clicked.

Campaigns don't start on their own after you top up. Click **Resume** in **Manage campaigns** to launch.

## Step 5 – Test the integration

TrafficShop can check your URL before you spend anything.

1. Open TrafficShop's **Check URL** tool, paste your ClickFlare campaign URL and check it. A correct URL is reported as *ready for tracking*. If it isn't, check that `externalid={s2s_token}` is in the URL.
2. Once the campaign runs, check the first visits in ClickFlare. The **Site ID** column should show numbers, not the text `{site_id}`.
3. Complete a test conversion on your offer, or post one to ClickFlare from your affiliate network.
4. In ClickFlare, go to **Logs → Postback Status** and filter by the campaign. A successful request to `ad.trafficshop.com` confirms ClickFlare sent the postback.
5. In TrafficShop, go to **Reports → Campaign stats**, click **Manage Columns** and add your goal. The conversion appears in its column.

***

## Tracking several events

TrafficShop tracks each conversion type as its own goal, with its own ID. To send a registration and a sale, create two goals and use one postback per goal:

```text theme={null}
https://ad.trafficshop.com/track.php?track_id=1&ts_subid={external_id}&atpay={payout}
https://ad.trafficshop.com/track.php?track_id=2&ts_subid={external_id}&atpay={payout}
```

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

> **Rules for multi-event postbacks**
>
> * One goal per event in TrafficShop, one postback per goal in ClickFlare.
> * The `track_id` is what tells TrafficShop which goal it is. There is no event parameter.
> * In **Reports → Campaign stats**, use **Manage Columns** to show each goal. Click **+** next to a campaign to see which Site\_IDs and domains bring conversions.

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

TrafficShop has no cost macro, so the template's **Cost** row is empty and the campaign URL carries no cost. ClickFlare calculates the cost from the campaign's cost model instead.

* **CPC campaigns** (you pay per click on a banner or native ad): set the Cost Model to **CPC** and enter your CPC bid.
* **CPM campaigns** (you pay per 1,000 impressions, as on popunders): set the Cost Model to **CPC** and enter your CPM bid divided by 1,000. A popunder impression is roughly one visit, so this comes close.
* **Flat-rate campaigns** set up by your account manager: track them on **CPC** with an estimate, then correct the total with a manual cost upload.

> [!NOTE]
>
> These costs are estimates. TrafficShop's prices move with competing bids, and a CPM bid divided by 1,000 is only exact when every impression becomes one visit. Compare ClickFlare's **Cost** column with your TrafficShop spend regularly.

When the recorded spend differs from your TrafficShop 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) and [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 TrafficShop, the feed reports revenue hours or days after the click. To pass that revenue to TrafficShop 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

> **TrafficShop doesn't record the conversion**
>
> * The campaign URL in TrafficShop is missing `externalid={s2s_token}`, or the macro was edited. Copy the URL from ClickFlare again.
> * `REPLACE_WITH_TRACK_ID` was never replaced with your goal's ID.
> * The postback uses TrafficShop's `{clickid}` instead of ClickFlare's `{external_id}`.
> * The goal was deleted in **Manage Conversion Tracking**, so its `track_id` no longer exists.

> **Conversions show in ClickFlare but not in TrafficShop**
>
> * **Traffic source postback URL** is off on the TrafficShop 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.
> * The goal's column is not shown in **Campaign stats**. Add it with **Manage Columns**.
> * Check **Logs → Postback Status**: a failed request shows the status code TrafficShop returned.

> **Cost is zero or doesn't match TrafficShop**
>
> TrafficShop passes no cost. With **Not Tracked**, ClickFlare records zero. Set the Cost Model to **CPC** with your bid, and correct differences with a manual cost upload. See [Cost](#cost).

> **Site or domain columns are empty**
>
> The macros were not replaced, usually because the URL was edited or pasted somewhere TrafficShop 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 TrafficShop traffic source for all my TrafficShop campaigns?

**A1:** Yes. The postback is set once on the traffic source and every campaign using it sends conversions the same way. A goal belongs to your account, not to one campaign, so one `track_id` serves every campaign.

> **Q2:** Why is it `externalid` in the campaign URL and `ts_subid` in the postback?

**A2:** They are two halves of the same value. ClickFlare reads TrafficShop's tracking value from its own `externalid` parameter. TrafficShop expects it back in its own `ts_subid` parameter. Change neither.

> **Q3:** TrafficShop lists Voluum, Cake, HasOffers and PeerClick, but not ClickFlare. Is that a problem?

**A3:** No. Keep **CUSTOM**. The presets only pre-fill the click ID token for that tracker. The ClickFlare template already has `{external_id}` in its place.

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

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

> **Q5:** Should I fill in Profit Per Conversion on the goal?

**A5:** It's optional. The template already sends the real payout in `atpay`, so TrafficShop shows your revenue in its stats. A fixed value on the goal only helps if you don't send `atpay`.

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