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

# Start.io (StartApp) as a Traffic Source

> Track Start.io (StartApp) campaigns in ClickFlare: capture the click ID and app macros, and send conversions to Start.io's global postback.

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

Start.io, formerly StartApp, is a mobile ad platform selling in-app traffic from the apps that run its SDK. Its self-serve advertiser portal is where you create campaigns, upload creatives and track conversions. This guide sets up Start.io as a traffic source in ClickFlare. It covers passing Start.io's click data into your reports and sending conversions back to Start.io, so the conversions show in your Start.io portal next to your spend.

In ClickFlare the template is still called **StartApp**. Everything in this guide applies to Start.io.

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

## At a glance

| | |
| - | - |
| **Traffic** | Mobile in-app traffic from Start.io's publisher apps |
| **Click ID macro** | `startapp_click_id_placeholder`, mandatory for conversion tracking |
| **Conversion tracking** | One global S2S postback to `startappinstalls.com` |
| **Payout passed back** | No. Start.io's postback takes only the click ID. |
| **Multiple events** | No. One global postback per account. |
| **Cost** | Not passed by the template. Cost Model: **CPC** or **CPA**, matching how you buy. |
| **Conversion API** | No |

## How it works

**1. Start.io sends the click**

A user taps your ad inside an app. Start.io opens your ClickFlare campaign URL and fills in its macros: the click ID in `cid`, plus the publishing app, ISP, device model and brand, OS version, connection type and app category.

**2. ClickFlare stores the Start.io click ID**

ClickFlare saves the value of `cid` as the visit's **External ID** and redirects the user to your lander or offer.

**3. The conversion reaches ClickFlare**

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

**4. ClickFlare posts it back to Start.io**

ClickFlare fires the Start.io postback, replacing `{external_id}` with the stored Start.io click ID. Start.io matches it to the original click and shows the conversion in your portal.

> [!NOTE]
>
> The mirror to keep straight: in the **campaign URL** you write *ClickFlare's* parameter (`cid`) and *Start.io's* macro (`startapp_click_id_placeholder`). The template does this for you. In the **postback URL** you write *Start.io's* parameter (`d`) and *ClickFlare's* token (`{external_id}`).

Start.io's macros look different from most networks. They are plain words with no braces or hashes, such as `startapp_app_id`. Start.io replaces them in the URL when the ad is clicked. Its one rule: the parameter name must differ from the macro. `appid=startapp_app_id` works, `startapp_app_id=startapp_app_id` returns `unknown`. The template already follows it.

## 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).
* **Have a Start.io advertiser account** at the Start.io portal, with funds to launch.
* **Decide which conversion Start.io should receive.** Start.io takes one global postback, with no event or payout parameter. If your funnel has several steps (install, then purchase), pick the one Start.io should count. See [Tracking several events](#tracking-several-events).

***

## Step 1 – Create the campaign and the Start.io traffic source

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

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

| Name | TS Parameter | TS Token (Start.io macro) | ClickFlare Token | What it carries |
| - | - | - | - | - |
| externalId | `cid` | `startapp_click_id_placeholder` | `{external_id}` | Start.io's click ID. Required for the postback. |
| App ID | `appid` | `startapp_app_id` | `{trackingField1}` | The publishing app the click came from |
| Creative ID | `creativeid` | `creative_id` | `{trackingField2}` | Intended for the creative ID. `creative_id` is not in Start.io's macro list, which uses `startapp_creative_id`. See below. |
| Campaign ID | `campid` | `campaign_id` | `{trackingField3}` | Intended for the Start.io campaign ID. Start.io's macro list uses `startapp_campaign_id`. See below. |
| ISP/Carrier | `isp` | `startapp_isp_name` | `{trackingField4}` | The user's ISP or mobile carrier |
| Device Model | `model` | `startapp_device_model` | `{trackingField5}` | The device model |
| Device Brand | `brand` | `startapp_device_brand` | `{trackingField6}` | The device brand |
| OS Version | `os` | `startapp_os_version` | `{trackingField7}` | The operating system version |
| Connection Type | `connection` | `startapp_connection_type` | `{trackingField8}` | Wi-Fi or mobile data |
| Publisher Category | `category` | `startapp_publisher_category` | `{trackingField9}` | The app's category on Google Play or the App Store |
| Campaign Payment Model | `bid` | `bid_type` | `{trackingField10}` | Intended for the campaign's payment model. `bid_type` is not in Start.io's macro list. See below. |

![The Start.io template's Parameters table in ClickFlare, with Start.io's macros pre-filled](https://mintcdn.com/clickflare/Z7FseNUODe2P_cAH/images/integrations/templates/startio/parameters.png?fit=max\&auto=format\&n=Z7FseNUODe2P_cAH\&q=85\&s=3c2ac21215e917470de65e081a502493)

Each tracking field becomes a column you can group reports by. `appid` is the one you will use most: it tells you which publisher apps convert, so you can block or favor apps in Start.io. `category` and `connection` help you narrow targeting.

Three rows use macros that are not in Start.io's published list: Creative ID (`creative_id`), Campaign ID (`campaign_id`) and Campaign Payment Model (`bid_type`). Start.io only replaces the macros it knows, so these columns may show the literal words instead of values. Check them after the first clicks. If they show `creative_id` or `campaign_id`, change the **TS Token** to `startapp_creative_id` and `startapp_campaign_id`. If the payment model column shows `bid_type`, you can remove that row or reuse it for another macro.

> [!WARNING]
>
> Don't change or remove the `externalId` row. Without `startapp_click_id_placeholder` in the campaign URL, Start.io has no click ID to match, and no conversion reaches your Start.io portal.

To pass more Start.io data, click **Add Parameter**, give it a name and parameter, and enter the Start.io macro as the **TS Token**. ClickFlare assigns the next free tracking field. Start.io also offers `startapp_country`, `startapp_device_type` (phone or tablet), `startapp_adtype`, `startapp_creative_name`, `startapp_creative_size`, `startapp_advertising_id` (IDFA or GAID) and `startapp_idfv` (iOS only). Remember the rule: the parameter name must differ from the macro.

## Step 2 – Set up the postback

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

### Start.io's global postback

Start.io uses one global postback for all the campaigns in your account. There is nothing to generate per campaign: the postback only needs the click ID, in the `d` parameter. Start.io's own documentation shows it in this form, where `{aff_sub}` is your tracker's click ID token:

```text theme={null}
http://www.startappinstalls.com/trackinstall/selfservice?d={aff_sub}
```

In ClickFlare, the click ID token is `{external_id}`. There is no payout or event parameter.

### 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}
http://www.startappinstalls.com/trackinstall/clickflare?d={external_id}
```

It already sends the click ID (`{external_id}`) in Start.io's `d` parameter. There are no placeholders to replace.

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

3. Keep the URL as it is. The template uses a `/trackinstall/clickflare` path where Start.io's generic guide shows `/trackinstall/selfservice`. Run the test in Step 5 to confirm conversions arrive. If the test fails and ClickFlare's postback log shows the request was sent, change `clickflare` to `selfservice` in the URL and test again.
4. In the dropdown on the left, choose the ClickFlare event that should fire the postback. Keep **Conversions** to send every conversion. If the action Start.io should count is a custom conversion (for example `install`), choose that instead.
5. Click **Save**. You are back in the campaign editor with the Start.io traffic source selected.

> [!WARNING]
>
> Don't paste Start.io's example postback unchanged. Its `{aff_sub}` is not a ClickFlare token, and ClickFlare would send it as literal text. In ClickFlare the value after `d=` must always be `{external_id}`.

Start.io's postback carries no revenue, so your Start.io portal shows conversion counts only. Revenue and ROI stay in ClickFlare.

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 match how you buy on Start.io: **CPC** with your price per click, or **CPA** with your price per conversion. See [Cost](#cost).
3. Choose **Redirect** or **Direct** tracking. Redirect is the usual choice for in-app 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 Start.io macro from the template, for example `cid=startapp_click_id_placeholder` and `appid=startapp_app_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 Start.io.

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

## Step 4 – Create the campaign in Start.io

1. In the Start.io portal, create a campaign and choose the targeting, budget and bid as usual.
2. Paste the ClickFlare campaign URL into the campaign's tracking URL field.
3. Upload your creatives and submit the campaign.

Paste the URL exactly as ClickFlare gives it. Start.io's system doesn't support parentheses or brackets in tracking URLs, and the template's URL contains none on the Start.io side.

## Step 5 – Test the integration

Start.io has a conversion tracking test tool that validates the whole chain, from the click to the postback.

1. In the Start.io portal, open **Conversion tracking** in the left menu.
2. Click **Add your first conversion tracking validation** (or add a new test if you already have some).
3. Fill in the test:

| Field | What to enter |
| - | - |
| **Conversion test name** | A unique name, for example `ClickFlare test` |
| **Tracking URL** | Your ClickFlare campaign URL. It must contain `cid=startapp_click_id_placeholder`. |
| **Validation link** | Your email address or phone number. Start.io sends the test link there. |

4. Click **Save and validate**.
5. Open the test link Start.io sends you **on a mobile device**, and complete a real conversion on your lander or offer. If the conversion is an app install, the app must not already be on the device, and you must open the app after installing it.
6. Check the status in Start.io:

| Status | Meaning |
| - | - |
| **Pending Tracking Validation** | Start.io has not received the postback yet. Allow 15–30 minutes. |
| **Validated** | The integration works. |
| **Failed** | The test was not completed or no matching postback arrived. Check the steps below. |

7. In ClickFlare, go to **Logs → Postback Status** and filter by the campaign. A successful request to `startappinstalls.com` confirms ClickFlare sent it, with a real click ID after `d=`.

To retest, hover over the test in Start.io's list, click edit, and resend the test link.

***

## Tracking several events

Start.io's postback is global and has no event parameter, so Start.io can count only one kind of conversion. Choose the event that matters most for your campaign:

1. In ClickFlare, create a [custom conversion](/docs/en/settings/custom-conversions.md) for each step of your funnel, for example `install` and `purchase`.
2. On the Start.io traffic source, map the single postback to the event Start.io should count, for example `install`.
3. Leave the other events unmapped. They still show in ClickFlare.

> **Why not add a second postback?**
>
> You could add a second postback with **+ Another postback URL**, but Start.io would count both events as the same kind of conversion, with no way to tell them apart. Your Start.io conversion counts would mix installs and purchases. Keep one postback.

> **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. Conversions that don't match still show in ClickFlare.

## Cost

The template passes no cost. Start.io has no cost macro in its published list, so ClickFlare can't read the price of each click from the URL.

Set the campaign's **Cost Model** to match how you buy on Start.io:

* **CPC** when you pay per click. Enter your bid.
* **CPA** when you pay per install or action. Enter your price per conversion. ClickFlare then records cost only on conversions.
* For CPM buying, use **CPC** and enter your CPM bid divided by 1,000 as a starting point, then adjust it to your real cost per visit.

> [!NOTE]
>
> Don't use **Not Tracked** with this template. With no cost in the URL and no cost integration, every visit is recorded at zero cost, and your ROI looks better than it is.

ClickFlare has no Start.io cost-tracking API integration. When the recorded spend differs from your Start.io 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).

## Delayed revenue

If revenue reaches ClickFlare hours or days after the click, for example in-app purchases reported later by your attribution partner, ClickFlare records it on the original click. Start.io's postback carries no revenue, so there is nothing extra to send to Start.io. See [Sending Delayed Revenue to Traffic Sources](/docs/en/advanced-tracking-configuration/how-to-send-delayed-revenue-to-traffic-sources.md) for networks that accept it.

***

## Troubleshooting

> **Start.io's test stays Pending or shows Failed**
>
> * The test link was opened on a desktop. Open it on a mobile device.
> * The conversion was not completed, or the app was already installed on the test device.
> * The tracking URL in the test is missing `cid=startapp_click_id_placeholder`. Copy the URL from ClickFlare again.
> * The postback uses `{aff_sub}` or another non-ClickFlare token instead of `{external_id}`.
> * ClickFlare sent the postback (check **Logs → Postback Status**) but Start.io didn't credit it. Change `/trackinstall/clickflare` to `/trackinstall/selfservice` and test again.

> **Conversions show in ClickFlare but not in Start.io**
>
> * **Traffic source postback URL** is off on the Start.io 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 `externalId` row was removed or its macro edited, so `d=` arrives empty.
> * Check **Logs → Postback Status**: a failed request shows the status code Start.io returned.

> **A column shows creative\_id, campaign\_id or bid\_type**
>
> Start.io didn't replace the macro because it isn't one of its published macros. Change the row's **TS Token** to `startapp_creative_id` or `startapp_campaign_id`. For `bid_type`, remove the row or reuse it for another Start.io macro.

> **A column shows unknown**
>
> The parameter name and the macro are the same, for example `startapp_country=startapp_country`. Rename the **TS Parameter**, for example to `country`. See [Traffic Source Tokens Arriving Empty](/docs/en/troubleshooting/tokens-arriving-empty.md).

> **Cost column shows zero**
>
> The campaign's Cost Model is **Not Tracked**, and the template passes no cost. Switch to **CPC** or **CPA**, or upload your Start.io spend with a [manual cost upload](/docs/en/settings/manual-cost-upload.md).

For the general checklist, see [Conversions not showing](/docs/en/troubleshooting/conversions-not-showing.md).

***

**FREQUENTLY ASKED QUESTIONS**

> **Q1:** Is StartApp the same as Start.io?

**A1:** Yes. StartApp renamed itself Start.io. The macros still start with `startapp_`, the postback domain is still `startappinstalls.com`, and the ClickFlare template is still listed as **StartApp**.

> **Q2:** Can I use the same Start.io traffic source for all my Start.io campaigns?

**A2:** Yes. Start.io's postback is global for your account, so one traffic source with one postback covers every campaign. Create a second Start.io traffic source only if some campaigns should send a different event.

> **Q3:** Start.io lists Voluum, AppsFlyer, Adjust and other trackers, but not ClickFlare. Is that a problem?

**A3:** No. Those integrations only pre-fill the click ID macro for that tracker. The ClickFlare template does the same: it puts `startapp_click_id_placeholder` in the campaign URL and `{external_id}` in the postback.

> **Q4:** Why is it `cid` in the campaign URL and `d` in the postback?

**A4:** They are two halves of the same value. ClickFlare reads Start.io's click ID from its own `cid` parameter. Start.io expects it back in its own `d` parameter. Both names are fixed. Change neither.

> **Q5:** Can Start.io see my revenue?

**A5:** No. Start.io's postback has no payout parameter, so it receives conversion counts only. Use ClickFlare's reports, grouped by `appid`, to judge which apps are profitable.

## 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)**
>
> Choose which event Start.io counts.

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