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

# Push.House as a Traffic Source

> Track Push.House push, in-page and OnClick campaigns in ClickFlare: add the click ID, pass cost and post conversions back to Push.House.

![Push.House traffic source template](https://mintcdn.com/clickflare/j4F_mr_BIrMz-iaH/images/integrations/covers/templates/push-house.png?fit=max\&auto=format\&n=j4F_mr_BIrMz-iaH\&q=85\&s=3996301bce0c8a8e1386408be2aee84c)

Push.House is a self-serve push advertising network. It sells web push, in-page push and OnClick (popunder) traffic in 200+ countries, on CPC or CPA Goal. This guide sets up Push.House as a traffic source in ClickFlare. It covers passing Push.House's click data into your reports and sending conversions, with payout, back to Push.House so its CPA Goal optimization and your stats agree.

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

> [!WARNING]
>
> The Push.House template is incomplete today. Its click ID row is empty and it has no postback URL. Without both, Push.House never receives conversions. Step 1 and Step 2 show you how to fill them in. It takes two minutes.

## At a glance

| | |
| - | - |
| **Ad formats** | Web push, in-page push, OnClick (popunder, clickunder) |
| **Click ID macro** | `{click_id}`. Not in the template: you add it. |
| **Conversion tracking** | S2S postback to `api.push.house`, generated in the Push.House **Tracking** section. Not in the template: you add it. |
| **Payout passed back** | Yes, in the `cost` parameter of the postback |
| **Multiple events** | Not documented. Send one event. |
| **Cost** | Passed per click by the template, as Push.House's click price (`{price}`). Cost Model: **Not Tracked**. |
| **Conversion API** | No |

## How it works

**1. Push.House sends the click**

A visitor clicks your ad. Push.House opens your ClickFlare campaign URL and fills in its macros: the click ID in `click_id`, the click price in `price`, plus the source, ad, feed and subscriber details.

**2. ClickFlare stores the Push.House 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 Push.House**

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

> [!NOTE]
>
> The mirror to keep straight: in the **campaign URL** you write *ClickFlare's* parameter (`click_id`) and *Push.House's* macro (`{click_id}`). In the **postback URL** you write *Push.House's* parameter (`click_id`) and *ClickFlare's* token (`{external_id}`). The names look alike on both sides, but only `{external_id}` is a ClickFlare token.

## 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).
* **Have a funded Push.House account.** The minimum deposit is `$50`.
* **Plan to set up the postback.** Push.House's CPA Goal model optimizes on the conversions it receives, and Push.House's cashback only counts conversions sent by postback. Both need Step 2.

***

## Step 1 – Create the campaign and the Push.House traffic source

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

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

| Name | TS Parameter | TS Token (Push.House macro) | ClickFlare Token | What it carries |
| - | - | - | - | - |
| cost | `price` | `{price}` | `{cost}` | Push.House's price for the click. See [Cost](#cost). |
| externalId | *(empty)* | *(empty)* | `{external_id}` | Nothing yet. Fill it in, see below. |
| Traffic Source ID | `traffic_source_id` | `{site}` | `{trackingField1}` | The traffic source (site) that showed the ad |
| Campaign ID | `campaign_id` | `{camp}` | `{trackingField2}` | Push.House documents `{camp}` as the **ad ID** |
| Feed | `feed` | `{feed}` | `{trackingField3}` | The feed the click came from |
| User ID | `user_id` | `{uid}` | `{trackingField4}` | Not in Push.House's current macro list. See below. |

![The Push.House template's Parameters table in ClickFlare, with Push.House's macros pre-filled](https://mintcdn.com/clickflare/j4F_mr_BIrMz-iaH/images/integrations/templates/push-house/parameters.png?fit=max\&auto=format\&n=j4F_mr_BIrMz-iaH\&q=85\&s=0422f3a5611e3bc8981096ac1197661d)

### Fill in the click ID row

The `externalId` row has no parameter and no macro, so the campaign URL carries no click ID and Push.House cannot match any conversion. Fix it before you save:

1. In the `externalId` row, enter `click_id` as the **TS Parameter**.
2. Enter `{click_id}` as the **TS Token**. This is Push.House's click identifier macro.
3. Leave the **ClickFlare Token** on `{external_id}`.

> [!WARNING]
>
> Don't skip this. Without `click_id={click_id}` in the campaign URL, ClickFlare stores no Push.House click ID, the postback goes out with an empty `click_id`, and Push.House records nothing.

### The other rows

`Traffic Source ID` (`{site}`) is the column you will use most. It tells you which sources convert, so you can blacklist or bid up sources in Push.House. `Campaign ID` carries `{camp}`, which Push.House's own guide describes as the ad ID, so read that column as the ad rather than the campaign.

The `User ID` row sends `{uid}`. Push.House's current macro list doesn't include it. If the column shows `{uid}` as text or stays empty, replace the TS Token with `{pdpid}`, Push.House's subscriber ID, and rename the row `Subscriber ID`.

To pass more Push.House data, click **Add Parameter**, give it a name and parameter, and enter the Push.House macro as the **TS Token**. ClickFlare assigns the next free tracking field. Push.House lists these macros under the **Target Page** field when you create a campaign:

| Macro | What it carries |
| - | - |
| `{country}` | Country |
| `{city}` | City |
| `{os}` | Operating system |
| `{browser}` | Browser |
| `{format}` | Ad format |
| `{lang}` | Browser language |
| `{pdpid}` | Subscriber ID |
| `{user_activity}` | Traffic (subscriber) activity |

`{format}` is worth adding if you run several formats in one campaign.

## Step 2 – Set up the postback

The postback is what sends conversions to Push.House. It lives on the traffic source, so every campaign that uses this Push.House traffic source sends conversions the same way. The template has no postback, so you add it yourself.

### Get your postback URL from Push.House

1. In your Push.House account, open the **Tracking** section.
2. Select your tracker from the list. If ClickFlare isn't listed, pick any tracker. Only its tokens differ, and you replace them below.
3. Generate the postback URL and copy it.

The URL Push.House generates has this shape. Other trackers' Push.House guides show the same format:

```text theme={null}
https://api.push.house/v1/postback?click_id=CLICK_ID_TOKEN&cost=PAYOUT_TOKEN
```

`click_id` carries the click ID back. `cost` carries the conversion's revenue. The name is Push.House's, but the value is your payout, not your ad cost.

### 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 URL field is empty, because the template has no postback.
3. Paste the URL from Push.House, then replace the tracker's tokens with ClickFlare's. The value of `click_id` becomes `{external_id}`. The value of `cost` becomes `{payout}`. The result:

```text theme={null}
https://api.push.house/v1/postback?click_id={external_id}&cost={payout}
```

4. Keep everything else in the URL Push.House generated exactly as it is, including any extra parameter or ID.
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**. You are back in the campaign editor with the Push.House traffic source selected.

> [!WARNING]
>
> Use ClickFlare's `{external_id}`, not `{click_id}`, in the postback. In the postback, ClickFlare only fills its own tokens. `{click_id}` is a Push.House macro and would go out as literal text, so Push.House could not match the conversion.

Push.House's account runs in US dollars, so send the payout in USD. If your offers pay in another currency, 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).

## 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 Push.House passes. See [Cost](#cost).
3. Choose **Redirect** or **Direct** tracking. Redirect is the usual choice for push and OnClick 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**.

Check the campaign URL. It must contain `click_id={click_id}`. If it doesn't, the `externalId` row from Step 1 is still empty.

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 Push.House.

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 Push.House

1. In Push.House, click **Create Campaign** in the left menu.
2. Enter the campaign name, choose the vertical and the ad format.
3. Paste the ClickFlare campaign URL into the **Target Page** field.
4. Set the traffic settings, country, click cost, targeting, budget and schedule as usual.
5. Add your creatives and submit the campaign. It launches after moderation, unless you tick **Stop After Moderation**.

Paste the URL exactly as ClickFlare gives it. Push.House replaces each `{...}` macro when the ad is clicked.

## Step 5 – Test the integration

1. Run the campaign with a small budget, or click your own ad if your targeting allows it.
2. In ClickFlare, open the campaign report. Check that the visit has a Push.House click ID in **External ID** and values in the **Traffic Source ID** and **Feed** columns.
3. Complete a test conversion on your offer, or post one to ClickFlare from your affiliate network's test tool.
4. In ClickFlare, go to **Logs → Postback Status** and filter by the campaign. A successful request to `api.push.house` confirms ClickFlare sent it.
5. Check the conversion in Push.House's statistics. Push.House recommends a test conversion before you scale.

***

## Sending one event

Push.House's postback has no documented event or goal parameter. Send it one conversion type: the one Push.House should optimize on.

1. If you only send one conversion type, keep the postback on **Conversions**.
2. If your funnel has several steps, create a [custom conversion](https://clickflare.com/docs/en/settings/custom-conversions.md) for the step Push.House should learn from, for example `deposit`, and map the postback to it in the dropdown.

Earlier steps (registrations, leads) still show in ClickFlare. They just don't reach Push.House.

> **CPA Goal campaigns**
>
> With CPA Goal you set a target cost per lead, and Push.House raises bids on sources that convert and switches off the ones that don't. It does this from the conversions you post back, so the postback must be working before you switch a campaign to CPA Goal. You still pay per click, so cost tracking in ClickFlare stays the same.

> **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 click. The `cost` row sends Push.House's `{price}` macro, the price of the click, 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. This works for both CPC and CPA Goal campaigns, because Push.House charges per click on both.

Compare the **Cost** column with your Push.House spend after launch. If they differ, correct ClickFlare with a [manual cost upload](https://clickflare.com/docs/en/settings/manual-cost-upload.md). ClickFlare has no cost API integration for Push.House. 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 Push.House, the feed reports revenue hours or days after the click. To pass that revenue to Push.House 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

> **External ID is empty**
>
> The `externalId` row was left empty, so the campaign URL has no `click_id={click_id}`. Fill in the row as in [Step 1](#fill-in-the-click-id-row), then copy the campaign URL again and update the **Target Page** in Push.House.

> **Conversions show in ClickFlare but not in Push.House**
>
> * **Traffic source postback URL** is off, or the URL field is empty. The template has no postback of its own.
> * **Disable sending postbacks to traffic source** is on in the campaign.
> * The postback still has another tracker's token, or Push.House's `{click_id}`, instead of `{external_id}`.
> * 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 Push.House returned.

> **Push.House shows conversions with no payout**
>
> The postback's `cost` parameter is missing or still holds another tracker's token. Set it to `cost={payout}`.

> **The User ID column shows the macro as text**
>
> `{uid}` is not in Push.House's current macro list, so it may not be replaced. Change the row's TS Token to `{pdpid}`. For other empty columns, check that the URL in **Target Page** is the one ClickFlare gave you, 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 Push.House traffic source for all my Push.House campaigns?

**A1:** Yes. Once you have filled in the click ID row and the postback, every campaign using the traffic source tracks and sends conversions the same way. You only fix the template once.

> **Q2:** Why does the postback send my payout in a parameter called `cost`?

**A2:** That is Push.House's name for it. In the postback, `cost` is the conversion's value. Your click cost travels the other way, in the campaign URL's `price` parameter.

> **Q3:** Why is it `{click_id}` in the campaign URL and `{external_id}` in the postback?

**A3:** They are two halves of the same value. In the campaign URL, `{click_id}` is Push.House's macro and Push.House fills it in. In the postback, `{external_id}` is ClickFlare's token, and ClickFlare fills it with the click ID it stored.

> **Q4:** Should I use Redirect or Direct tracking with Push.House?

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

> **Q5:** Do I need the postback on plain CPC campaigns?

**A5:** It is strongly recommended. Push.House's statistics only show conversions you send, and its cashback is only paid on campaigns with an active postback, for the conversions it records.

## 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)**
>
> Pick the one event Push.House should receive.

> **[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.