Sub-IDs and Sub-Publishers on Tracking Links
How subid tracking works on app tracking links: what to put in sub-IDs, one link for all sub-publishers or many, and the sub-ID parameters for each MMP.
Sub-IDs are optional parameters that carry your own breakdown of the traffic, such as sub-publisher or placement. Use one link and fill the sub-publisher through a macro: af_sub_siteid on AppsFlyer, sub_id on Airbridge, ~secondary_publisher on Branch.
What is a sub-ID?
A sub-ID is an optional parameter on a tracking link that carries your own breakdown of the traffic, such as the sub-publisher, placement or creative, so you can see it in the MMP's reports and get it back in postbacks.
Sub-publisher: a site, app or partner that runs your traffic underneath you, such as a publisher in your network or an affiliate's own affiliate.
Passthrough value: a value the MMP stores and sends back unchanged in the postback, without using it to decide attribution.
Sub-IDs answer "which part of my traffic converted?" The click ID answers "which click converted?" Keep them separate: a click ID is unique per click, while a sub-ID repeats across many clicks.
What to put in sub-IDs
Typical uses, from most to least common:
- Sub-publisher or site ID
- Placement or ad slot
- Creative or offer variant
- Your internal campaign ID
- A deduplication or batch value
Keep values short, stable and URL-safe. A sub-ID that changes on every click is really a click ID; a sub-ID that never changes adds nothing.
Do not put personal data in sub-IDs: no email addresses, phone numbers or user names. Values are copied into reports and postbacks. For apps in India, this page on personal data in attribution explains why advertisers are careful about what attribution tools collect.
Should each sub-publisher get its own link?
Usually not: one campaign link with the sub-publisher ID filled by your macro keeps every sub-publisher in one campaign, and the MMP still reports and returns each one separately.
| Approach | When it fits | Cost |
|---|---|---|
| One link, sub-publisher in a sub-ID | Most networks and affiliate platforms | None; the macro fills the value per click |
| Separate link per sub-publisher | The advertiser wants a separate campaign or payout per sub-publisher | More links to create, test and keep in sync |
AppsFlyer's link structure shows the pattern: af_siteid for the publisher and af_sub_siteid for the sub-publisher or placement, both on the same link. Airbridge does the same with sub_id to sub_id_3, used in order of sub-network level, and Linkrunner's partner documentation also recommends one link for all sub-publishers.
Sub-ID parameters by MMP
Every name below comes from the vendor's own documentation, checked 25 Oct 2026.
| MMP | Sub-ID and passthrough parameters | What is documented |
|---|---|---|
| AppsFlyer | af_siteid, af_sub_siteid, af_sub1 to af_sub5 | af_siteid up to 24 characters; af_sub1 to af_sub5 up to 100 each |
| Branch | ~secondary_publisher, ~sub_site_name, ~placement | Secondary publisher is passed by the ad network |
| Airbridge | sub_id, sub_id_1, sub_id_2, sub_id_3 | Four, used in order of sub-network level |
| Adjust | adgroup (often the sub-publisher), label | label comes back through the {label} callback placeholder |
| Tenjin | tenjin_parameter_0 to tenjin_parameter_5 | Six passthrough slots returned in callbacks |
| AppMetrica | afpub_id (sub-partner), site_id (placement) | Any parameter can be forwarded to the postback |
| Linkrunner | s2, s3, s4 | Three slots, returned in postbacks as {s2}, {s3}, {s4} |
| Kochava | site_id | Click URL names for custom parameters not confirmed |
| Singular | Not confirmed | Ask the advertiser for their template |
The AppsFlyer link format and Airbridge link format pages show these parameters in a full example link.
A worked example with AppsFlyer
A network running one offer through many sub-publishers keeps pid and c exactly as the advertiser set them, puts its own publisher ID in af_siteid and fills the sub-publisher in af_sub_siteid. This starts from the ad network template in AppsFlyer's documentation:
https://app.appsflyer.com/com.yourapp?pid=mediaName_int&c={Campaign}&clickid={clickid}&af_siteid={publisher_id}&af_sub_siteid={sub_publisher_id}
After the platform fills it in for one click:
https://app.appsflyer.com/com.yourapp?pid=mediaName_int&c=diwali_offer&clickid=7f3k9q2m&af_siteid=net_88&af_sub_siteid=pub_1042
AppsFlyer does not allow characters such as &, =, / or % in parameter values, which rules out encoded spaces too, so send the sub-publisher as an ID such as pub_1042 rather than a name. IDs made of letters, numbers, hyphens and underscores are the safest choice on any MMP.
Whether the values come back in your postback depends on the MMP: Tenjin returns its six passthrough parameters in callbacks, Adjust returns label through the {label} placeholder, and AppMetrica can forward any parameter by name.
Common sub-ID mistakes
- Putting the sub-publisher in the click ID. The postback can then no longer be matched to a single click.
- Using a parameter name the MMP does not read. On AppsFlyer, an undocumented
sub1is just a custom parameter and does not appear in raw data; the documented name isaf_sub1. - Leaving a macro unfilled. Reports then show one row named
{sub_publisher_id}. See tracking link macros. - Running out of slots. AppsFlyer has five custom subs plus site IDs, Tenjin six, Airbridge four and Linkrunner three. Decide which value goes where before launch.
- Changing what a slot means mid-campaign. Old and new meanings then mix in the same report column.
You can fill sub-IDs and see each one explained in the tracking link generator. For influencer and affiliate programmes that also send users to a specific screen, this guide to deep linking for influencer and affiliate campaigns covers the advertiser's side.
Questions
What is the difference between a sub-ID and a click ID?
A click ID is unique to one click and identifies the exact conversion you are paid for. A sub-ID repeats across many clicks and tells you which publisher, placement or creative the traffic came from.
How many sub-IDs can I pass?
It depends on the MMP. AppsFlyer has five custom sub parameters plus site and sub-site IDs, Tenjin six passthrough parameters and Airbridge four sub-ID parameters.
Do sub-IDs come back in the postback?
On several MMPs, yes. Tenjin returns its six passthrough parameters in callbacks, Adjust returns label through a callback placeholder, and AppMetrica can forward any click parameter to the postback.
Can I invent my own parameter names?
Some MMPs accept extra custom parameters, but they may not reach reports. AppsFlyer, for example, says other custom parameters do not appear in raw data, so use the documented sub-ID names first.
Should I pause a bad sub-publisher by changing the link?
No. A shared link serves every sub-publisher, so changing it affects all of them. Block the source in your own platform and use the sub-ID data to show the advertiser what you removed.
Is it safe to put user data in a sub-ID?
No. Sub-IDs are copied into reports and postbacks, so keep them to publisher, placement and campaign identifiers. Never pass emails, phone numbers or names.