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

# HilltopAds as a Traffic Source

> Track HilltopAds campaigns in ClickFlare: pass the token click ID and price, and post conversions with payout and advertiser ID back.

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

HilltopAds is a self-serve ad network selling popunder, banner, video (VAST and video slider) and in-page traffic on mobile and desktop. This guide sets up HilltopAds as a traffic source in ClickFlare. It covers passing HilltopAds' click data into your reports and sending conversions, with payout and currency, back to HilltopAds so its stats and optimization match yours.

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

## At a glance

| | |
| - | - |
| **Ad formats** | Popunder, banners, video (VAST, video slider), in-page |
| **Click ID macro** | `{{token}}`, mandatory for conversion tracking |
| **Conversion tracking** | S2S postback to HilltopAds' `trackhta.com/close/` endpoint |
| **Payout passed back** | Yes, in `price`, with the currency fixed to `USD` in `currency` |
| **Advertiser ID in the postback** | Required by HilltopAds. The template has `advertiserId=REPLACE`. You replace `REPLACE` with your ID. |
| **Multiple events** | Conversions, plus micro-conversions marked with a `goal` parameter |
| **Cost** | Passed by the template as HilltopAds' price (`{{price}}`). Cost Model: **Not Tracked**. |
| **Conversion API** | No |

## How it works

**1. HilltopAds sends the click**

A visitor clicks or opens your ad. HilltopAds opens your ClickFlare campaign URL and fills in its macros: the click ID in `token`, the price in `price`, plus the zone, campaign and country.

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

ClickFlare saves the value of `token` 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 HilltopAds**

ClickFlare fires the HilltopAds postback, replacing `{external_id}` with the stored HilltopAds click ID and `{payout}` with the revenue. The currency is fixed to `USD` in the template, and your advertiser ID goes in `advertiserId`. HilltopAds matches the postback to the original click.

> [!NOTE]
>
> The mirror to keep straight: in the **campaign URL** you write *ClickFlare's* parameter (`token`) and *HilltopAds'* macro (`{{token}}`). The template does this for you. In the **postback URL** you write *HilltopAds'* parameter (`token`) and *ClickFlare's* token (`{external_id}`). HilltopAds macros use double braces. ClickFlare tokens use single braces. Never mix them.

## 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 HilltopAds advertiser ID.** HilltopAds requires it in every postback. It is in the **Trackers** section of your HilltopAds account, inside your unique postback URL. You will paste it into the template's postback in Step 2.
* **Decide which conversions HilltopAds should receive.** HilltopAds optimizes on conversions, and bills CPA campaigns on them. If your funnel has several steps, decide now which one is the conversion. See [Tracking several events](#tracking-several-events).

***

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

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

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

| Name | TS Parameter | TS Token (HilltopAds macro) | ClickFlare Token | What it carries |
| - | - | - | - | - |
| cost | `price` | `{{price}}` | `{cost}` | HilltopAds' price for the impression or click. See [Cost](#cost). |
| externalId | `token` | `{{token}}` | `{external_id}` | HilltopAds' click ID. Required for the postback. |
| Zone ID | `zoneid` | `{{zoneid}}` | `{trackingField1}` | The publisher zone that showed the ad |
| Campaign ID | `campaignid` | `{{campaignid}}` | `{trackingField2}` | HilltopAds' campaign ID |
| ISO country code | `geo` | `{{geo}}` | `{trackingField3}` | The visitor's country |

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

Each tracking field becomes a column you can group reports by. `zoneid` is the one you will use most. It tells you which publisher zones convert, so you can blacklist or whitelist zones in HilltopAds.

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

The template only passes three tracking fields. HilltopAds offers more macros you can add:

| Macro | What it carries |
| - | - |
| `{{adid}}` | The ad or banner ID |
| `{{lang}}` | The visitor's browser language |
| `{{category}}` | Mainstream or non-mainstream traffic |
| `{{cpmbid}}` | Your CPM bid on the campaign |
| `{{browsername}}` | The browser name |
| `{{isp}}` | The ISP |

To add one, click **Add Parameter**, give it a name and parameter (for example `adid`), and enter the HilltopAds macro as the **TS Token**, double braces included. ClickFlare assigns the next free tracking field. `{{adid}}` is worth adding if you test several creatives.

## Step 2 – Set up the postback

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

### Get your advertiser ID from HilltopAds

1. In HilltopAds, open the **Trackers** section of your advertiser account.
2. Find your unique postback URL. HilltopAds builds it with your advertiser ID in the `advertiserId` parameter.
3. Copy the advertiser 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://trackhta.com/close/?token={external_id}&price={payout}&currency=USD&advertiserId=REPLACE
```

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

It already sends the click ID (`{external_id}`) and the payout (`{payout}`) as ClickFlare tokens, and the currency as `USD`. It has a placeholder for your advertiser ID.

3. Replace `REPLACE` with your HilltopAds advertiser ID. This is the only change you need. The result:

```text theme={null}
https://trackhta.com/close/?token={external_id}&price={payout}&currency=USD&advertiserId=YOUR_ADVERTISER_ID
```

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

> [!WARNING]
>
> Replace `REPLACE` with your advertiser ID before you save. HilltopAds requires it in every postback, and without it the conversions may not be credited to your account.

The template fixes `currency=USD`. ClickFlare's `{payout}` is in your ClickFlare account currency. If your ClickFlare payouts are not in USD, change `USD` to that currency code. 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 **Not Tracked**, so ClickFlare uses the price HilltopAds passes. See [Cost](#cost).
3. Choose **Redirect** or **Direct** tracking. Redirect is the usual choice for HilltopAds' popunder and banner 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 HilltopAds macro from the template, for example `token={{token}}` and `zoneid={{zoneid}}`.

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

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

## Step 4 – Create the campaign in HilltopAds

1. In HilltopAds, go to **Manage Campaigns** and click **Add Campaign**.
2. Choose the ad format, traffic channel, targeting and bid as usual.
3. Paste the ClickFlare campaign URL into the **Final Destination URL** field.
4. Save the campaign and submit it for moderation.

Paste the URL exactly as ClickFlare gives it. HilltopAds replaces each double-brace macro when the ad is clicked.

## Step 5 – Test the integration

1. In HilltopAds, open the **Trackers** section and go to **Test Conversion**.
2. Follow HilltopAds' test flow, then complete the offer the way a real visitor would.
3. Check the result in **Test Conversion**. If HilltopAds doesn't register the conversion, check the advertiser ID in the postback first.
4. In ClickFlare, go to **Logs → Postback Status** and filter by the campaign. A successful postback to `trackhta.com` confirms ClickFlare sent it.

A postback only fires for a visit that came through HilltopAds with a real `{{token}}` value. If you open the ClickFlare campaign URL directly in your browser, `token` arrives empty and there is nothing for HilltopAds to match.

***

## Tracking several events

HilltopAds separates **conversions** from **micro-conversions**. A conversion is the action HilltopAds bills CPA campaigns on and optimizes for. A micro-conversion is an earlier step, such as a registration, that HilltopAds shows in stats for analysis. HilltopAds identifies a micro-conversion by a `goal` parameter in the postback. A conversion must not include a goal.

```text theme={null}
https://trackhta.com/close/?token={external_id}&price={payout}&currency=USD&advertiserId=YOUR_ADVERTISER_ID
https://trackhta.com/close/?token={external_id}&goal=reg&advertiserId=YOUR_ADVERTISER_ID
```

1. In ClickFlare, create a [custom conversion](/docs/en/settings/custom-conversions.md) for each step, for example `registration` and `purchase`.
2. Map the main postback (no `goal`) to your final event, for example `purchase`.
3. Click **+ Another postback URL** for each micro-conversion. Give it the HilltopAds URL with a `goal` value, for example `goal=reg`, and map it to its ClickFlare event, for example `registration`.
4. Use the same advertiser ID in every postback.

> **Rules for HilltopAds goals**
>
> * Only the postback without a `goal` counts as a conversion. Keep exactly one of those per funnel.
> * Name goals after the step, for example `reg`, `first_time_deposit`, `add_to_cart`. HilltopAds doesn't limit the number of goals.
> * Micro-conversions are for analysis. Optimize on the conversion that matters most.
> * HilltopAds' own guides differ on the parameter name for the event (`goal` in the tracker example, `label` in the general example). Check the format in your **Trackers** section, or ask HilltopAds support, before relying on it.

> **Sending only one event**
>
> If HilltopAds should only learn from your final sale, keep a single postback and map it to that event. Earlier steps still show in ClickFlare. They just don't reach HilltopAds.
>
> 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 with every visit. The `cost` row sends HilltopAds' `{{price}}` macro, and ClickFlare records it as the visit's cost. HilltopAds fills `{{price}}` with the price of one impression on CPM campaigns, or one click on CPC campaigns.

On the campaign, set the **Cost Model** to **Not Tracked** so ClickFlare uses the cost passed in the URL.

> [!NOTE]
>
> On popunder, one impression is one visit, so the CPM price per impression is the right cost per visit. On CPM banner and video campaigns, many impressions happen for each click, but ClickFlare only records the clicks. The cost per click is then understated. Compare ClickFlare's **Cost** column with your HilltopAds spend after launch. If it doesn't match, switch the Cost Model to **CPC** with your real cost per click, or correct the spend with a manual cost upload.

For HilltopAds CPA campaigns, set the Cost Model to **CPA**, with your price per conversion.

When the recorded spend differs from your HilltopAds 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).

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

## Delayed revenue

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

> **HilltopAds doesn't register the test conversion**
>
> * `advertiserId` is still `REPLACE`, or the ID is wrong. Copy it again from the **Trackers** section.
> * The campaign URL in HilltopAds is missing `token={{token}}`, or the macro was edited. Copy the URL from ClickFlare again.
> * The postback uses a HilltopAds double-brace macro instead of ClickFlare's `{external_id}`. ClickFlare doesn't know HilltopAds macros and sends them as literal text.

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

> **HilltopAds shows conversions with no payout**
>
> The template sends `price={payout}`, so it was removed or edited. Restore `&price={payout}&currency=USD`.
>
> If the 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.

> **Zone or campaign columns are empty, or show the macro as text**
>
> The macros were not replaced, usually because the URL was edited or pasted somewhere HilltopAds doesn't process macros. Paste the campaign URL from ClickFlare unchanged, with the double braces. 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 HilltopAds traffic source for all my HilltopAds campaigns?

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

> **Q2:** HilltopAds lists Voluum, Binom, RedTrack and other trackers, but not ClickFlare. Is that a problem?

**A2:** No. The ClickFlare template already has the postback format. You only replace `REPLACE` with your advertiser ID from the **Trackers** section.

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

**A3:** They are two halves of the same value. HilltopAds fills `{{token}}` with its click ID when it sends the visit, and ClickFlare stores it. In the postback, ClickFlare fills `{external_id}` with that stored value. HilltopAds expects it back in its own `token` parameter.

> **Q4:** Some older HilltopAds guides use `{{ctoken}}`. Should I?

**A4:** No. Use `{{token}}`, as the template does. It is the click ID macro HilltopAds' current tracker guides list.

> **Q5:** Should I use Redirect or Direct tracking with HilltopAds?

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

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