Skip to content
Browse documentation

Mobile app tracking (AppsFlyer, Adjust, Branch, Singular, Kochava)

Run app-install offers through a mobile measurement partner — click URL presets, install and in-app event postbacks, and server-to-server click forwarding.

Last updated 5 min read

On this page

App-install offers are measured by the advertiser's mobile measurement partner (MMP): AppsFlyer, Adjust, Branch, Singular or Kochava. The MMP attributes the install on the device; TrackCrown records the partner's click, passes its click ID to the MMP, and receives the install and in-app events back as postbacks. The conversion is credited to the partner and sub IDs of the original click.

Presets for all five MMPs are on Tracking → Integrations → Mobile apps (https://app.trackcrown.com/app/integrations?tab=apps). They are built for your first active tracking domain and the first offer of the workspace; replace the offer code where needed.

How the flow works#

  1. The partner's visitor clicks https://trackcrown.com/r/OFFERCODE/PARTNERCODE?sub1=….
  2. TrackCrown records the click and redirects to the offer's destination — the MMP's click URL — with {click_id} filled in.
  3. The MMP records the click with our click ID and sends the user to the app store.
  4. After the install (and later in-app events) the MMP calls our postback URL with the click ID.
  5. TrackCrown attributes the install to the click and fires the partner's postbacks.

Set up an offer#

  1. Create the offer (Offers → Offers → New offer) with Conversion tracking set to Server postback or pixel or Server postback only.
  2. On the offer's Events tab, create an event with code install, plus one event per in-app event you will receive (for example purchase, registration). The event code in the postback must match exactly, otherwise the postback is refused with unknown event "…" for this offer.
  3. Set the offer's Destination URL to the MMP click URL from the preset, replacing the upper-case placeholders (APP_ID, TRACKER_TOKEN, PARTNER_int, …) with the advertiser's values.
  4. Paste the Install postback and In-app event postback into the MMP's partner configuration. Replace TOKEN with the workspace postback token (Settings → Postback tokens; admins see it filled in) or the advertiser's token.

Presets#

Each card shows three fields: Offer destination URL (click), Install postback and In-app event postback. Our macros are in curly braces ({click_id}, {aff_id}, {sub1}); the MMP's own macros are written in its syntax.

MMPClick URL (offer destination)Click ID returned as
AppsFlyerhttps://app.appsflyer.com/APP_ID?pid=PARTNER_int&c={sub1}&af_siteid={aff_id}&af_sub1={sub2}&clickid={click_id}{clickid}
Adjusthttps://app.adjust.com/TRACKER_TOKEN?click_id={click_id}&campaign={sub1}&adgroup={aff_id}&creative={sub2}{click_id} (forward it as a partner parameter)
Branchhttps://APP.app.link/LINK?~click_id={click_id}&~campaign={sub1}&~channel={aff_id}&~feature=affiliate${(last_attributed_touch_data.~click_id)!}
Singularhttps://APP.sng.link/LINK?cl={click_id}&psid={aff_id}&pcn={sub1}{cl}
Kochavahttps://control.kochava.com/v1/cpi/click?campaign_id=CAMPAIGN_ID&network_id=NETWORK_ID&site_id={aff_id}&click_id={click_id}&creative_id={sub1}{click_id}

AppsFlyer install postback, as generated:

URL
https://trackcrown.com/pb?click_id={clickid}&offer_id=OFFERCODE&event=install&token=TOKEN

AppsFlyer in-app event postback with revenue:

URL
https://trackcrown.com/pb?click_id={clickid}&offer_id=OFFERCODE&event={event_name}&amount={event_revenue}&currency={event_revenue_currency}&token=TOKEN

Notes per MMP (shown on the cards):

  • AppsFlyer — integrated partner or custom attribution link. "Create an event with the same code on the offer for every in-app event you forward."
  • Adjust — "In Adjust, forward click_id as a partner parameter so it is available in callbacks."
  • Branch — "Branch webhooks use Freemarker; keep the expressions as shown."

amount is the sale amount used by percentage (CPS) payouts; currency is converted to the offer currency when it differs (Currencies & FX). Full parameter list: S2S postback.

Server-to-server click forwarding#

Some setups send the visitor straight to the app store page (the offer's destination is the store URL) and report the click to the MMP from the server instead. Server-to-server click forwarding, on the same tab, does this: for every partner click of the offer, the worker calls the MMP's click URL a few seconds later.

Turn it on for an offer#

  1. In Server-to-server click forwarding, choose the Offer.
  2. Enter the Partner click URL. It must start with https://, contain no spaces and include {click_id} ("Include {click_id} so the partner can send it back in its postback."). Example:
URL
https://app.appsflyer.com/APP_ID?pid=PARTNER_int&clickid={click_id}&advertising_id={gaid}&af_ip={ip}&af_ua={user_agent}
  1. Click Save. Forwarding starts with clicks from now on; earlier clicks are never replayed.

To turn forwarding off, save an empty Partner click URL for the offer.

Macros in the partner click URL#

MacroValue
{click_id}, {transaction_id}The click ID
{ip}Visitor IP address
{user_agent}Visitor user agent
{aff_id}, {affiliate_id}Partner ID
{offer_id}Offer ID
{sub1} … {sub5}, {source_id}Partner sub IDs
{country}, {device}, {os}Click country, device type and OS
{idfa}From the click parameter idfa or ios_ifa
{gaid}From gaid, google_aid, aaid or advertising_id
{device_id}{idfa} when present, else {gaid}
{timestamp}Unix time of the forwarding request

Device IDs are only available when the partner adds them to the tracking link, for example …/r/OFFERCODE/PARTNERCODE?gaid={partner_device_macro}.

Which clicks are forwarded#

RuleValue
Link typesAffiliate (/r/) and smart-link (/s/) clicks
Click statusOnly clicks that were redirected to the offer (not fallback, not rejected)
BotsNever forwarded
Transparent (Google Ads) clicksNever forwarded
Offer and workspaceBoth must be active
TimingEvery 15 seconds, clicks older than 5 seconds, up to 500 per offer per run
RequestGET, 10-second timeout; any 2xx answer counts as sent

Each forwarding row shows sent and failed counts, how far forwarding has progressed ("up to …") and the last error. A failed request is counted and not retried; forwarding moves on to the next click.

Test the setup#

  1. Open the partner's tracking link on a phone. Check in Reporting → Clicks that the click is redirect and the destination shows the MMP URL with the click ID.
  2. Install the app (or use the MMP's test tools) and check Reporting → Postback log → Received for the MMP's postback and its answer.
  3. Check Reporting → Conversions for the install conversion attributed to the partner.
Something unclear or missing in this article?Tell us