> For the complete documentation index, see [llms.txt](https://docs.chord.co/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.chord.co/activate/event-streaming/destinations/advertising/reddit/reddit-pixel.md).

# 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 measurement that ad blockers can't affect, see the [Reddit Conversions API](/activate/event-streaming/destinations/advertising/reddit/reddit-conversions-api.md) destination. See [Reddit](/activate/event-streaming/destinations/advertising/reddit.md) for how the two fit together.

## Getting started

Chord loads the Reddit pixel for you, so you don't install any script.

You need your Reddit pixel ID, found in the Reddit Ads dashboard under **Events Manager**. It starts with `t2_`.

## Settings

* **Destination Name** (required): a name to tell this destination apart.
* **Pixel ID** (required): your Reddit pixel ID. It starts with `t2_`.
* **Enable Advanced Matching** (optional): sends the visitor's email address and customer ID to Reddit to improve conversion matching. Off by default. Reddit only honors the first initialization on a page, so this covers visitors who are already signed in when the page loads. A visitor who signs in later is matched by the [Reddit Conversions API](/activate/event-streaming/destinations/advertising/reddit/reddit-conversions-api.md) destination instead.
* **Consent Requirements** (optional): the consent categories a visitor must accept before Chord sends data to this destination. See [Consent](/activate/event-streaming/consent.md).

## Connect

Add **Reddit Pixel** from the destination catalog, using the settings above. See [Connect a destination](/activate/event-streaming/connect-a-destination.md) for the full steps.

## Deduplication

Every event this destination sends carries Chord's unique message ID in Reddit's `conversionId` field. The [Reddit Conversions API](/activate/event-streaming/destinations/advertising/reddit/reddit-conversions-api.md) destination sends the same value as `conversion_id`. Use the same **Pixel ID** on both destinations. See [Reddit](/activate/event-streaming/destinations/advertising/reddit.md#how-they-deduplicate).

## Event mapping

| Chord event                                                                             | Reddit event                                            | Notes |
| --------------------------------------------------------------------------------------- | ------------------------------------------------------- | ----- |
| `page`                                                                                  | `PageVisit`                                             |       |
| `identify`                                                                              | *no event — identity is sent through Advanced Matching* |       |
| [`Product Viewed`](/collect-data/tracking-plan/product-viewed.md)                       | `ViewContent`                                           |       |
| [`Products Searched`](/collect-data/tracking-plan/products-searched.md)                 | `Search`                                                |       |
| [`Product Added`](/collect-data/tracking-plan/product-added.md)                         | `AddToCart`                                             |       |
| [`Product Added to Wishlist`](/collect-data/tracking-plan/product-added-to-wishlist.md) | `AddToWishlist`                                         |       |
| [`Order Completed`](/collect-data/tracking-plan/order-completed.md)                     | `Purchase`                                              |       |
| [`Email Captured`](/collect-data/tracking-plan/email-captured.md)                       | `Lead`                                                  |       |
| [`Signed Up`](/collect-data/tracking-plan/signed-up.md)                                 | `SignUp`                                                |       |

## Purchase events

`Order Completed` fires Reddit's `Purchase` event.

| Chord source (priority order)                                                                                                            | Reddit field    | Notes                                                                                              |
| ---------------------------------------------------------------------------------------------------------------------------------------- | --------------- | -------------------------------------------------------------------------------------------------- |
| `messageId`                                                                                                                              | `conversionId`  |                                                                                                    |
| `properties.cart_id` > `properties.cartId` > `properties.order_id` > `properties.orderId` > `properties.id`                              | `transactionId` | Reddit deduplicates purchases on this                                                              |
| `properties.total` > `properties.value` > `properties.price`, then the sum of each product's price times quantity > `properties.revenue` | `value`         | Defaults to `0`                                                                                    |
| `properties.currency` > `properties.meta.i18n.currency`                                                                                  | `currency`      | Defaults to `"USD"`                                                                                |
| Sum of each product's quantity                                                                                                           | `itemCount`     |                                                                                                    |
| Each product's `id`, `name`, `category`, `quantity` and `itemPrice`                                                                      | `products`      | `id` is `product_id` > `sku` > `id`. A field with no value is left out. `quantity` defaults to `1` |

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 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.

## Other events

* **Product Added and Product Added to Wishlist** send `conversionId`, `products`, `itemCount`, and `value` and `currency` when the event has a value. These are sent in the same form as the purchase.
* **Product Viewed** sends `conversionId` and `products` only. See [Gotchas](#gotchas).
* **Page, Products Searched, Email Captured and Signed Up** send `conversionId` only.

## 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:

| Chord source (priority order)                                                                                   | Reddit field    | Notes |
| --------------------------------------------------------------------------------------------------------------- | --------------- | ----- |
| the visitor's email address. Dots and `+` aliases are removed from the part before the `@` before hashing       | `email`         |       |
| the visitor's phone number, in E.164 form                                                                       | `phoneNumber`   |       |
| your customer ID for the visitor (`userId`)                                                                     | `externalId`    |       |
| mobile advertising ID, when present. Chord sends the same hash in both fields and Reddit uses whichever matches | `aaid` / `idfa` |       |

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.

{% hint style="warning" %}
**Do not also paste Reddit's install snippet into your site.** Reddit's setup wizard offers a `<script>` block for the page `<head>`. Chord already loads and initializes the pixel, and Reddit honours only the *first* initialization on a page, so a hand-pasted snippet wins. Because it carries no match keys, Advanced Matching stops working entirely. It also double-counts page views. Use the wizard to create the pixel and read your pixel ID, then stop there.
{% endhint %}

**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](/activate/event-streaming/destinations/advertising/reddit/reddit-conversions-api.md) 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

Chord sends every other property on the event to Reddit, except `email`, `phone`, `phone_number`, `first_name`, `last_name`, `firstName`, `lastName` and `phoneNumber`. Properties you add with destination mappings are sent too, and the destination path does **not** need a `properties.` prefix. A mapping of `properties.customer_type` → `customer_type` is enough. Properties never overwrite the fields Reddit defines itself (`conversionId`, `currency`, `customEventName`, `itemCount`, `products`, `transactionId` and `value`). A property with one of those names is dropped in favour of the 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, such as `Checkout Started`, `Product Removed` and `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.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.chord.co/activate/event-streaming/destinations/advertising/reddit/reddit-pixel.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
