Reddit Pixel
Reddit Pixel is Reddit's browser tag for measuring conversions from Reddit Ads campaigns. This destination loads the Reddit pixel in the browser and forwards page views, product, and purchase events to Reddit. For server-side measurement that is unaffected by ad blockers, see the Reddit Conversions API destination.
Getting Started
This is a device-mode destination. The Reddit pixel is loaded automatically — no manual script installation is required. You will need:
- Pixel ID — the identifier for your Reddit pixel, found in the Reddit Ads dashboard under Events Manager. It starts with t2_.
Connecting to the Reddit Pixel CDP Destination
- Log into the Chord data platform.
- Navigate to the CDP.
- Click the "Add" button next to Destinations.
- Select Reddit Pixel from the destination catalog.
- Enter the destination name and your Pixel ID.
- Optionally enable Advanced Matching (see below).
- Click "Create" to connect.
Using Alongside the Reddit Conversions API Destination
The Reddit Pixel and the Reddit Conversions API destination are designed to run together, and Reddit recommends it — the pixel captures browser context and the click ID, while the server-side destination reports conversions that ad blockers or browser tracking restrictions would otherwise hide.
Both destinations must be configured with the same Pixel ID. Chord sends each event's unique message ID as the deduplication key on both surfaces, and Reddit deduplicates on the combination of that key and the event name. Running both therefore does not double-count conversions, and no extra configuration is needed to make deduplication work.
Deduplication
Every event this destination sends carries Chord's unique message ID for that event in Reddit's conversionId field. The Reddit Conversions API destination sends the same value as conversion_id, which is what lets the two run together safely.
This matters if you send events to Reddit from anywhere else as well — your own pixel, another tool, or a platform app. Reddit deduplicates on the combination of the conversion ID and the event name, so to deduplicate against Chord's events you must send the same conversion ID for the same underlying action. If you cannot, expect Reddit to count those conversions twice.
Event Mapping
Chord Event | Reddit Event |
|---|---|
page | PageVisit |
identify | no event — identity is sent through Advanced Matching |
Product Viewed | ViewContent |
Products Searched | Search |
Product Added | AddToCart |
Product Added to Wishlist | AddToWishlist |
Order Completed | Purchase |
Email Captured | Lead |
Signed Up | SignUp |
Purchase Events
Order Completed fires Reddit's Purchase event with the order total, currency, item count, transaction ID, and a product list carrying each line item's ID, name, and category.
Two cases are skipped rather than sent, and both log a message to the browser console:
- An order with no products. An empty cart produces a conversion with no basket, which distorts Reddit's reporting.
- An order with no order ID. Reddit deduplicates purchases by transaction ID, so a purchase without one risks being counted more than once.
Currency values are sent as decimal amounts — 49.99 means $49.99, not 49.99 cents.
Advanced Matching
Advanced Matching sends identifiers Reddit calls match keys to improve the share of conversions Reddit can attribute. It is off by default; enable it in the destination configuration.
Chord sends every match key Reddit accepts, and each one is SHA-256 hashed in the browser before it leaves the page — Reddit treats a pre-hashed value identically to one it hashes itself:
Match key | Source |
|---|---|
the visitor's email address | |
phoneNumber | the visitor's phone number, in E.164 form |
externalId | your customer ID for the visitor |
aaid / idfa | mobile advertising ID, when present |
Nothing is sent in plaintext. Reddit's own setup wizard shows a snippet that passes these in plaintext; that snippet is for a manual pixel install and does not apply here.
Reddit honours only the first initialization on a page. Identity is attached at that moment and cannot be updated afterwards, which has one practical consequence:
- A visitor who is already signed in when the page loads is matched, because their email is present on the first event.
- A visitor who arrives anonymously and then signs in is not matched for that page.
The Reddit Conversions API destination has no such constraint — server-side events carry whatever identity is known at the time each event is sent. If matching coverage matters to you, run both destinations.
Content Security Policy
If your storefront sets a Content Security Policy, the Reddit pixel will not load until Reddit's hosts are allowed. The symptom is silence — no pixel, no events, and a Refused to load error in the browser console.
Directive | Host |
|---|---|
script-src | https://www.redditstatic.com |
Reddit's pixel also makes network calls once loaded. Those hosts are not published by Reddit and are best read off your own browser console during setup: load a page with the pixel active, fire a conversion event, and add any host named in a CSP violation. If your policy already allows Reddit's beacon endpoints you will see no violations at all.
Custom Properties
Property mappings configured on the connection are forwarded, and the destination path does not need a properties. prefix — a mapping of properties.customer_type → customer_type is enough. Mapped properties never overwrite the fields Reddit defines itself: a mapping targeting value or transactionId is ignored in favour of the order's real values.
What Reddit does with them is undocumented, so do not build on them. Reddit publishes a fixed list of event metadata — conversion_id, currency, item_count, value and products — and unlike Meta or TikTok it offers no general-purpose container for extra fields. Additional keys are accepted without error, but Reddit does not document them being stored, reported on, or usable for audience building, and we have not been able to confirm that they are.
Treat a mapped custom property as best-effort: harmless to send, but not something to rely on for reporting or targeting. If you need Reddit to act on an event that its standard set does not cover, register a Custom event in your Reddit account instead — that mechanism is documented, and it is what Reddit's own tooling exposes.
Gotchas
Reddit's event set is fixed. Reddit recognizes only the eight standard events in the mapping table above. Chord events with no Reddit equivalent — Checkout Started, Product Removed, Order Refunded — are skipped, and the reason is logged to the browser console. Reddit does support a Custom event type, but a custom event is discarded unless its name is registered in your Reddit account first, so Chord does not send one.
Revenue metadata is only sent on revenue events. Reddit validates event metadata per event type, marks value, currency and item count as applying to revenue-related events only, and reports anything else as "Unsupported metadata" in Events Manager. Product Viewed is not a revenue event, so Chord sends product details and the deduplication ID but no value, currency or item count. Purchase, Add to Cart and Add to Wishlist carry the full set. Product details are always sent, which is what Dynamic Product Ads requires.
Refunds are not reported. Reddit has no refund event on either the pixel or the Conversions API, so Order Refunded is not forwarded on either surface.
Search terms are not sent. Reddit's Search event takes no query parameter, so Products Searched reports that a search happened but not what was searched for.
Reddit's Events Manager lags by several minutes. An event that has genuinely been delivered can take roughly five minutes to appear in the Events overview. When verifying a setup, confirm delivery in the browser (the pixel's network call) or in Chord's Live Events first, and treat Reddit's dashboard as a slower second confirmation — not as evidence that nothing arrived.
Consent gating applies. If the destination is configured with required consent categories, no Reddit call is made for visitors who have not accepted them.
Updated 1 September 2026