Set Up Third-Party Measurement
Third-party trackers let you share data on impressions and clicks and validate delivery using an approved third-party partner. We'll tell you how to set them up. We'll also explain how to add dynamic parameters to your trackers with Reddit-supported macros.
Here are some of the measurement partners we're working with that are approved to track impressions and clicks on Reddit:
- Adjust
- AppsFlyer
- Branch
- Flashtalking
- Foursquare
- Gamesight
- Kochava
- Nielsen
- Singular
Add verification and tracking
When you create an ad on Reddit, you can add impression and click trackers from one of Reddit's approved measurement providers. We recommend adding both click and impression tracking:
- Click trackers: Record the number of times users click links in the ad.
- Impression trackers: Record the number of ad views.
Add a tracker by providing its URL and setting its type in Tracking to improve measurement and performance. These URLs should be customized to include macros. If you're using Google Campaign Manager, you should add campaign parameters instead. You can add more trackers or remove them by selecting Delete.
![]()
For more on measuring app install campaigns, check out:
Add macros to your tracker
With a little copy-and-paste action, you can match the parameters from your tracking partner's tag URL with Reddit-supported macros. These macros are little bits of code that will dynamically capture the data you specify and integrate it into your tracker URL. This lets you track impressions and clicks but doesn't directly track conversions.
1. Identify required parameters
Before adding macros, identify the parameters you need to pass on to the tag URL provided by your tracking partner. These parameters could include:
- Campaign ID
- Ad group ID
- Creative ID
- Timestamp
2. Select your macros
Once you've identified the parameters, select the corresponding macros from the list provided below. These macros will dynamically capture the data you specify and integrate it into your tracker URL.
The following table lists all possible supported macros:
All macros are case-sensitive.
| Reddit macro | Description | Example |
|---|---|---|
{{ADVERTISER_ID}} (string) | Reddit advertiser ID | t2_2abc03r6 |
{{ADVERTISING_ID}} (string) | iOS IDFA or Android GAID | d123679f-3b60-48e5-ac8b-912984af0629 |
{{IOS_ADVERTISING_ID}} (string) | iOS IDFA | 4ECE627C-5969-40C6-9DF1-19BC9212A222 |
{{ANDROID_ADVERTISING_ID}} (string) | Android GAID | d123679f-3b60-48e5-ac8b-912984af0629 |
{{CAMPAIGN_ID}} (integer) | ID of the campaign | 903951710329754359 |
{{ADGROUP_ID}} (integer) | ID of the group | 903951230329754359 |
{{ADGROUP_NAME}} (string) | Name of the ad group | Example_campaign_Name |
{{AD_ID}} (integer) | ID of the ad | 903951730488115583 |
{{AD_NAME}} (string) | Name of the ad | Example_ad_name |
{{POST_ID}} (string) | ID of the post | t3_6lebsh |
{{CLICK_ID}} (integer) | Reddit's click ID | 3001238223506745143 |
{{IMPRESSION_ID}} (integer) | Reddit's impression ID | 5245681233890908888 |
{{COUNTRY}} (string) | Country where the user is located. This should be the 2-letter ISO country code. |
|
{{OS_GROUP}} (string) | Operating system of the device. We replace this macro with exact values highlighted in bold in the example section |
|
{{DEVICE_GROUP}} (string) | Device type. We replace this macro with exact values highlighted in bold in the example section. |
|
{{PLATFORM_GROUP}} (string) | Platform type. We replace this macro with exact values highlighted in bold in the example section. |
|
{{CACHEBUSTER}} (integer) | Current UNIX or system timestamp in UTC | 1588918613259841324 |
{{CREATIVE_H}} (integer) | Height of the native ad post. | 250 |
{{CREATIVE_W}} (integer) | Width of the native ad post. | 300 |
{{DEVICE_OPT_OUT}} (boolean) | User has chosen to opt out of passing their advertising ID. 1 is true and 0 is false. | 1 or 0 |
3. Add macros to your click and impression trackers
Paste the macros into the tag using the parametername=[REDDIT_MACRO] format. Connect parameters with an ampersand (&) to ensure proper formatting. parametername should match the name of the parameter in your third-party tracker.
For example, to install a macro that matches the campaign, ad group ID, creative ID, and timestamp:
Remember to check your integrations to ensure there aren't any errors.
Use guidance provided by the tracker validator for quick fixes.
https://tag.demo.com/ads?campaign={{CAMPAIGN_ID}}&advID={{ADVERTISING_ID}}redditadgroup={{ADGROUP_ID}}&creative={{CREATIVE_ID}}×tamp={{CACHEBUSTER}}
Set up the Campaign Manager tracker in the destination URL
This step should only be used if you're measuring conversions in Google Campaign Manager. For clicks and impressions, use the dedicated tracker fields as shown above.
You can set up the CM360 tracker in the destination URL to track conversions, such as completing a purchase or filling out a form. We recommend this if you'd like to see your metrics in the CM360 dashboard.
1. Check your destination URL
You'll need to set the destination URL to the CM360 domain before redirecting to the final landing page. Routing through the CM360 domain ensures accurate tracking and ad click attribution.
To find this URL, navigate to CM360 and go to the tags for your ad. Your URL should look similar to the following:
https://ad.doubleclick.net/ddm/trackclk/N7480.131843REDDIT.COM/B9916847.380155424;dc_trk_aid=571094499;dc_trk_cid=204640122;dc_lat=;dc_rdid=;tag_for_child_directed_treatment=;tfua=;ltd=;dc_tdv=1
Check that the URL contains /trackclk. If you don't use /trackclk, tracking may be limited, which can affect your campaign performance retargeting, audiences, and reporting metrics like conversions.
2. (Optional) Set the display URL
By setting a display URL for your ad, you can enhance trust and clarity, leading to a smoother and more effective browsing experience for potential customers. You can change the display URL by selecting Edit Display URL.
Set this value to show the final landing page. This will be the link that redditors see for your ad. Unless you're using an approved click tracker, this must match the destination domain.
A preview of the display URL will be visible in the post preview.
3. Add click ID persistence
Before you start tracking your ad, it's important to add click ID persistence. This way, you can track conversions accurately. Without it, Reddit's click ID won't be attached to the destination URL for any Reddit ad, which can result in reporting conversion metric inaccuracies on the Reddit Ads dashboard.
To add click ID persistence, navigate to CM360. At the Advertiser or Campaign level, change the landing page URL suffix.). Ensure that it includes &rdt_cid=%prdt_cid=!;. Learn about the pattern match macro.
Add custom campaign parameters to the URL
This step is necessary if you're measuring conversions in Google Analytics or similar platforms. For clicks and impressions, use the dedicated tracker fields as shown above.
Add utm_source = Reddit to your advertising URL. This will let you identify traffic from Reddit in your Google Analytics data, helping you understand the effectiveness of your Reddit ads. Learn about URL builders or start using Google's Campaign URL Builder.
Validate your tracker
Not all measurement partners are currently supported by the validation tool.
While forming your tracker URL, the Ads Manager will list any issues found.
![]()
Malformed or incomplete trackers may affect:
- Attribution: Gives credit to an ad for influencing an action taken on your website. The attribution window decides how long after someone sees or clicks an ad to give credit for the action.
- Reporting: Shares campaign data—like impressions, clicks, and conversions—with your third-party measurement partner.
- Modeling: Powers Reddit’s campaign optimization by learning from your conversion data to improve ad delivery.
- Postbacks: Matches conversion data to your campaigns in the Ads Manager. When postback identifiers aren’t provided, Reddit will infer the match from other fields.
Trackers with attribution or postback issues can’t be saved. We strongly recommend fixing all issues to avoid incomplete or inaccurate data. See the list of solutions for possible fixes.
Supported measurement partners
- Adjust
- AppsFlyer
- Branch
- Kochava
- Singular
Reference: List of error messages
| Issue | Affects | Solution |
|---|---|---|
| The URL does not start with an expected domain for Adjust | All |
|
| Advertiser ID missing or malformed | Postbacks | reddit_advertiser_id={{ADVERTISER_ID}} |
| Campaign ID missing or malformed | Postbacks | reddit_campaign_id={{CAMPAIGN_ID}} |
| Campaign name malformed | Reporting | campaign={{CAMPAIGN_NAME}} |
| Ad group ID malformed | Postbacks | reddit_adgroup_id={{ADGROUP_ID}} |
| Ad group name malformed | Reporting | adgroup={{ADGROUP_ID}}_{{ADGROUP_NAME}} |
| Ad ID missing or malformed | Postbacks | reddit_ad_id={{AD_ID}} |
| Creative malformed | Reporting | creative={{AD_ID}}_{{AD_NAME}} |
| IDFA malformed | Attribution | idfa={{IOS_ADVERTISING_ID}} |
| GAID missing or malformed | Attribution | gps_adid={{ANDROID_ADVERTISING_ID}} |
| Click ID missing or malformed | Modeling | reddit_click_id={{CLICK_ID}} |
| External click ID missing or malformed (Android only) | Attribution | external_click_id=reddit_{{CLICK_ID}} |
| Redirect missing or malformed | Attribution | redirect=none |
| Impression ID malformed (impression tracker only) | Modeling | reddit_impression_id={{IMPRESSION_ID}} |
Example: Valid click tracker
https://app.adjust.com/[ADJUST_ID]?gps_adid={{ANDROID_ADVERTISING_ID}}&reddit_advertiser_id={{ADVERTISER_ID}}&reddit_click_id={{CLICK_ID}}&reddit_adgroup_id={{ADGROUP_ID}}&reddit_campaign_id={{CAMPAIGN_ID}}&reddit_ad_id={{AD_ID}}&redirect=none&external_click_id=reddit_{{CLICK_ID}}
Example: Valid impression tracker
https://view.adjust.com/impression/[ADJUST_ID]?gps_adid={{ANDROID_ADVERTISING_ID}}&reddit_advertiser_id={{ADVERTISER_ID}}&reddit_campaign_id={{CAMPAIGN_ID}}&reddit_adgroup_id={{ADGROUP_ID}}&reddit_ad_id={{AD_ID}}&reddit_click_id={{CLICK_ID}}&redirect=none
Reference: List of error messages
| Issue | Affects | Solution |
|---|---|---|
| The URL does not start with an expected domain for AppsFlyer | All |
|
| Advertiser ID missing or malformed | Postbacks | af_siteid={{ADVERTISER_ID}} |
| Campaign ID missing or malformed | Postbacks | af_c_id={{CAMPAIGN_ID}} |
| Campaign name malformed | Reporting | c={{CAMPAIGN_NAME}} |
| Ad group ID missing or malformed | Postbacks | af_adset_id={{ADGROUP_ID}} |
| Ad group name malformed | Reporting | af_adset={{ADGROUP_NAME}} |
| Ad ID missing or malformed | Postbacks | af_ad_id={{AD_ID}} |
| Ad name malformed | Reporting | af_ad={{AD_NAME}} |
| IDFA malformed | Attribution | idfa={{IOS_ADVERTISING_ID}} |
| GAID missing or malformed | Attribution | advertising_id={{ANDROID_ADVERTISING_ID}} |
| Click ID missing or malformed | Modeling | clickid={{CLICK_ID}} |
| Android Referrer missing or malformed (click tracker only) | Attribution | af_ref=reddit_{{CLICK_ID}} |
| Reddit advertiser ID missing or malformed | Postbacks | af_siteid={{ADVERTISER_ID}} |
| PID missing or invalid | Attribution | pid=reddit_int |
| Redirect missing or malformed | Attribution | redirect=false |
| Impression ID malformed (impression tracker only) | Modeling | impression_id={{IMPRESSION_ID}} |
| Missing or malformed cachebuster | N/A | cachebuster={{CACHEBUSTER}} |
| Malformed media type (iOS only) | N/A | af_media_type={{AF_PLATFORM_TYPE}} |
Example: Valid click tracker
https://app.appsflyer.com/[YOUR_APP_ID]?af_ad_id={{AD_ID}}&af_adset_id={{ADGROUP_ID}}&af_c_id={{CAMPAIGN_ID}}&clickid={{CLICK_ID}}&advertising_id={{ANDROID_ADVERTISING_ID}}&cachebuster={{CACHEBUSTER}}&pid=reddit_int&af_ref=reddit_{{CLICK_ID}}&af_siteid={{ADVERTISER_ID}}&redirect=false
Example: Valid impression tracker
https://impression.appsflyer.com/[YOUR_APP_ID]?pid=reddit_int&af_siteid={{ADVERTISER_ID}}&af_ad_id={{AD_ID}}&af_adset_id={{ADGROUP_ID}}&af_c_id={{CAMPAIGN_ID}}&advertising_id={{ANDROID_ADVERTISING_ID}}&cachebuster={{CACHEBUSTER}}&clickid={{CLICK_ID}}&redirect=false
Reference: List of error messages
| Issue | Affects | Solution |
|---|---|---|
| The URL does not start with an expected domain for Branch | All |
|
| Third-party advertiser parameter is missing or malformed | Attribution | %243p=a_reddit |
| Advertiser ID missing or malformed | Postbacks | ~secondary_publisher_id={{ADVERTISER_ID}} |
| Campaign ID missing or malformed | Postbacks | ~campaign_id={{CAMPAIGN_ID}} |
| Campaign name malformed | Reporting | campaign={{CAMPAIGN_NAME}} |
| Ad group ID missing or malformed | Postbacks | ~ad_set_id={{ADGROUP_ID}} |
| Ad group name malformed | Reporting | ~ad_set_name={{ADGROUP_NAME}} |
| Ad ID missing or malformed | Postbacks | ~ad_id={{AD_ID}} |
| Ad name malformed | Reporting | ~ad_name={{AD_NAME}} |
| GAID missing or malformed | Attribution | %24aaid={{ANDROID_ADVERTISING_ID}} |
| Click ID missing or malformed | Modeling | ~click_id={{CLICK_ID}} |
| Server to server flag missing or malformed | Attribution | %24s2s=false |
| Branch key missing or malformed (impression only) | Reporting | branch_key=key_live_[BRANCH_KEY_ID] |
| Impression ID malformed (impression tracker only) | Modeling | impression_id={{IMPRESSION_ID}} |
Example: Valid click tracker
https://[YOUR_ADVERTISER_APP_DOMAIN].app.link/[BRANCH_ID]?%243p=a_reddit&%24aaid={{ANDROID_ADVERTISING_ID}}&%24s2s=false&~ad_id={{AD_ID}}&~ad_name={{AD_NAME}}&~ad_set_id={{ADGROUP_ID}}&~ad_set_name={{ADGROUP_NAME}}&~campaign_id={{CAMPAIGN_ID}}&~click_id={{CLICK_ID}}&~secondary_publisher_id={{ADVERTISER_ID}}&impression_id={{IMPRESSION_ID}}&~campaign={{CAMPAIGN_NAME}}
Example: Valid impression tracker
https://impression.link/impression?branch_key=[BRANCH_ID]&%243p=a_reddit&%24aaid={{ANDROID_ADVERTISING_ID}}&%24s2s=false&~ad_id={{AD_ID}}&~ad_name={{AD_NAME}}&~ad_set_id={{ADGROUP_ID}}&~ad_set_name={{ADGROUP_NAME}}&~branch_ad_format=App%20Only&~campaign_id={{CAMPAIGN_ID}}&~click_id={{CLICK_ID}}&~feature=paid%20advertising&~secondary_publisher_id={{ADVERTISER_ID}}&impression_id={{IMPRESSION_ID}}&~campaign={{CAMPAIGN_NAME}}
Reference: List of error messages
| Issue | Affects | Solution |
|---|---|---|
| The URL does not start with an expected domain for Kochava | All |
|
| Advertiser ID missing or malformed | Postbacks | advertiser_id={{ADVERTISER_ID}} |
| Network ID missing or invalid | Attribution |
|
| Campaign ID missing or malformed | Postbacks | campaignID={{CAMPAIGN_ID}} |
| Campaign name malformed | Reporting | partner_campaign_name={{CAMPAIGN_NAME}} |
| Ad group ID missing or malformed | Postbacks | adgroup_id={{ADGROUP_ID}} |
| Ad group name malformed | Reporting | sub_campaign_name={{ADGROUP_NAME}} |
| Ad ID missing or malformed | Postbacks | ad_id={{AD_ID}} |
| Ad name missing or malformed (click tracker only) | Reporting | ad_name={{AD_NAME}} |
| Creative ID missing or malformed | Reporting | creative_id={{AD_ID}} |
| IDFA malformed | Attribution | device_id={{IOS_ADVERTISING_ID}} |
| GAID missing or malformed | Attribution | device_id={{ANDROID_ADVERTISING_ID}} |
| Click ID missing or malformed (click tracker only) | Modeling | click_id={{CLICK_ID}} |
| Android referrer missing or malformed (click tracker only) | Attribution | utm_source=reddit_{{CLICK_ID}} |
| Server to server flag missing or malformed (click tracker only) | Attribution | pbr=1 |
| SKAdNetwork source ID malformed (iOS only) | Reporting | skad_source_identifier={{{SKAN_SOURCE_ID}} |
| Kochava Platform Type malformed | Reporting | ad_platform={{KCH_PLATFORM_TYPE}} |
Example: Valid click tracker
https://control.kochava.com/v1/cpi/click?adgroup_id={{ADGROUP_ID}}&advertiser_id={{ADVERTISER_ID}}&network_id=7177&ad_id={{AD_ID}}&ad_name={{AD_NAME}}&campaignID={{CAMPAIGN_ID}}&click_id={{CLICK_ID}}&creative_id={{AD_ID}}&device_id={{ANDROID_ADVERTISING_ID}}&pbr=1&utm_source=reddit_{{CLICK_ID}}
Example: Valid impression tracker
https://imp.control.kochava.com/track/impression?&device_id={{ANDROID_ADVERTISING_ID}}&advertiser_id={{ADVERTISER_ID}}&&ad_id={{AD_ID}}&network_id=7177&adgroup_id={{ADGROUP_ID}}&campaignID={{CAMPAIGN_ID}}&creative_id={{AD_ID}}
Reference: List of error messages
| Issue | Affects | Solution |
|---|---|---|
| The URL does not start with an expected domain for Singular | All |
|
| Advertiser ID missing or malformed | Postbacks | reddit_advertiser_id={{ADVERTISER_ID}} |
| Campaign ID missing or malformed | Postbacks | pcid={{CAMPAIGN_ID}} |
| Campaign name missing or malformed (impression tracker only) | Reporting | pcn={{CAMPAIGN_NAME}} |
| Ad group ID missing or malformed | Postbacks | pscid={{ADGROUP_ID}} |
| Ad ID missing or malformed | Postbacks | pcrid={{AD_ID}} |
| IDFA malformed | Attribution | idfa={{IOS_ADVERTISING_ID}} |
| GAID missing or malformed | Attribution | aifa={{ANDROID_ADVERTISING_ID}} |
| Click ID missing or malformed | Modeling | cl={{CLICK_ID}} |
| Redirect missing or malformed | Attribution | redirect=false |
| Impression ID malformed (impression tracker only) | Modeling | reddit_impression_id={{{IMPRESSION_ID}} |
Example: Valid click tracker
https://[YOUR_ADVERTISER_APP_DOMAIN].sng.link/[SINGULAR_ID]?aifa={{ANDROID_ADVERTISING_ID}}&pscid={{ADGROUP_ID}}&redirect=false&pcid={{CAMPAIGN_ID}}&pcrid={{AD_ID}}&reddit_advertiser_id={{ADVERTISER_ID}}&cl={{CLICK_ID}}
Example: Valid impression tracker
https://i.sng.link/[SINGULAR_ID]?aifa={{ANDROID_ADVERTISING_ID}}&redirect=false&cl={{CLICK_ID}}&pcid={{CAMPAIGN_ID}}&pcrid={{AD_ID}}&pscid={{ADGROUP_ID}}&reddit_advertiser_id={{ADVERTISER_ID}}&pcn={{CAMPAIGN_NAME}}