Skip to content

Reddit Conversions API

Signals sends website events from your server to Reddit, alongside or instead of the Reddit Pixel. Because the event does not depend on the browser, it survives ad blockers, cookie restrictions and dropped page loads that would otherwise lose the conversion.

Use this destination to report web conversions such as purchases, sign-ups, leads and add-to-carts against your Reddit campaigns.

Reddit needs a note on identity before anything else. It is a largely pseudonymous platform, and its users are less likely to have given you an email address than users of any other channel here. Reddit’s own guidance reflects that: the identifiers it weights most heavily are the click ID and the IP address, not personal details. That changes what is worth prioritizing at the source, so read Data and identifiers before deciding what to map.

Sources supported by Reddit Conversions API

CategorySupported
Website & E-commerce

Before connecting, make sure you have:

  • A Reddit Ads account, with your business set up on Reddit Ads.
  • Creator or administrator access on that account. Reddit requires one of the two to generate a token, and an invitation that was sent but never accepted does not count.
  • The Pixel ID of the account you intend to report to. Reddit uses the Pixel ID as the account identifier on the Conversions API, so it is needed whether or not you run the Pixel.
  • A conversion access token generated for that account. See Authentication for where to find both.
  • A Datahash Studio account with the target project selected.
  • A website or e-commerce source connected in the same project. Events reach Reddit through the source, so a connected destination on its own sends nothing.

In Studio, open Destinations, find Reddit, and click the Conversions API tile. This connector authenticates with a Pixel ID and a token rather than a sign-in, so there is no consent screen.

  • Enter your Pixel ID and Access Token.
  • Click Validate Credentials.
  • Click Finish.
FieldWhat it isWhere to find it
Pixel IDReddit’s identifier for the data source that receives conversions. It doubles as the account identifier on the Conversions API, so it is required even if you are not running the Pixel.ads.reddit.com/events-manager, then Configure data source, then Conversions API, then Set up manually. Copy it from there.
Access TokenA credential authorizing Datahash to send events to that Pixel on your behalf. Reddit calls it a conversion access token.ads.reddit.com/events-manager, then Conversion tokens, then Generate Access Token. Name it, generate it, and copy it before closing the dialog.

Reddit shows the token once and cannot show it again. If it is lost, the only remedy is to generate a new one.

Two things about Reddit tokens differ from most platforms. The conversion access token does not expire, so there is no rotation to schedule. And deleting a token in Reddit revokes it for everyone using it, not just for the integration you had in mind. Both are reasons to generate a token dedicated to this connection rather than reusing one.

Validate Credentials checks the token against the Pixel before anything is saved. A token that is simply wrong and a token belonging to an account without creator or administrator access both fail here, and they look the same from Studio, so confirm the role as well as the value.

The Pixel you entered during authentication is where events are written. Signals reports to one Pixel per connection, so if you report to more than one, create a connection for each.

The events themselves come from the connected source. Event names, the identifiers used for matching and the deduplication key are all set by the source mapping, not here. There is no event mapping on this connector.

Reddit accepts eight standard events: page visit, view content, search, add to cart, add to wishlist, purchase, lead and sign-up. It also accepts custom events, declared by name. Custom names are case sensitive, so a change in capitalization creates a second event in reporting rather than adding to the first, and Reddit shows only the twenty most recent.

Two timing limits are worth knowing before you set the schedule on the source. Reddit rejects events sent more than seven days after the conversion happened. Separately, deduplication only works on events sent within two days. A source on a long batch schedule can therefore be accepted and still be double counted, which is a failure that reports as inflated conversions rather than as an error.

One connection reports to one Pixel. To add another, open Manage Connections and click Add Instance, then work through the same steps.

To change one, click the instance name and then the edit icon in the top right. Update the fields and click Finish. Clicking Cancel keeps the previous configuration active; updates apply only after you finish.

Reddit runs two deduplication methods, and which one applies depends on whether a conversion ID is present. That is worth understanding, because the fallback has different requirements from the primary method.

Where a conversion ID is present, Reddit matches on it plus the event type, and on the custom event name as well for custom events. This is the method to aim for.

Which copy survives is unusual and worth stating plainly, because it differs from the other platforms. Meta prefers the browser event. Pinterest keeps whichever arrived first. Reddit keeps the richer one: the event carrying more metadata and more match keys wins, and the other is marked a duplicate. Only when the two are of equal quality does arrival order settle it, and then the earlier event wins.

Where no conversion ID is present, Reddit falls back to session-based deduplication. It groups a person’s events into a session, meaning a run of events no more than five minutes apart, then picks one source for that session, Pixel or API, and discards the events from the other. This needs a Reddit UUID or an external ID present on both paths. With neither, nothing deduplicates and conversions are counted twice.

Two constraints apply to both methods. Deduplication runs hourly, so duplicate counts settle on that cycle rather than immediately. And it only operates within a channel, so a web event will never deduplicate against an in-store one, which makes the action source on each event more consequential than it looks.

Reddit rejects some conversion ID values outright: empty, the strings Undefined and Null, and an all-zero UUID. It also penalises reuse. The same conversion ID across more than a hundred events marks those events as duplicates and drops them from attribution entirely.

Check it in Events Manager, in the event deduplication panel.

Reddit accepts a data processing option whose only supported mode is LDU, Limited Data Use, sent with a country code and an optional region. It is Reddit’s mechanism for people who have opted out of the sale or sharing of their data under United States state privacy law. Where it is applied for a California user, Reddit acts as a service provider under the CCPA and CPRA.

The flag has to travel on every event for an opted-out person rather than being set once on the account. Reddit also notes that using it reduces campaign performance and targetable audience size, and that it is not available for Custom Audiences.

There is no GDPR consent field. Reddit accepts no consent string and nothing equivalent to Meta’s data processing options for Europe, so for EEA and UK traffic the only way to honor a refusal is not to send the event. Consent has to be enforced at the source.

Reddit puts the obligation on the advertiser explicitly: obtaining the required consents, respecting opt-outs, deciding whether sending data to Reddit constitutes sharing or selling under the applicable law, and identifying where the user is located.

For erasure requests, Reddit provides a data deletion endpoint keyed on email address, phone number, device ID or external ID. Requests are processed daily and completed within thirty days, and deletion cannot be undone.

Signals sends the fields your source captures. Send identifiers already hashed where you can. Plain text also works: they are normalized and SHA-256 hashed before they reach Reddit.

FieldWhen it is required
Event timeAlways. Reddit rejects events more than seven days old, and stops deduplicating events more than two days old.
Event nameAlways. One of Reddit’s eight standard events, or a custom name. Must match the Pixel event name, or deduplication will not work.
Action sourceAlways. Where the conversion happened. Website, for events from a website or e-commerce source. Getting it wrong breaks source-level reporting, and because deduplication only operates within a channel, breaks deduplication with it.
One attribution signalAlways. Reddit accepts the event only if it carries a Reddit click ID, an email address, or the full set of IP address, user agent and screen dimensions. That last one is all-or-nothing; two of the three does not satisfy it.
Conversion IDNot enforced, but treat it as required. Without it Reddit falls back to session-based deduplication, which needs a UUID or external ID instead. See Deduplication.
CurrencyPurchase events. Without it Reddit tries the account currency and otherwise leaves the value empty.
ValuePurchase events.

Reddit’s priority order is its own, and it is not the order you would use on Meta or Google. Device and click signals come first, personal identifiers second.

FieldNotes
Reddit click IDReddit’s strongest signal, alongside IP address. It arrives as the rdt_cid parameter on the landing page URL when someone clicks through from a Reddit ad.
IP addressReddit’s stated minimum. Send it on every event even where you have nothing else.
User agent and screen dimensionsThe rest of the device signal. All three of IP address, user agent and screen dimensions are needed together to satisfy the attribution requirement on their own.
Reddit UUIDThe value the Reddit Pixel writes to its own first-party cookie. Passing it through the API is what makes session-based deduplication possible, and Reddit recommends it specifically where the Pixel and the API run together.
Email addressReddit canonicalises more aggressively than most platforms before hashing: it strips dots from the local part and everything after a plus sign, so two addresses that look different can match each other.
Phone numberWorth mapping. Reddit supports it and reports low phone coverage as a match quality problem, yet it is a common gap because several third-party tools never pass it.
External IDYour own stable identifier for the person. Reddit uses it for session-based deduplication as well as for matching.
Mobile advertiser IDIDFA or AAID, where you hold one.

Detail about the conversion: item count, product ID, name, category, quantity and item price. Reddit warns that quantity and item price are not substitutes for item count and value, which are the fields its optimization actually uses.

The page URL the event happened on. Worth mapping as a safety net, because Reddit will read the click ID out of the URL when the click ID field itself is empty.

Confirm events are arriving in Events Manager at ads.reddit.com/events-manager. The events overview lists each event with its status, total raw events, and separate Pixel and API counts. Those two counts side by side are the quickest way to see whether both paths are live and whether deduplication is doing anything. It updates in near real time.

Check the Diagnostics panel as well, because Reddit reports a lot of problems there rather than failing the request: a value sent without a currency, an invalid conversion ID, a malformed phone number, a click ID that does not match the one in the URL. Issues can take up to 24 hours to clear after you fix them, so do not judge a fix by the panel immediately.

Match quality has a published score. Reddit calls it Match Quality Score, it runs from 0 to 10 per event type over the last seven days, and it is still marked beta. It combines coverage of each match key with an adjustment for how reliably that value identifies one person, and a weight for how much Reddit values the key. Reddit publishes neither the band thresholds nor the weights, so treat the score as a direction rather than a target.

What Reddit does do well is name the gap rather than leaving you to infer it. The recommendations it surfaces include low coverage of email, phone number, external ID, click ID, IP address, and user agent or screen dimensions; low external ID quality; send UUID through the Conversions API; and set up lower funnel events. Work that list in order rather than guessing from the number.

  • Persist the Reddit click ID. It arrives as rdt_cid on the landing page URL and nothing keeps it for you, because the cookie the Reddit Pixel writes holds the UUID rather than the click ID. Capture it on arrival and carry it through redirects, or Reddit’s strongest signal is gone after the first navigation.
  • Map the page URL as well. Reddit reads the click ID out of it when the click ID field is empty, which recovers the events where persistence failed.
  • Send the IP address on every event. Reddit treats it as the minimum, and the device signal only stands on its own when IP address, user agent and screen dimensions are all present.
  • Send the same conversion ID from the Pixel and the server for any conversion reported on both paths, and pass the UUID through the API as a fallback for when it is missing.
  • Map a phone number. Reddit supports it and grades you on its coverage, and it is one of the easier gaps to close.
  • Keep the source schedule inside two days. Events are accepted for seven but stop deduplicating after two, so a slow batch is accepted and then double counted.
  • Check the action source is right on every event. It drives source-level reporting, and deduplication only works within a channel.
  • Keep custom event names byte-for-byte consistent. Reddit treats them as case sensitive, so a capitalization change quietly splits one event into two in reporting.
  • Generate a token dedicated to this connection. Deleting a token in Reddit revokes it for everyone using it, so a shared token turns one cleanup into several broken integrations.
  • Keep formatting clean at source: lowercase email, phone with the country code, no stray whitespace. Hashing a badly formatted value produces a hash that will never match.
  • Use NeoTag rather than dhPixel if you send to more than one marketing platform, so one tag serves them all.

Validate Credentials fails. Re-check the Pixel ID, and confirm the token was generated for that Pixel rather than a different one. Then check the role: Reddit refuses the request when the account behind the token lacks creator or administrator access. Somebody who was invited to the account but never accepted the invitation fails the same way, and looks identical from Studio.

No events appearing in Events Manager. Confirm a website or e-commerce source is connected in the same project and that the tag is published in your tag manager. A connected destination on its own produces nothing.

A whole batch was rejected. Reddit validates the request as a unit and processes nothing if any event in it is invalid, so one malformed event takes the batch with it. Check Diagnostics for the field: an unrecognized event name or a malformed event time are the usual causes.

Conversions counted twice. The Pixel and the server are not sharing a conversion ID, and there is no UUID or external ID for the session fallback to use. If both are in place, check the events are arriving within two days and that the action source matches on both paths.

Match Quality Score is low. Work the recommendations Reddit lists against the event rather than the number itself. Click ID persistence and IP address coverage account for most of it on web traffic, and missing UUID is the usual cause where the Pixel and the API run together.

A custom event is appearing twice in reporting. The name changed capitalization somewhere. Reddit treats custom event names as case sensitive, so the two are separate events as far as it is concerned.

Conversion value reported without a currency. Reddit falls back to the account currency and otherwise leaves the value empty. Map currency at the source.

Events older than a week are missing entirely. Reddit rejects events more than seven days after the conversion. Those cannot be backfilled through this connector.

Delivery stopped. The token was deleted in Reddit, or the account it belongs to lost access. Because deleting a token revokes it for every integration using it, check whether somebody tidied up tokens before assuming the problem is on this connection.