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
Source: rdt_cid (URL)
Handling: 400 days
Description: Reddit click identifier, captured from the rdt_cid query parameter on landing and stored as a server-set first-party cookie. Sent unhashed, as Reddit matches on its exact value.
_rdt_uuid
Source: Reddit cookie
Handling: 400 days
Description: Reddit browser identifier normally set by the Pixel. When present it is read and persisted in your first-party subdomain, so server-side events line up with any prior Pixel identity.
email
Source: traits.email
Handling: SHA-256
Description: Email address, normalised (trimmed, lowercased) and SHA-256 hashed before transmission. Raw email never reaches Reddit.
external_id
Source: Your user id
Handling: SHA-256
Description: Your internal user identifier, normalised and SHA-256 hashed. Enables logged-in, cross-device matching against Reddit accounts.
ip_address
Source: Server request
Handling: Per event
Description: The server-side IP address, forwarded with the user agent and screen dimensions as a fallback attribution signal when no click id or email is available.

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

Pipeline as Code

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.yamlYAML
# 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: true

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

PageVisit

When a user views any page on your site

ViewContent

When a user views a product or content page

Search

When a user runs a search on your site

AddToCart

When a user adds an item to their shopping cart

AddToWishlist

When a user saves an item to a wishlist

Purchase

When a user completes a purchase transaction

Lead

When a user submits a lead or enquiry form

SignUp

When a user creates an account or registers

Custom

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

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.