Reddit Conversions API
Reddit server-side tracking via the Conversions API. Better match rates. No Reddit Pixel.
Reddit server-side tracking sends conversions to the Reddit Conversions API from your own cloud, instead of relying on the browser-side Reddit Pixel. Datafly Signal captures the rdt_cid click identifier, hashes your PII, and delivers events server-to-server with zero Reddit JavaScript in the browser.
1 signal
Minimum to attribute
Reddit needs at least one attribution signal per event. Signal sends rdt_cid, hashed email, external_id, IP, and user agent together.
20-40%
Blocked by ad blockers
Reddit Pixel events never fire for users running ad blockers, leaving a permanent gap in client-side attribution.
7 days
ITP cookie limit
Safari caps client-side Pixel cookies at 7 days, breaking attribution for returning Reddit visitors.
Zero
Reddit JS with Signal
Datafly Signal delivers events server-to-server. No Reddit Pixel, no third-party script, no browser overhead.
Problems with the Reddit Pixel
The Reddit Pixel has the same architectural limitations as every other client-side tracking tag. These are not configuration problems, they are fundamental constraints of browser-based JavaScript.
Ad Blockers Block It
20-40% of desktop users run ad blockers that block Reddit's tracking domains by default. These users never register a single Pixel event, creating a permanent blind spot in your attribution data.
ITP-Limited Cookies
Safari's Intelligent Tracking Prevention caps client-side JavaScript cookies at 7 days. The _rdt_uuid cookie expires weekly, breaking attribution windows and fragmenting the user identity that ties a conversion back to its rdt_cid.
Extra Browser Payload
The Reddit Pixel loads another third-party script that competes with your content for bandwidth on every page. On mobile connections this directly impacts page load times, Core Web Vitals, and conversion rates.
Consent Timing Issues
The Pixel can fire before a consent banner resolves, or consent is revoked after events are already in flight. Server-side delivery gives you full control over when, and whether, an event is sent to Reddit.
How Signal delivers Reddit events
Datafly Signal replaces the Reddit Pixel with server-to-server delivery via the Reddit Conversions API. Better identity matching, zero browser overhead.
Captured rdt_cid from URL
When a user arrives from a Reddit ad, the rdt_cid query parameter is captured automatically and stored as a 400-day server-set cookie. It is sent to Reddit as click_id, unhashed, for exact-match attribution.
Server-to-server delivery
Events are delivered directly to ads-api.reddit.com via the Conversions API. A purpose-built delivery worker authenticates with your token and retries with exponential backoff on failure.
SHA-256 hashed identifiers
Email and external_id are normalised (trimmed, lowercased) and SHA-256 hashed before transmission, exactly as Reddit requires. Raw PII never leaves your server.
IP and user agent fallback
The server-side IP address, user agent, and screen dimensions are forwarded so Reddit still has an attribution signal when no click id or hashed email is present.
conversion_id deduplication
A deterministic conversion_id is generated per event, so you can run the Pixel and the Conversions API side by side during migration and let Reddit count each conversion once.
ITP-exempt 400-day cookies
The rdt_cid click id and any _rdt_uuid value are set via Set-Cookie headers from your first-party subdomain. Safari ITP does not restrict server-set cookies, so attribution persists for 400 days.
Attribution signals sent on every event
Reddit requires at least one attribution signal per conversion and rewards sending more. Datafly Signal sends the full set on every event, so Reddit has the best possible chance to match the conversion to a click or a Reddit account.
click_id_rdt_uuidemailexternal_idip_addressEmail and external_id are SHA-256 hashed as Reddit requires. Both are normalised (trimmed, lowercased) and hashed before leaving your server. The rdt_cid click id is deliberately left unhashed, because Reddit matches on its exact value.
Purpose-built Reddit event transformation
This pipeline config transforms an Order Completed track event into a Reddit Conversions API Purchase event. The click id is enriched from the captured rdt_cid cookie, PII is hashed automatically, and a conversion_id is generated for deduplication.
- Purchase event_type, value, and currency from product data
- rdt_cid captured and sent as click_id, deliberately unhashed
- SHA-256 normalisation for email and external_id fields
- IP address, user agent, and screen dimensions forwarded as fallback signals
- Deterministic conversion_id for Pixel + CAPI deduplication
# reddit-purchase.yaml — Purchase event to Reddit Conversions API
name: reddit_purchase
integration: reddit-conversions-api
trigger:
event: track
conditions:
- field: event
operator: equals
value: Order Completed
transform:
static:
- target: event_type.tracking_type
value: Purchase
mapping:
- source: timestamp
target: event_at
transform: iso8601
# User context — server-side request signals
context:
- source: context.ip
target: user.ip_address
- source: context.userAgent
target: user.user_agent
- source: context.screen
target: user.screen_dimensions
# User identity — auto-hashed PII
user_data:
- source: traits.email
target: user.email
transform: sha256_normalise
- source: user_id
target: user.external_id
transform: sha256_normalise
enrichments:
# Reddit click id — captured from rdt_cid, sent UNHASHED
- type: click_id
param: rdt_cid
target: user.click_id
hash: false
# Deterministic dedup key across Pixel + CAPI
- type: conversion_id
target: event_metadata.conversion_id
# Properties — purchase details
properties:
- source: properties.products
target: event_metadata.products
transform: pluck
field: product_id
- source: properties.revenue
target: event_metadata.value_decimal
- source: properties.currency
target: event_metadata.currency
default: USD
output:
format: reddit_conversions_api
endpoint: https://ads-api.reddit.com/api/v2.0/conversions/events/{account_id}
auth: bearer_token
validate: trueSupported Reddit events
All standard Reddit Conversions API event types are supported out of the box. Each event is delivered server-to-server with full attribution-signal enrichment.
PageVisitWhen a user views any page on your site
ViewContentWhen a user views a product or content page
SearchWhen a user runs a search on your site
AddToCartWhen a user adds an item to their shopping cart
AddToWishlistWhen a user saves an item to a wishlist
PurchaseWhen a user completes a purchase transaction
LeadWhen a user submits a lead or enquiry form
SignUpWhen a user creates an account or registers
CustomAny custom conversion you define for your funnel
Frequently asked questions
- What is Reddit server-side tracking and how is it different from the Reddit Pixel?
- Reddit server-side tracking sends conversion events to Reddit from your own server via the Reddit Conversions API (CAPI), instead of from the browser via the Reddit Pixel. The Pixel is client-side JavaScript that ad blockers and Safari ITP routinely degrade. With Datafly Signal, the only browser code is the 5.2KB first-party Datafly.js collector. It captures the rdt_cid click identifier and forwards events server-to-server to Reddit, so attribution does not depend on the Reddit Pixel loading or surviving in the browser.
- How does Datafly Signal capture rdt_cid for Reddit attribution?
- When a user lands from a Reddit ad, the URL contains the rdt_cid query parameter. Datafly.js extracts it on landing and the gateway stores it in a 400-day server-set first-party cookie. A conversion days or weeks later is sent to the Reddit Conversions API with the original rdt_cid as click_id, so it attributes back to the click even though Safari ITP caps browser-set cookies at 7 days. Reddit advises against hashing the click id, so Signal sends it in clear text exactly as Reddit expects.
- Do I still need the Reddit Pixel on the page?
- No. The Reddit Pixel exists to set _rdt_uuid, capture rdt_cid, and fire events. Datafly Signal handles all three server-side. Removing the Pixel eliminates a third-party script, removes an ad blocker target, and gives you attribution that persists for 400 days instead of the 7-day ITP limit. If you prefer to migrate gradually, you can run both in parallel and deduplicate using conversion_id.
- How does deduplication work if I run the Pixel and the Conversions API together?
- Reddit deduplicates events that share a conversion_id across the Pixel and the Conversions API. Datafly Signal generates a deterministic conversion_id for every event. During migration, if the Reddit Pixel is still firing, both the client-side and server-side copies of an event carry the same conversion_id and Reddit counts them once. This lets you validate server-side delivery before fully removing the Pixel.
- What identifiers improve Reddit match rates, and is PII protected?
- Reddit requires at least one attribution signal per event and rewards sending more. Signal forwards the rdt_cid click id, a SHA-256 hashed email, a SHA-256 hashed external_id (your user id), plus the server-side IP address and user agent. Email and external_id are normalised (trimmed, lowercased) and SHA-256 hashed before they leave your server, so raw PII never reaches Reddit. The click id is sent unhashed because Reddit matches on its exact value.
Related
TikTok Events API
Same server-side pattern for TikTok with captured ttclid and self-generated _ttp.
Meta Conversions API
Server-side Meta CAPI with _fbp generation and hashed PII for EMQ optimisation.
PII Handling
How Signal normalises and SHA-256 hashes email and identifiers before delivery.
Attribution
Click id capture and 400-day first-party cookies for full-cycle attribution.
Recover Reddit attribution with server-side tracking
See how Datafly Signal delivers Reddit Conversions API events with captured rdt_cid, hashed identifiers, conversion_id deduplication, and ITP-exempt 400-day cookies. Better data, better optimisation.