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

# Pushnami Ads as a Traffic Source

> Track Pushnami Ads push campaigns in ClickFlare: pass the conversion ID and cost, and post conversions with value back to Pushnami.

![Pushnami Ads traffic source template](https://mintcdn.com/clickflare/j4F_mr_BIrMz-iaH/images/integrations/covers/templates/pushnami-ads.png?fit=max\&auto=format\&n=j4F_mr_BIrMz-iaH\&q=85\&s=da04a28720349393809c2e4128835187)

Pushnami Ads is a self-serve push notification ad network. You buy clicks on push notifications sent to opted-in subscribers of Pushnami's publisher websites, mostly in the US and a short list of other countries. This guide sets up Pushnami Ads as a traffic source in ClickFlare. It covers passing Pushnami's click data into your reports and sending conversions, with their value, back to Pushnami so its Source Optimization and your stats agree.

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

## At a glance

| | |
| - | - |
| **Ad formats** | Browser push notifications (desktop and mobile) |
| **Click ID macro** | `<<conversion_id>>`, required for conversion tracking |
| **Conversion tracking** | S2S postback to `revtrc-api.pushnami.com` |
| **Payout passed back** | Yes, in the `v` parameter (a value in dollars) |
| **Multiple events** | No event parameter. Each conversion ID is counted once. |
| **Cost** | Passed per click by the template, as Pushnami's current bid (`<<ad_cost>>`). Cost Model: **Not Tracked**. |
| **Conversion API** | No |

## How it works

**1. Pushnami sends the click**

A subscriber clicks your push notification. Pushnami opens your ClickFlare campaign URL and fills in its macros: the conversion ID in `click_id`, the cost in `cost`, plus the creative, website, campaign, device and location details.

**2. ClickFlare stores the Pushnami conversion 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 Pushnami**

ClickFlare fires the Pushnami postback, replacing `{external_id}` with the stored conversion ID and `{payout}` with the revenue. Pushnami attributes the conversion to the right campaign, creative and source.

> [!NOTE]
>
> The mirror to keep straight: in the **campaign URL** you write *ClickFlare's* parameter (`click_id`) and *Pushnami's* macro (`<<conversion_id>>`). The template does this for you. In the **postback URL** you write *Pushnami's* parameter (`t`) 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).
* **Have a funded Pushnami Ads account.** Pushnami needs an active account with funds, a campaign and at least one approved creative before traffic runs.
* **Decide which conversion Pushnami should receive.** Pushnami counts each conversion ID once and optimizes on what you send. If your funnel has several steps (lead, then sale), pick the one Pushnami should learn from. See [Sending one event](#sending-one-event).

***

## Step 1 – Create the campaign and the Pushnami Ads traffic source

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

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

| Name | TS Parameter | TS Token (Pushnami macro) | ClickFlare Token | What it carries |
| - | - | - | - | - |
| Cost | `cost` | `<<ad_cost>>` | `{cost}` | Pushnami's current bid for the click. See [Cost](#cost). |
| External ID | `click_id` | `<<conversion_id>>` | `{external_id}` | Pushnami's conversion ID. Required for the postback. |
| Creative ID | `creative_id` | `{{=data.adcreativeid}}` | `{trackingField1}` | The creative's reference ID, for example `C0001234-001` |
| Website ID | `source_id` | `{{=data.adsourceid}}` | `{trackingField2}` | The publisher website (source), for example `S0004483` |
| Campaign ID | `campaign_id` | `{{=data.adcampaignid}}` | `{trackingField3}` | Your Pushnami campaign's reference ID |
| Device | `device` | `{{=data.ddevice}}` | `{trackingField4}` | The device type: mobile, desktop or tablet |
| Country | `country` | `{{=data.dcountry}}` | `{trackingField5}` | The country code, for example `US` |
| ZIP | `zip` | `{{=data.dzip}}` | `{trackingField6}` | The ZIP code |
| City | `city` | `{{=data.dcity}}` | `{trackingField7}` | The city |
| State | `state` | `{{=data.dstate}}` | `{trackingField8}` | The state |
| IP Address | `ip_address` | `{{=data.dip}}` | `{trackingField9}` | The visitor's IP address |
| Device User Agent | `device_user_agent` | `{{=data.dua}}` | `{trackingField10}` | The full browser user agent |

![The Pushnami Ads template's Parameters table in ClickFlare, with Pushnami Ads' macros pre-filled](https://mintcdn.com/clickflare/j4F_mr_BIrMz-iaH/images/integrations/templates/pushnami-ads/parameters.png?fit=max\&auto=format\&n=j4F_mr_BIrMz-iaH\&q=85\&s=2ca8ef58ee3e49f8a69eb913c96bcbcf)

Each tracking field becomes a column you can group reports by. **Website ID** is the one you will use most. It is Pushnami's source, the publisher website that showed your notification, and it is the level Pushnami blocks, whitelists and bids on. **Creative ID** tells you which notification converts.

If a value is not available for a visitor, Pushnami leaves the macro empty. ZIP, city and state are most often empty outside the US.

> [!WARNING]
>
> Don't change or remove the `External ID` row. Without `<<conversion_id>>` in the campaign URL, Pushnami cannot track conversions at all, and Source Optimization has nothing to work with.

To pass more Pushnami data, click **Add Parameter**, give it a name and parameter, and enter the Pushnami macro as the **TS Token**. Pushnami also offers `{{=data.age}}` and `{{=data.gender}}`, filled when the data is available. The template already uses all ten tracking fields, so you would need to replace a row you don't use, for example ZIP.

## Step 2 – Set up the postback

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

Pushnami's postback has one fixed address and two parameters:

| Parameter | What it carries | Required |
| - | - | - |
| `t` | The conversion ID captured from the click | Yes |
| `v` | The conversion value in dollars, a plain number such as `9.99` | No, but recommended |

### Add it to the traffic source in ClickFlare

1. 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://revtrc-api.pushnami.com/convert?t={external_id}&v={payout}
```

![The Traffic source postback URL switched on, showing the Pushnami Ads template's postback](https://mintcdn.com/clickflare/j4F_mr_BIrMz-iaH/images/integrations/templates/pushnami-ads/postback.png?fit=max\&auto=format\&n=j4F_mr_BIrMz-iaH\&q=85\&s=8aa2bbc7ccade611c54d8daa9268aa40)

It already sends the conversion ID (`{external_id}`) and the payout (`{payout}`), both as ClickFlare tokens. There is nothing to replace: it matches Pushnami's own guide, and the conversion ID alone tells Pushnami which campaign, creative and source converted.

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

Pushnami reads `v` as dollars and has no currency parameter. If your offers pay in another currency, check how ClickFlare converts the payout before it fills `{payout}`, or the value Pushnami shows will be off. 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 Pushnami passes. See [Cost](#cost).
3. Choose **Redirect** or **Direct** tracking. Redirect is the usual choice for push 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 Pushnami macro from the template, for example `click_id=<<conversion_id>>` and `source_id={{=data.adsourceid}}`.

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

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 Pushnami Ads

In Pushnami, the destination URL belongs to each creative, not to the campaign.

1. On your Pushnami Ads home dashboard, click **Add Campaign**.
2. Set the campaign name, audience rules (country, state, device, subscriber age), schedule and budget as usual. Schedules use Central Time.
3. Set a **Default Bid**. The minimum is `$0.10` per click. Pushnami recommends starting above `$0.20`.
4. Open the campaign's **Creatives** tab and click **Add Creative**.
5. Paste the ClickFlare campaign URL into the creative's **Destination Link** field.
6. Add the title, message, icon and image, then click **Add Creative** to submit it for review.

Paste the URL exactly as ClickFlare gives it. Pushnami replaces each `<<...>>` and `{{=data...}}` macro when the notification is clicked, and URL-encodes the values.

Use the same ClickFlare campaign URL in every creative of the campaign. ClickFlare tells creatives apart through the **Creative ID** column. You can also use Pushnami's **Link Builder**. If you do, add your parameters with the same names as the template (`click_id`, `cost`, `source_id` and so on). ClickFlare only reads parameters with the names in the traffic source.

## Step 5 – Test the integration

Pushnami's Link Builder can generate a test click before you spend anything.

1. In the creative's Link Builder, make sure `<<conversion_id>>` is in the link. It is, if you pasted the ClickFlare campaign URL.
2. Click **Test Link**. Pushnami generates a test URL with a sample conversion ID.
3. Open the test URL. In ClickFlare, check that the visit appeared on the campaign with the sample ID in **External ID**.
4. Complete a test conversion on your offer, or post one to ClickFlare from your affiliate network's test tool.
5. In ClickFlare, go to **Logs → Postback Status** and filter by the campaign. A successful request to `revtrc-api.pushnami.com` confirms ClickFlare sent the postback.
6. Check the conversion in Pushnami. The Link Builder also gives you a test postback link you can use to confirm Pushnami's side on its own.

Each conversion ID is accepted once. If you test twice with the same click, the second postback is ignored. Generate a new test link for each test.

***

## Sending one event

Pushnami's postback has no event or goal parameter. All postbacks count as the same kind of conversion, and Pushnami only counts each conversion ID once. If you send a lead and then a sale for the same click, the sale is dropped as a duplicate.

So choose one event for Pushnami:

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 Pushnami should learn from, for example `purchase`, and map the postback to it in the dropdown.

Earlier steps (leads, sign-ups) still show in ClickFlare. They just don't reach Pushnami.

> **Lead campaigns with no value**
>
> The `v` parameter is optional. If your offer pays per lead and you don't want Pushnami to see the value, remove `&v={payout}` from the postback. Pushnami then counts conversions without revenue.
>
> Keep `v` if you want revenue in Pushnami's own stats.

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

## Source Optimization

Pushnami's **Source Optimization** bids up or down on each website to reach your **Target CPA**. It runs on the conversions you post back. Two macros make it work:

* `<<conversion_id>>` is required. Without it, Pushnami tracks no conversions.
* `{{=data.adsourceid}}` is optional but highly recommended. It lets Pushnami tie conversions to websites.

The template sends both. To turn optimization on, go to the campaign's **Spend** tab, toggle **Source Optimization** on and set your **Target CPA**. Pushnami suggests letting it learn for 2 to 7 days and having 100 or more clicks a day.

In ClickFlare, group the campaign report by the **Website ID** column to see the same sources with your own revenue. Block or whitelist them from the **Spend** tab in Pushnami.

## Cost

The template passes cost per click. The `Cost` row sends Pushnami's `<<ad_cost>>` macro, 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]
>
> Pushnami describes `<<ad_cost>>` as the current bid amount, including source-level bids from Source Optimization. Pushnami's auctions can charge less than your bid, so ClickFlare's cost can come out slightly higher than your real Pushnami spend. Compare the **Cost** column with Pushnami's **Spend** tab after launch.

If the two don't match, correct ClickFlare with a [manual cost upload](https://clickflare.com/docs/en/settings/manual-cost-upload.md) from Pushnami's spend figures. Pushnami also has a Spend Report API with daily spend by campaign, creative and source, but ClickFlare has no built-in cost integration for it.

If you prefer a fixed cost, set the Cost Model to **CPC** and enter your default bid. 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 Pushnami, the feed reports revenue hours or days after the click. To pass that revenue to Pushnami 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). Remember that Pushnami counts each conversion ID once, so send the revenue in a single postback.

***

## Troubleshooting

> **Conversions show in ClickFlare but not in Pushnami**
>
> * **Traffic source postback URL** is off on the Pushnami Ads 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 postback was edited. It must start exactly with `https://revtrc-api.pushnami.com/convert`.
> * The same conversion ID was already used. Pushnami ignores duplicates.
> * Check **Logs → Postback Status**: a failed request shows the status code Pushnami returned.

> **External ID is empty or shows the macro**
>
> * The creative's Destination Link was not the ClickFlare campaign URL, or `click_id=<<conversion_id>>` was removed from it.
> * The link was rebuilt in the Link Builder with a different parameter name, for example `cid`. ClickFlare only reads `click_id`. Rename it, or paste the ClickFlare URL again.
> * The `External ID` row was removed from the traffic source.

> **Pushnami shows conversions with no value or the wrong value**
>
> * `&v={payout}` was removed from the postback. Restore it.
> * Your payout is in another currency. Pushnami reads `v` as dollars.
> * The value must be a plain number. ClickFlare sends `{payout}` that way, so check that nothing was added around it.

> **Website or creative columns are empty**
>
> The macros were not replaced, usually because the URL was edited or rebuilt. Paste the campaign URL from ClickFlare unchanged. Location columns (ZIP, city, state) can be empty when Pushnami has no data for the visitor. 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 Pushnami Ads traffic source for all my Pushnami 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 Pushnami Ads traffic source only if a campaign needs a different postback, for example one mapped to a different event.

> **Q2:** Pushnami has guides for Voluum and RedTrack, but not ClickFlare. Is that a problem?

**A2:** No. ClickFlare has its own template, which matches Pushnami's postback and macros. The only difference from the other guides is the click ID token: ClickFlare uses `{external_id}` where Voluum uses `{externalid}` and RedTrack `{clickid}`.

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

**A3:** They are two halves of the same value. ClickFlare reads Pushnami's conversion ID from its own `click_id` parameter. Pushnami expects it back in its own `t` parameter. Change neither.

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

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

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