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

# A-ADS as a Traffic Source

> Track A-ADS (AADS) crypto ad campaigns in ClickFlare with goal tracking, and reward publishers through the A-ADS Goal Tracking API.

![A-ADS traffic source template](https://mintcdn.com/clickflare/0jaeWC_DJvLt2SMH/images/integrations/covers/templates/a-ads.png?fit=max\&auto=format\&n=0jaeWC_DJvLt2SMH\&q=85\&s=63d288e3a755474707bf18b0f845c746)

A-ADS, now branded AADS, is a crypto advertising network. It sells text and banner ads on crypto, finance and earning sites, browser extensions and apps. Its main pricing model is cost per day (CPD), with CPA and revenue share available by agreement. This guide sets up A-ADS as a traffic source in ClickFlare. It covers passing A-ADS's ad unit and visitor data into your reports and, if you have a CPA deal with A-ADS, sending conversions back through A-ADS's Goal Tracking API so the publisher that sent the visitor gets rewarded.

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

## At a glance

| | |
| - | - |
| **Ad formats** | Text ads, graphic banners, responsive teasers. No popunders or popups. |
| **Click ID macro** | None per click. `{{partner}}` identifies the campaign and the ad unit, for example `12345_67890`. |
| **Conversion tracking** | Goal Tracking API call to `a-ads.com/api/v1/goals/create.json`. CPA advertisers only, after an agreement with A-ADS. |
| **Payout passed back** | No. The postback sends a reward amount in satoshi, which A-ADS pays to the publisher. |
| **Multiple events** | Not documented. Send one rewarded action. |
| **Cost** | Not passed. The template has no cost row. CPD spend is best added with a manual cost upload. |
| **Conversion API** | No |

> [!WARNING]
>
> The template's postback is not ready to use. It contains two `REPLACE` placeholders and an `OPTIONAL` placeholder, and the reward amount is not your payout. Read Step 2 before you turn it on. Each call also spends money from your A-ADS campaign balance.

## How it works

**1. A-ADS sends the click**

A visitor clicks your ad. A-ADS opens your ad link with the goal tracking suffix attached, and fills in its macros: `{{partner}}` (campaign and ad unit), plus IP, timestamp, browser, device, country, language and OS.

**2. ClickFlare stores the partner value**

ClickFlare saves the value of `partner` as the visit's **External ID** and redirects the visitor to your lander or offer. Every visit from the same ad unit has the same `partner` value. It identifies the publisher, not the click.

**3. The conversion reaches ClickFlare**

Your affiliate network, store or app posts the conversion back to ClickFlare, matched on the ClickFlare click ID.

**4. ClickFlare calls the A-ADS Goal Tracking API**

ClickFlare fires the A-ADS postback with the stored `partner` value, a unique ID for the conversion, your A-ADS password and the reward amount. A-ADS deducts the reward plus its fee from your campaign balance and pays the publisher behind that ad unit.

> [!NOTE]
>
> The mirror to keep straight: in the **campaign URL** you write *ClickFlare's* parameter (`partner`) and *A-ADS's* macro (`{{partner}}`). The template does this for you. In the **postback URL** you write *A-ADS's* parameter (`partner`) and *ClickFlare's* token (`{external_id}`). A-ADS's macros use double braces. ClickFlare's tokens use single braces. Don't 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](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 whether you need the postback.** A-ADS only accepts Goal Tracking API calls from CPA advertisers who have agreed terms with an A-ADS manager. If you buy on CPD only, you still get A-ADS's data in ClickFlare, and you leave the postback off.
* **If you have a CPA deal, get your API password and agree the reward.** A-ADS provides the password. The reward is a whole number of satoshi per conversion.
* **Decide which conversion A-ADS should reward.** Every postback pays a publisher. Send only the action you agreed to pay for. See [Choosing the event to send](#choosing-the-event-to-send).

***

## Step 1 – Create the campaign and the A-ADS traffic source

1. Go to **Campaigns** and click **New**.
2. In **Traffic Source**, open the dropdown and click **+ New Traffic Source**.
3. Type `a-ads` in the search box and select the **A-ADS** template.
4. Enter a **Name**, for example `A-ADS`.
5. Leave **Cost currency** on **USD**.

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

| Name | TS Parameter | TS Token (A-ADS macro) | ClickFlare Token | What it carries |
| - | - | - | - | - |
| externalId | `partner` | `{{partner}}` | `{external_id}` | Campaign ID and ad unit ID, for example `12345_67890`. Required for the postback. |
| IP | `ip_address` | `{{ip_address}}` | `{trackingField1}` | The visitor's IP address |
| Timestamp | `timestamp` | `{{timestamp}}` | `{trackingField2}` | The click time, as Unix time, for example `1613148215` |
| Browser Name | `browser_name` | `{{browser_name}}` | `{trackingField3}` | The browser, for example `Google Chrome` |
| Device Type | `device_type` | `{{device_type}}` | `{trackingField4}` | `Desktop`, `Mobile`, `Tablet` or `Other` |
| Country Code | `http_country_code` | `{{http_country_code}}` | `{trackingField5}` | The visitor's country code, for example `US` |
| Browser Language | `http_accept_language` | `{{http_accept_language}}` | `{trackingField6}` | The browser language, for example `en-US` |
| OS | `os_name` | `{{os_name}}` | `{trackingField7}` | The operating system, for example `Windows` |
| OS Version | `os_version` | `{{os_version}}` | `{trackingField8}` | The OS version, for example `10` |

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

Each tracking field becomes a column you can group reports by. The **External ID** is the one you will use most. Its value is the campaign ID and the ad unit ID joined by an underscore, so grouping by it shows which publisher's ad unit converts. That is the data A-ADS recommends using to drop low-quality ad units and ask its support for more traffic from the good ones.

The Timestamp and IP rows are of limited use in reports, because almost every value is different. ClickFlare already records the visit time and IP itself.

> [!WARNING]
>
> Don't change or remove the `externalId` row, and keep `{{partner}}` exactly as written. A-ADS asks that every goal tracking suffix keeps the `{{partner}}` macro. Without it the Goal Tracking API cannot tell which publisher to reward.

### Adding more A-ADS macros

The template leaves out two A-ADS macros that are worth adding with **Add Parameter**:

| Name | TS Parameter | TS Token | What it carries |
| - | - | - | - |
| Ad Unit | `ad_unit` | `{{ad_unit}}` | The ad unit ID on its own, for example `1410509` |
| Banner Size | `banner_size` | `{{banner_size}}` | The size of the banner that was clicked, for example `728x90` |

Click **Add Parameter**, give the row a name and parameter, and enter the A-ADS macro, with its double braces, as the **TS Token**. ClickFlare assigns the next free tracking field. `banner_size` tells you which of your banner sizes convert, which helps when you decide which sizes to produce more of.

## Step 2 – Set up the postback

Skip this step if you buy A-ADS traffic on CPD only and have no CPA agreement. Leave **Traffic source postback URL** off and go to Step 3.

The postback is a call to A-ADS's Goal Tracking API. It lives on the traffic source, so every campaign that uses this A-ADS traffic source sends conversions the same way.

### A-ADS's Goal Tracking API

A-ADS documents the call like this, with its own example values:

```text theme={null}
https://a-ads.com/api/v1/goals/create.json?unique_id=anythinguniq123&password=myawsomepassword&amount=10000&partner={partner}
```

| Parameter | What A-ADS expects |
| - | - |
| `unique_id` | Any letters and numbers, unique within your campaign's rewards. Generated on your side. |
| `password` | The advertiser password A-ADS gives you |
| `amount` | The reward, as a whole number of satoshi |
| `partner` | The `partner` value from the click, sent back unchanged |

The reward is deducted from your campaign balance and paid to the publisher as soon as the call arrives. A-ADS charges its fee on top: with `amount=80`, A-ADS takes 100 satoshi from your balance, pays 80 to the publisher and keeps 20.

### 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://a-ads.com/api/v1/goals/create.json?unique_id={external_id}&password=REPLACE&amount=REPLACE&partner={external_id}&duration=259200&comment=OPTIONAL
```

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

3. Replace `password=REPLACE` with the advertiser password A-ADS gave you.
4. Replace `amount=REPLACE` with your reward per conversion, as a whole number of satoshi, for example `amount=5000`. Don't put `{payout}` here. ClickFlare's payout is a decimal in your currency, and A-ADS reads it as satoshi.
5. Replace `comment=OPTIONAL` with a short note of your own, for example `comment=clickflare`, or delete `&comment=OPTIONAL`. Left as it is, every call carries the word `OPTIONAL`.
6. Change `unique_id={external_id}` to `unique_id={cf_click_id}`. `{external_id}` holds A-ADS' partner value, which many clicks share, and A-ADS needs a different `unique_id` for every reward. `{cf_click_id}` is ClickFlare's own click ID, unique for each click. Keep `partner={external_id}`, which sends back the value A-ADS passed on the click.

The result, with your own password and amount:

```text theme={null}
https://a-ads.com/api/v1/goals/create.json?unique_id={cf_click_id}&password=YOUR_PASSWORD&amount=5000&partner={external_id}&duration=259200
```

7. In the dropdown on the left, choose the ClickFlare event that should fire the postback. Choose the action you agreed with A-ADS, usually a custom conversion such as `deposit` or `purchase`, rather than **Conversions**.
8. Click **Save**. You are back in the campaign editor with the A-ADS traffic source selected.

> [!WARNING]
>
> If `REPLACE` stays in the password, A-ADS rejects the call. If `REPLACE` stays in the amount, or you put `{payout}` there, the reward is wrong or rejected. Fix both before the campaign gets traffic. Every accepted call spends real money from your A-ADS balance.

The template also sends `duration=259200`, which is three days in seconds. A-ADS's current API description doesn't list `duration`. Keep it unless A-ADS tells you otherwise, and ask your A-ADS manager what it controls when you agree the CPA terms.

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**. For CPD buying, choose **Not Tracked** and upload your daily spend. See [Cost](#cost).
3. Choose **Redirect** or **Direct** tracking. Redirect is the usual choice.
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 A-ADS macro from the template, for example `partner={{partner}}` and `device_type={{device_type}}`.

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 A-ADS.

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

## Step 4 – Set up the campaign in A-ADS

A-ADS doesn't take the whole campaign URL in one field. It has the ad link, and a separate **Goal tracking** suffix that it appends to the link on every click. You split the ClickFlare campaign URL between the two.

1. In A-ADS, create your campaign, or open an existing one.
2. Set the campaign's ad link to the ClickFlare campaign URL **without** the `?` and everything after it.
3. Turn on **Goal tracking** for the campaign.
4. Set the goal tracking suffix to the `?` and everything after it, from the same ClickFlare campaign URL. It starts with `?partner={{partner}}` and lists the other A-ADS macros.
5. Save the campaign.

This is the same split A-ADS describes for Voluum, Binom and PeerClick. Paste both parts exactly as ClickFlare gives them. A-ADS replaces each `{{...}}` macro when the ad is clicked.

> [!NOTE]
>
> Goal tracking is useful even without a CPA deal. A-ADS says it can be turned on for analysis alone, without the API call. You still get ad unit level data in ClickFlare.

## Step 5 – Test the integration

A-ADS has no test conversion tool, and a real API call spends money. Test the two halves separately.

1. **Test the click.** Open the ClickFlare campaign URL in a browser, replacing `{{partner}}` with a made-up value, for example `partner=11111_22222`. In ClickFlare, check that the visit shows `11111_22222` as its External ID.
2. **Check the first real conversion.** After the campaign gets traffic, wait for a real conversion. Go to **Logs → Postback Status**, filter by the campaign, and open the call to `a-ads.com`. Confirm the URL has your password, a whole-number amount, a `partner` value in the `12345_67890` form, and no `REPLACE`.
3. **Check A-ADS.** Confirm the reward shows in your A-ADS campaign and your balance dropped by the reward plus the fee.

Don't fire a test conversion with a made-up `partner` value while the postback is on. A-ADS can't match it to a publisher, and you learn nothing about your real setup.

***

## Choosing the event to send

A-ADS's Goal Tracking API has no event parameter. Every call it receives is a paid reward. Send A-ADS only the action you agreed to pay for.

1. In ClickFlare, create a [custom conversion](https://clickflare.com/docs/en/settings/custom-conversions.md) for each step, for example `signup` and `deposit`.
2. On the A-ADS traffic source, map the postback to the paid action, for example `deposit`.

Earlier steps still show in ClickFlare. They just don't reach A-ADS, and they cost you nothing there.

> **Rewarding more than one action**
>
> You can click **+ Another postback URL** and add a second Goal Tracking call for another action, with its own `amount`. Each call pays the publisher again. Agree this with A-ADS first.
>
> A-ADS requires `unique_id` to be unique within the campaign's rewards. If two actions come from the same click, `{cf_click_id}` is the same in both calls. Use `{txid}` (the conversion's transaction ID) for the second call instead, if your affiliate network sends one.

> **Filtering which conversions are sent**
>
> To reward only some conversions, for example only deposits above a certain payout, use **Event filter** under the postback to add conditions.

## Cost

The template does not pass cost. It has no Cost row, and A-ADS documents no cost macro. Choose the cost model by how you buy:

| How you buy on A-ADS | Cost Model in ClickFlare |
| - | - |
| **Cost per day (CPD)** | **Not Tracked**, then add each day's spend with a [manual cost upload](https://clickflare.com/docs/en/settings/manual-cost-upload.md). A-ADS lets you download daily campaign stats in XLSX format. |
| **CPA** | **CPA**, with the reward plus A-ADS's fee, converted to your cost currency |
| **Revenue share** | **RevShare**, with the share you agreed |

CPD doesn't map to a per-click cost, because what you pay for a day doesn't depend on how many visits you get. A manual upload of the daily total is the accurate option. If you prefer an estimate while the campaign runs, use **CPC** with your daily spend divided by your daily visits, and correct it with an upload later.

> [!NOTE]
>
> A-ADS's **Max CPM** setting on CPD campaigns is a filter, not a price. It excludes ad units whose effective CPM is above the limit. Don't enter it in ClickFlare as your cost.

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 A-ADS, the feed reports revenue hours or days after the click. ClickFlare can fire a postback once that revenue arrives, but A-ADS pays the fixed `amount` in the postback, not the revenue. 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

> **Calls to A-ADS fail**
>
> * `password=REPLACE` was never replaced, or the password is wrong.
> * `amount=REPLACE` was never replaced, or holds a decimal value such as `{payout}`. The amount must be a whole number of satoshi.
> * Your A-ADS campaign balance is too low to cover the reward plus the fee.
> * You don't have a CPA agreement with A-ADS yet.
> * Open **Logs → Postback Status** to see the full URL and the status code A-ADS returned.

> **Conversions show in ClickFlare but no call goes to A-ADS**
>
> * **Traffic source postback URL** is off on the A-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 partner value is empty or not replaced**
>
> * **Goal tracking** is off on the A-ADS campaign, so A-ADS adds no suffix.
> * The suffix in A-ADS doesn't contain `partner={{partner}}`, or the macro lost a brace.
> * The full ClickFlare URL, with its `?` part, was pasted as the ad link and the suffix was added again. Split it as described in Step 4.

> **Device, browser or OS columns are empty**
>
> The macros were not replaced, usually because the suffix in A-ADS was edited or a macro was typed with single braces. Copy the `?` part of the campaign URL from ClickFlare again. 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 A-ADS traffic source for all my A-ADS campaigns?

**A1:** Yes, as long as they reward the same action with the same amount. The postback, including the `amount`, is set once on the traffic source. Create a second A-ADS traffic source for a campaign with a different reward.

> **Q2:** Is A-ADS's `partner` value a click ID?

**A2:** No. It is the campaign ID and the ad unit ID, for example `12345_67890`. Many visits share it. ClickFlare stores it as the External ID because that is the value A-ADS needs back to know which publisher to reward.

> **Q3:** Why does A-ADS use double braces?

**A3:** That is A-ADS's macro format: `{{partner}}`, `{{device_type}}` and so on. ClickFlare's own tokens use single braces, such as `{external_id}`. Keep each where it belongs: double braces in the campaign URL, single braces in the postback.

> **Q4:** Can I send my offer's payout to A-ADS?

**A4:** No. The `amount` is the reward A-ADS pays the publisher, in satoshi, and it is charged to you. It is set by your CPA agreement, not by your payout.

> **Q5:** Do I need the postback if I only buy on CPD?

**A5:** No. Turn on Goal tracking in A-ADS so the macros reach ClickFlare, leave **Traffic source postback URL** off, and analyse ad units in ClickFlare.

## 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 sign-ups and deposits into separate events.

> **[Manual cost upload](https://clickflare.com/docs/en/settings/manual-cost-upload.md)**
>
> Add your daily A-ADS spend.

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