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

# Pushground as a Traffic Source

> Track Pushground push, in-page push and pop campaigns in ClickFlare and send conversions with payout back to Pushground by S2S postback.

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

Pushground is a self-serve ad network selling push notification, in-page push and pop traffic, bought on CPC or CPM. This guide sets up Pushground as a traffic source in ClickFlare. It covers passing Pushground's click data into your reports and sending conversions, with payout, back to Pushground so its stats and optimization agree with yours.

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

## At a glance

| | |
| - | - |
| **Ad formats** | Push notifications, in-page push, pops |
| **Click ID macro** | `{click_id}`, required for conversion tracking |
| **Conversion tracking** | S2S postback to `lupush.com/conversion` |
| **Payout passed back** | Yes, in the `amount` parameter |
| **Multiple events** | Not documented by Pushground. Send one conversion event. |
| **Cost** | Passed per click by the template, as your CPC bid (`{bid}`). Cost Model: **Not Tracked**. |
| **Conversion API** | No. Pushground also offers a browser pixel, covered below. |

## How it works

**1. Pushground sends the click**

A visitor clicks your ad. Pushground opens your ClickFlare campaign URL and fills in its macros: the click ID in `click_id`, your bid in `bid`, plus the source, site, campaign, creative, country, city and other details.

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

ClickFlare saves the value of `click_id` 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 Pushground**

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

> [!NOTE]
>
> The mirror to keep straight: in the **campaign URL** you write *ClickFlare's* parameter (`click_id`) and *Pushground's* macro (`{click_id}`). The template does this for you. In the **postback URL** you write *Pushground's* parameter (`click_id`) and *ClickFlare's* token (`{external_id}`). The parameter name is the same on both sides. The values in braces are not: Pushground fills in `{click_id}` on the click, ClickFlare fills in `{external_id}` on the conversion.

## 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).
* **Decide how you will buy.** The template's cost row reads Pushground's CPC bid. If you plan to buy on CPM, read [Cost](#cost) before you launch.
* **Decide which conversion Pushground should receive.** Pushground optimizes on what you send it. If your funnel has several steps (lead, then sale), pick the one that matters. See [Choosing the event to send](#choosing-the-event-to-send).

***

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

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

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

| Name | TS Parameter | TS Token (Pushground macro) | ClickFlare Token | What it carries |
| - | - | - | - | - |
| cost | `bid` | `{bid}` | `{cost}` | Your CPC bid for the click. See [Cost](#cost). |
| externalId | `click_id` | `{click_id}` | `{external_id}` | Pushground's click ID. Required for the postback. |
| source | `source` | `{source}` | `{trackingField1}` | The traffic sub-source. Pushground describes it as sub-source 3. |
| campaign ID | `camp_id` | `{campaign_id}` | `{trackingField2}` | Your Pushground campaign ID |
| creativity ID | `creativity_id` | `{creativity_id}` | `{trackingField3}` | The creative that was shown |
| country | `country` | `{country}` | `{trackingField4}` | The visitor's country |
| city | `city` | `{city}` | `{trackingField5}` | The visitor's city |
| language | `language` | `{language}` | `{trackingField6}` | The browser language |
| device name | `device_name` | `{deviceName}` | `{trackingField7}` | The visitor's device |
| site ID | `site_id` | `{site_id}` | `{trackingField8}` | The site the ad ran on. Pushground describes it as sub-source 2. |
| user age | `user_age` | `{userAge}` | `{trackingField9}` | Not the visitor's age. Pushground's `{userAge}` is the user's freshness: how recently the push subscriber was acquired. |

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

Each tracking field becomes a column you can group reports by. `site_id` and `source` are the ones you will use most: they tell you which placements convert, so you can blacklist or bid up sources in Pushground. `user age` is worth watching on push traffic: fresh subscribers usually click and convert differently from old ones.

Note that the campaign ID row uses `camp_id` as the parameter name in the URL and Pushground's `{campaign_id}` as the macro. That is fine. The parameter name only has to match between the campaign URL and the traffic source, and the template sets both.

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

### Adding more Pushground macros

Pushground offers more macros than the template uses. Useful ones to add with **Add Parameter**:

| Name | TS Parameter | TS Token | What it carries |
| - | - | - | - |
| supply ID | `supply_id` | `{supply_id}` | The publisher ID |
| format | `format` | `{format}` | The campaign format |
| traffic type | `traffic_type` | `{trafficType}` | Mainstream or adult |
| reach | `reach` | `{reach}` | The audience retargeting reach |

Click **Add Parameter**, give the row a name and parameter, and enter the Pushground macro as the **TS Token**. ClickFlare assigns the next free tracking field. Type the macros exactly as shown. `{deviceName}`, `{userAge}` and `{trafficType}` have a capital letter in the middle.

## Step 2 – Set up the postback

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

### Pushground's postback format

Pushground documents a single server-to-server postback:

```text theme={null}
https://lupush.com/conversion?click_id={your_external_id_parameter}&amount={payout}
```

* `click_id` is the click ID Pushground sent in your campaign URL, passed back unchanged.
* `amount` is the payout of the conversion.

Pushground's own instructions for trackers say the same thing: copy the **Conversion Tracking Postback** link, paste it into the tracker's S2S field, and replace the placeholders with the tracker's click ID and payout tokens. In ClickFlare, those tokens are `{external_id}` and `{payout}`, and the template has already done it.

### 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://lupush.com/conversion?click_id={external_id}&amount={payout}
```

It already sends the click ID (`{external_id}`) and the payout (`{payout}`), both as ClickFlare tokens. There are no placeholders to replace and no account ID to fill in. Pushground identifies the conversion from the click ID alone.

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 Pushground traffic source selected.

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

> [!WARNING]
>
> Keep `{external_id}` in the postback. If you replace it with Pushground's `{click_id}` or with `{cf_click_id}`, Pushground receives a value it never issued and cannot match the conversion.

Pushground reads `amount` as the payout of the conversion. If your offers pay in a currency other than your Pushground account's, convert the payout before it reaches Pushground. See [Multicurrency in ClickFlare](https://clickflare.com/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](https://clickflare.com/docs/en/tracking/how-to-configure-a-traffic-source-s2s-postback-url.md).

### How Pushground answers postbacks

Pushground returns `200 OK` to every postback it receives, even when it cannot process it. A 200 in **Logs → Postback Status** therefore means the request reached Pushground. It does not prove Pushground matched the click. Check the conversion in Pushground's stats as well. Only a 4xx or 5xx response points to a request that never got through.

## 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 Pushground passes. See [Cost](#cost).
3. Choose **Redirect** or **Direct** tracking. Redirect is the usual choice for push and pop 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 Pushground macro from the template, for example `click_id={click_id}`, `bid={bid}` 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 Pushground.

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 Pushground

1. In Pushground, start a new campaign from **Create Campaign**.
2. Choose the format (push, in-page push or pop), targeting and bid as usual.
3. Paste the ClickFlare campaign URL into the campaign's tracking URL field.
4. Check the S2S postback shown on the campaign screen. Pushground recommends confirming that the postback domain and link match what your tracker sends. Here that is `https://lupush.com/conversion` with `click_id` and `amount`.
5. Launch the campaign.

Paste the URL exactly as ClickFlare gives it. Pushground replaces each macro in braces when the ad is clicked.

## Step 5 – Test the integration

Pushground does not document a built-in test conversion tool, so test with a real click.

1. Open the ClickFlare campaign URL in a browser, replacing `{click_id}` with a test value, for example `click_id=test123`.
2. In ClickFlare, open the campaign's report and check that the visit shows `test123` as its External ID.
3. Complete the offer, or post a test conversion to ClickFlare for that click.
4. Go to **Logs → Postback Status** and filter by the campaign. You should see a request to `lupush.com/conversion?click_id=test123&amount=...`.

A fake click ID like `test123` proves ClickFlare builds and sends the postback correctly. It won't show in Pushground's stats, because Pushground never issued it. Once the campaign gets real clicks, the first real conversion should appear in Pushground within minutes.

### Pushground's pixel

Pushground also offers a browser pixel for landing pages. You place it in the `<head>` of your lander and pass `{click_id}` to the page. It tracks events such as `view_content`, which Pushground says should fire on at least 70% of clicks. The pixel is separate from the S2S postback. Use the postback for conversions, because it fires from ClickFlare's server and does not depend on the visitor's browser.

***

## Choosing the event to send

Pushground's postback has no event or goal parameter. Every postback it receives counts as a conversion. If your funnel has several steps, send Pushground only the one it should optimize on.

1. In ClickFlare, create a [custom conversion](https://clickflare.com/docs/en/settings/custom-conversions.md) for each step, for example `lead` and `purchase`.
2. On the Pushground traffic source, map the postback to the step Pushground should learn from, for example `purchase`.

Earlier steps still show in ClickFlare. They just don't reach Pushground.

> **Sending more than one event**
>
> You can click **+ Another postback URL** and map a second ClickFlare event to the same Pushground postback. Pushground then counts both as conversions, and adds both payouts. Its conversion rate and ROI stop meaning one thing. Do this only if you want Pushground to treat every step as a conversion.

> **Filtering which conversions are sent**
>
> 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 Pushground's `{bid}` macro in the `bid` parameter, 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]
>
> Pushground describes `{bid}` as the bid for the CPC price model. It is your bid, so if Pushground charges less than your bid for some clicks, ClickFlare's cost is slightly higher than your real spend. Compare the **Cost** column with your Pushground spend after the first day.

On CPM campaigns, `{bid}` is not the price of the click. Pushground's CPM macro, `{bidcpm}`, is a price per thousand impressions, so it can't be used as a cost per visit either. For CPM buying, set the Cost Model to **CPC** and enter your CPM bid divided by 1,000 as the cost value. A pop impression is roughly one visit. For push and in-page push, divide your spend by clicks in Pushground to get a better figure.

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

> **Conversions show in ClickFlare but not in Pushground**
>
> * **Traffic source postback URL** is off on the Pushground 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 visit has no External ID, so `click_id` went out empty. Check that the campaign URL in Pushground contains `click_id={click_id}`.
> * Remember that Pushground answers 200 to every postback. A 200 in **Logs → Postback Status** does not mean the click was matched.

> **The postback sends the wrong click ID**
>
> * The postback uses Pushground's `{click_id}` instead of ClickFlare's `{external_id}`. ClickFlare doesn't fill `{click_id}` with the Pushground click ID.
> * The `externalId` row was edited or removed from the traffic source.

> **Pushground shows conversions with no payout**
>
> The template sends `amount={payout}`, so it was removed or edited. Restore `&amount={payout}` at the end of the postback.
>
> Also check that your affiliate network sends the payout to ClickFlare. If ClickFlare records the conversion with zero revenue, it sends zero to Pushground.

> **Cost is zero or doesn't match Pushground**
>
> * The campaign's Cost Model is not **Not Tracked**, so ClickFlare ignores the `bid` value.
> * The campaign is on CPM, where `{bid}` is not the click price. See [Cost](#cost).

> **Site, source or other columns are empty**
>
> The macros were not replaced, usually because the URL was pasted somewhere Pushground doesn't process macros, or a macro was edited. Paste the campaign URL from ClickFlare unchanged. See [Traffic Source Tokens Arriving Empty](https://clickflare.com/docs/en/troubleshooting/tokens-arriving-empty.md).

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 Pushground traffic source for all my Pushground campaigns?

**A1:** Yes. The postback is set once on the traffic source and every campaign using it sends conversions the same way. Create a second Pushground traffic source only if a campaign needs a different postback, for example a different event.

> **Q2:** Why is it `click_id` in both the campaign URL and the postback?

**A2:** Pushground uses the same parameter name in both directions. In the campaign URL, `click_id` is the parameter ClickFlare reads and `{click_id}` is Pushground's macro. In the postback, `click_id` is the parameter Pushground reads and `{external_id}` is ClickFlare's token. Change neither.

> **Q3:** Do I need my Pushground account ID or a password in the postback?

**A3:** No. Pushground matches the conversion on the click ID alone. The template's postback works as it is.

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

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

> **Q5:** What does the "user age" column show?

**A5:** The freshness of the push subscriber, not the visitor's age. Use it to compare new and old subscribers and bid on the segments that convert.

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