Tracking Links
Your campaign's tracking link is where we hand the user off to you. It must carry our click identifier so that the conversion you report later can be matched back to the original click.
The click ID macro
Include the {user_id} macro anywhere in your tracking URL. At redirect time we replace it
with the click's tracking code.
https://app.appsflyer.com/id123456789?pid=adplusmedia&clickid={user_id}
A tracking link without {user_id} will not be accepted. Without it, every conversion you
report arrives with no click to attach to and is rejected with Click not found.
What the click code looks like
Each click receives a short, opaque tracking code. It is not our internal database ID, which is never exposed.
| Property | Value |
|---|---|
| Length | 8 characters |
| Alphabet | Uppercase letters and digits, excluding 0, O, 1, I and L |
| Example | K7M2XQ9A |
| Stability | Assigned once at click time and never changes |
The ambiguous characters are excluded on purpose so codes survive being read aloud, retyped or pasted out of a support ticket without transcription errors.
Round trip
-
A publisher's user clicks your offer
We validate the placement, run VPN and proxy checks, and confirm country and device targeting.
-
We create the click
A tracking code is generated and stored against the publisher, the user and the offer.
-
We redirect to your tracking link
Your
{user_id}macro is replaced with the tracking code and the user is forwarded. -
Your MMP fires a postback
You send the same code back as
clickid. See MMP Postbacks. -
We settle and pay out
The conversion is priced from your campaign event and the publisher's postback is fired.
Encoding rules
We do not URL-decode your tracking link before substituting the macro. Percent-encoded deep-link parameters are preserved exactly as you entered them, so build your URL in its final encoded form.
Deep links
When your link contains a nested destination URL, encode the inner URL but leave the macro itself unencoded:
https://app.appsflyer.com/id123456789?pid=adplusmedia&clickid={user_id}&af_dp=myapp%3A%2F%2Fproduct%2F42
Redirect behaviour
The final hop to your tracking link is performed in the browser rather than as an HTTP 302. This preserves the user agent and lets us apply fraud checks before the handoff.
Your tracking link must be reachable directly from a browser. Endpoints that require a specific
Referer, reject unknown user agents, or depend on a server-to-server call will not work.
Testing your link
- Open the link with a real value substituted for
{user_id}and confirm it resolves. - Check that your MMP records the value in the field you will send back as
clickid. - Fire a test postback with that click code and confirm you receive
Postback Handled Successfully. - Confirm the event name you send exactly matches an event configured on your campaign.
Event names are matched exactly, including case. A campaign configured for purchase will
reject a postback reporting Purchase with Unknown event for this campaign.