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

# Zeropark as a Traffic Source

> Track Zeropark popunder and domain redirect campaigns in ClickFlare: pass cid and visit cost, and post conversions with payout back to Zeropark.

![Zeropark traffic source template](https://mintcdn.com/clickflare/Z7FseNUODe2P_cAH/images/integrations/covers/templates/zeropark.png?fit=max\&auto=format\&n=Z7FseNUODe2P_cAH\&q=85\&s=5cc4f6409af4e179d7b859984a1472fc)

Zeropark is a self-serve ad platform best known for popunder and domain redirect traffic, bought per visit. This guide sets up Zeropark as a traffic source in ClickFlare. It covers passing Zeropark's visit data into your reports and sending conversions, with payout, back to Zeropark so its stats and optimization match yours.

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

## At a glance

| | |
| - | - |
| **Ad formats** | Popunder, domain redirect and other Zeropark traffic types |
| **Click ID macro** | `{cid}`, mandatory for conversion tracking |
| **Conversion tracking** | S2S postback to `zp-postback.com` |
| **Payout passed back** | Yes, in the `payout` parameter |
| **Account ID in the postback** | Yes. Replace `REPLACE_ACCOUNT_ID` with your Zeropark account ID. |
| **Multiple events** | No event parameter. Send the one event Zeropark should optimize on. |
| **Cost** | Passed per visit by the template, as Zeropark's cost of the visit (`{visit_cost}`). Cost Model: **Not Tracked**. |
| **Conversion API** | No |

## How it works

**1. Zeropark sends the visit**

A visitor lands on your ad. Zeropark opens your ClickFlare campaign URL and fills in its tokens: the click ID in `cid`, the cost of the visit in `visit_cost`, plus the target, source, campaign and other details.

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

ClickFlare saves the value of `cid` 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 Zeropark**

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

> [!NOTE]
>
> The mirror to keep straight: in the **campaign URL** you write *ClickFlare's* parameter (`cid`) and *Zeropark's* token (`{cid}`). The template does this for you. In the **postback URL** you write *Zeropark's* parameter (`cid`) and *ClickFlare's* token (`{external_id}`). Both sides happen to use the name `cid`, but the value in braces is different on each side.

## 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 Zeropark account ID.** It goes into the postback URL. You get it from the postback Zeropark shows when you choose **Other** as the tracker. See [Get your account ID from Zeropark](#get-your-account-id-from-zeropark).
* **Decide how Zeropark should value conversions.** Send the payout from ClickFlare, or set a manual conversion payout in Zeropark. The template sends the payout.

***

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

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

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

| Name | TS Parameter | TS Token (Zeropark token) | ClickFlare Token | What it carries |
| - | - | - | - | - |
| Cost | `visit_cost` | `{visit_cost}` | `{cost}` | Zeropark's cost of the visit. See [Cost](#cost). |
| External ID | `cid` | `{cid}` | `{external_id}` | Zeropark's click ID. Required for the postback. |
| Target | `target` | `{target}` | `{trackingField1}` | The target ID, a sub-placement inside a source |
| Source | `source` | `{source}` | `{trackingField2}` | The source ID, a larger traffic source made of many targets |
| keyword | `keyword` | `{keyword}` | `{trackingField3}` | The keywords attached to the visitor |
| Traffic Type | `traffic_type` | `{traffic_type}` | `{trackingField4}` | `POPUP` or `DOMAIN` |
| Keyword Match | `keyword_match` | `{keyword_match}` | `{trackingField5}` | The keyword match type, broad or exact |
| Visitor Type | `visitor_type` | `{visitor_type}` | `{trackingField6}` | `ADULT` or `NON-ADULT` |
| Target Url | `target_url` | `{target_url}` | `{trackingField7}` | The target's URL. Popunder traffic only. |
| Campaign Id | `campaign_id` | `{campaign_id}` | `{trackingField8}` | Zeropark's numeric campaign ID |
| Campaign Name | `campaign_name` | `{campaign_name}` | `{trackingField9}` | Zeropark's campaign name |
| Creative\_number | `creative_number` | `{creative_number}` | `{trackingField10}` | The number of the creative |

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

Each tracking field becomes a column you can group reports by. `target` and `source` are the ones you will use most. They tell you which placements convert, so you can blacklist targets or raise bids on them in Zeropark. `keyword` and `keyword_match` only carry values on keyword-targeted traffic, and `target_url` only on popunder traffic. Expect them to be empty elsewhere.

> [!WARNING]
>
> Don't change or remove the `External ID` row. Without `cid={cid}` in the campaign URL, Zeropark has no click ID to receive back, and no conversion reaches Zeropark.

To pass more Zeropark data, click **Add Parameter**, give it a name and parameter, and enter the Zeropark token as the **TS Token**. ClickFlare assigns the next free tracking field. Zeropark also offers `{geo}`, `{city}`, `{region}`, `{os}`, `{browser}`, `{carrier}`, `{device_id}` (in-app) and `{long_campaign_id}`. Check Zeropark's Tracking Tokens list before adding one.

## Step 2 – Set up the postback

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

### Get your account ID from Zeropark

Zeropark builds the postback in the **Tracking** section, the last section of its campaign creation form. ClickFlare is not in Zeropark's list of integrated trackers, so you use **Other** to see your postback URL and take the account ID from it.

1. In Zeropark, start creating a campaign (or open an existing one) and scroll to the **Tracking** section.
2. Choose **Other** as the tracker. Zeropark shows a postback URL in this form:

```text theme={null}
http://zp-postback.com/zppostback/YOUR_ACCOUNT_ID?cid=
```

3. Copy only the last part of the path, after `/zppostback/` and before `?`. That is your Zeropark account ID. It is unique to your account and the same for all your campaigns.

You don't paste Zeropark's URL into ClickFlare. The template already has the right format. You only need the 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://zp-postback.com/zppostback/REPLACE_ACCOUNT_ID?cid={external_id}&payout={payout}
```

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

It already sends the click ID (`{external_id}`) and the payout (`{payout}`), both as ClickFlare tokens.

3. Replace `REPLACE_ACCOUNT_ID` with your Zeropark account ID. Keep everything else. The result:

```text theme={null}
https://zp-postback.com/zppostback/YOUR_ACCOUNT_ID?cid={external_id}&payout={payout}
```

4. In the dropdown on the left, choose the ClickFlare event that should fire the postback. The dropdown lists the Default Events (**Conversions**, **Clicks**, **Visits**) and your Custom Conversions. 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 Zeropark traffic source selected.

> [!WARNING]
>
> Replace `REPLACE_ACCOUNT_ID` with your Zeropark account ID. If the placeholder stays in the postback, Zeropark cannot tie the conversions to your account and none of them show in Zeropark.

The `payout` parameter is optional on Zeropark's side. If you set a manual conversion payout in the Zeropark campaign, Zeropark doesn't need it. Keep it anyway unless you have a reason to remove it: it lets Zeropark show real revenue and ROI per target.

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 Zeropark passes. See [Cost](#cost).
3. Choose **Redirect** or **Direct** tracking. Redirect is the usual choice for Zeropark's popunder and domain redirect 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 Zeropark token from the template, for example `cid={cid}`, `visit_cost={visit_cost}` and `target={target}`. Zeropark requires a `?` before the first parameter. ClickFlare's campaign URL already has it.

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

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

## Step 4 – Create the campaign in Zeropark

1. In Zeropark, create a new campaign and choose the traffic type.
2. Set the targeting and bid as usual.
3. Paste the ClickFlare campaign URL into the campaign's destination URL field. Zeropark confirms that the `{cid}` token is present.
4. In the **Tracking** section, leave the tracker on **Other**. The postback is already set on the ClickFlare side.
5. Submit the campaign.

Paste the URL exactly as ClickFlare gives it. Zeropark replaces each `{...}` token when it sends the visit. Zeropark tokens are written in single braces, the same style as ClickFlare's, so don't "fix" them.

## Step 5 – Test the integration

Zeropark gives each campaign a test link. A test visit doesn't cost anything.

1. Match the campaign's targeting: country (use a VPN if needed), device and OS, connection type, and the time of day if you use day-parting.
2. In Zeropark, open the campaign's details view and copy the **test link**.
3. Open the test link in a new browser tab. You should land on your lander or offer through ClickFlare.
4. Complete the offer the way a real visitor would.
5. Check Zeropark: the redirects count should go up by one, and the conversion count by one once the postback arrives.
6. In ClickFlare, open the visit in your reports and check that the tracking fields are filled, not empty or showing `{target}` as text.
7. Go to **Logs → Postback Status** and filter by the campaign. A successful postback to `zp-postback.com` confirms ClickFlare sent it.

If the visit shows in ClickFlare but no conversion appears in Zeropark, check the postback first. See [Troubleshooting](#troubleshooting).

***

## Tracking several events

Zeropark's postback has no event or goal parameter. Each postback it receives counts as one conversion. If your funnel has several steps (lead, then sale), choose the one Zeropark should optimize on and send only that.

1. In ClickFlare, create a [custom conversion](/docs/en/settings/custom-conversions.md) for each step, for example `lead` and `purchase`.
2. On the Zeropark traffic source, map the postback to the event Zeropark should learn from, for example `purchase`.
3. Leave the other steps without a postback. They still show in ClickFlare's reports.

> **Sending more than one event**
>
> You can click **+ Another postback URL** and map a second event to the same Zeropark URL. Zeropark will count both as conversions, so its conversion count and CPA will mix the two steps. Only do this if that is what you want Zeropark to optimize on.

> **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 cost per visit. The `Cost` row sends Zeropark's `{visit_cost}` token, which is the cost of the visit, 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]
>
> Zeropark sells popunder and domain redirect traffic per visit, so `{visit_cost}` should match your Zeropark spend closely. After launch, compare ClickFlare's **Cost** column with Zeropark's spend for the same period. If it doesn't match, switch the Cost Model to **CPC** and enter your bid per visit as the cost value. If you buy on a CPM basis, enter the CPM bid divided by 1,000.

When the recorded spend differs from your Zeropark spend, correct it with a [manual cost upload](/docs/en/settings/manual-cost-upload.md). Make sure the time zone of the report matches your Zeropark account. See [Cost Models](/docs/en/core-platform-concepts/cost-models.md).

ClickFlare has no cost-tracking API integration for Zeropark. The cost in the URL is the source of truth.

## Delayed revenue

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

> **Visits arrive but Zeropark shows no conversions**
>
> * `REPLACE_ACCOUNT_ID` is still in the postback. Replace it with your Zeropark account ID.
> * The account ID was copied with extra characters, such as `?cid=` from the end of Zeropark's URL. The ID is only the path segment after `/zppostback/`.
> * The campaign URL in Zeropark is missing `cid={cid}`, or the token was edited. Copy the URL from ClickFlare again.
> * The `External ID` row was removed from the traffic source.

> **Conversions show in ClickFlare but not in Zeropark**
>
> * **Traffic source postback URL** is off on the Zeropark 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 Zeropark returned.

> **Zeropark shows conversions with no revenue**
>
> The template sends `payout={payout}`, so it was removed or edited. Restore `&payout={payout}` at the end of the postback.
>
> If the offer's conversions arrive in ClickFlare without a payout, `{payout}` is empty too. Fix the payout in the affiliate network's postback to ClickFlare, or set a payout on the offer.

> **Target or source columns are empty**
>
> The tokens were not replaced, usually because the URL was edited or pasted somewhere Zeropark doesn't process tokens. Paste the campaign URL from ClickFlare unchanged. `keyword`, `keyword_match` and `target_url` are empty on traffic where Zeropark has no value for them, which is normal. 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 Zeropark traffic source for all my Zeropark campaigns?

**A1:** Yes. The account ID is the same for all your Zeropark campaigns, so one traffic source with one postback covers them all. Create a second Zeropark traffic source only if a campaign needs a different postback, for example a different event.

> **Q2:** Zeropark lists other trackers but not ClickFlare. Is that a problem?

**A2:** No. Choose **Other**. The built-in options only fill in the click ID token for that tracker. With ClickFlare, the template already has the right token (`{external_id}`). You only need the account ID from Zeropark's URL.

> **Q3:** Why is it `cid` in both the campaign URL and the postback?

**A3:** Zeropark uses `cid` as its parameter name on both sides. In the campaign URL, Zeropark fills `{cid}` with the click ID. In the postback, ClickFlare fills `{external_id}` with that same stored value. Keep both exactly as the template sets them.

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

**A4:** Redirect is the usual choice and works with every Zeropark traffic type. Use Direct only if Zeropark 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 payout in the postback if I set a manual payout in Zeropark?

**A5:** No. Zeropark treats `payout` as optional when the campaign has a manual conversion payout. The template sends it anyway, and Zeropark then reports the real revenue per conversion.

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