Reddit Ads guides

Reddit Conversions API: send server events without double counting

The pixel runs in the visitor’s browser and can be blocked or lost. The Conversions API sends the same kinds of events from your server, so results that happen later or offline, such as a sale confirmed by phone, can still be attributed. Used carelessly, it also counts the same result twice.

Server events beside the pixel

Reddit recommends using the Conversions API together with the pixel, not instead of it. Browser events and server events cover each other’s gaps, but only if each real-world result is recognized as one event. Reddit requires deduplication when both are used, which means giving the browser and the server version of an event the same conversion identifier so they are merged rather than added.

Attribution depends on match keys. The click identifier, appended to the landing page address as rdt_cid, is the strongest one, and Reddit recommends sending it with every event it applies to. The pixel stores it for you; for the server you must capture it from the address when the visitor lands, keep it with the lead record in a cookie, storage or hidden field, and send it later. Reddit also recommends passing an IP address and, where you hold them, a hashed email or phone, and a user agent.

Set the action source to the real channel of the event, for example website for events that occur on a page. Device identifiers and click IDs do not belong on in-store events. Use a conversion access token, which Reddit describes as non-expiring and simpler than a developer token, batch events where you can, with no more than a thousand per request, and do not send duplicates.

Test before you route production traffic. Send sample events, confirm they appear in Events Manager or the conversion report, and check that deduplication works by firing the pixel and server versions of one event. Avoid sending the same events through two API versions during a migration, which can double count.

What you gain

  • Longer horizons: results that arrive hours or days after the click, such as a booked interview or a closed sale, can be reported.
  • Resilience: measurement that does not depend only on browser scripts.
  • Cleaner learning: one result is one event, so optimization sees a true count.

Send events once, correctly

  1. Decide which results you will send from the server and which stay in the pixel. Avoid sending the same event name from both without deduplication.
  2. Capture rdt_cid from the landing page address and save it with the lead or order record.
  3. Generate a conversion access token in Reddit Ads and store it as a secret on your server.
  4. Send a test event with the click ID, time, action source and a unique conversion ID, then confirm it in Reddit.
  5. Repeat for a pixel and server event of the same result and verify that only one is counted.
  6. Monitor failures and rate limit responses, and retry without creating duplicates.

Limits and privacy

  • Events sent long after the click may be rejected by Reddit’s time limits; send them promptly.
  • Send only what attribution needs, and check consent and privacy rules in your region before sending personal identifiers.
  • In AdAce Ads, the lead script stores the Reddit click ID for a Reddit lead and, for the interview and hire stages you mark in Telegram, sends custom server events with only the click ID, time, source and a unique ID. This needs the conversions permission on the connected Reddit account.

Sources and further reading

Ace, the AdAce Ads mascot

Try it on your own accounts

Create a workspace, connect Google or Meta in a couple of clicks and see your accounts clearly. Changes follow your approvals or the policy you configure.

Create your workspace