The one parameter AppsFlyer requires
An app marketer building an AppsFlyer attribution link can skip most fields, but not this one. AppsFlyer, the mobile attribution platform, says: "Among all available attribution link parameters, PID is mandatory. The PID is the unique identifier of the media source allocated by AppsFlyer." Leave it off and the user "is automatically attributed to a 'None' media source, and the original installation source is gone." One caution: pid is a short, common key, and plenty of other sites use the same three letters for their own purposes. Everything below is about AppsFlyer's pid.
Reading the value
Each integrated partner has a reserved pid ending in _int. AppsFlyer names googleadwords_int for Google, facebook_int for Meta ads and twitter_int for X Ads, plus organic. For sources that are not integrated partners, such as email or SMS, the advertiser picks its own name, and AppsFlyer suggests values like owned_email or sms_push. It blocks custom sources that reuse a reserved self-reporting network name. So pid=greatnetwork_int points to an integrated ad network, while pid=owned_email points to the advertiser's own email.
Characters that break it
AppsFlyer lists the characters a pid cannot contain: / < > * & ? \. Use one and the click or install lands in the dashboard under af_invalid_param, goes unattributed, and deep linking stops working on that click. Spaces should be avoided or URL encoded. Case matters as well: AppsFlyer warns that pid=MyMediaSource on one link and pid=mymediasource on another can cause data discrepancies.
Why it shows up on web pages
AppsFlyer forwards pid and the campaign parameter c from an attribution link to the page it redirects to, unless the link sets af_base_params_forward=false. Its web attribution also reads pid straight from a landing page URL. When a URL carries both pid and utm_source, pid takes priority for AppsFlyer while other tools still read the UTM tags, and without pid it falls back to utm_source. A visitor loses nothing by removing pid, since it only names a marketing channel. The advertiser loses the source for that click. Labels the advertiser adds for its own reports go in af_sub1 through af_sub5.