Skip to main content
Craft → RedditIntegration guide

Connecting Craft CMS to Reddit

Craft is a developer-oriented CMS, usually built bespoke by an agency, which means the implementation is whatever that agency decided and nothing is standard. Reddit's audience blocks trackers at rates well above the web average, which makes its browser pixel the least reliable in this list and its server-side path the most necessary. The join between them succeeds or fails on one thing: whether the rdt_cid click identifier reaches the Craft Commerce order before the conversion happens, because Reddit can only match a conversion it can tie back to a click it recognizes.

Free30 minutesNo obligation

Specific to this pair

Craft CMS to Reddit CAPI: keep rdt_cid alive through static caching

Craft's static caching hides rdt_cid from PHP, so capture it with a script posting to an uncached endpoint that writes it to the Commerce cart. On completion, send Purchase from the PHP listener to Reddit's Conversions API with rdt_cid, hashed order email, order total and currency, and the order reference as conversion ID.

On a Craft site the rdt_cid usually dies on the landing page, before any order exists. Full-page static caching, often done with Blitz or a CDN, serves stored HTML, so PHP never sees the query string. Check how your cache treats query strings, then capture rdt_cid with a small script that posts it to an uncached endpoint, which writes it to a custom field on the Commerce cart. Don't lean on the Reddit Pixel cookie for this; a large share of these visitors block it.

When the order completes, send a Purchase from the PHP listener to the Reddit Conversions API with the stored rdt_cid, the hashed order email, the order total in the order's currency, and the order reference as the conversion ID. Given how little Reddit traffic runs the pixel, server-only is a reasonable choice for a Craft store, and it also removes the risk of a confirmation template double-firing.

Reddit spend tends to drive first visits rather than same-session sales, so expect some Craft orders from Reddit clicks to arrive days later. Store the click timestamp next to rdt_cid and check Reddit's current attribution window in Ads Manager before deciding which late orders to send. Check whether Reddit accepts refund adjustments; if not, net refunds out in your own reconciliation.

Craft → Reddit · what breaks

Why this join usually fails — Craft → Reddit

  1. 01

    The rdt_cid click identifier never reaches Craft

    Craft's template caching and static caching plugins both serve stored output, and because every build is custom, where the capture code lives differs per site. There is no standard place to look.

  2. 02

    Every install is bespoke

    There is no standard Craft setup, so an approach that worked on another Craft site may have nothing to attach to on this one. Read the build before quoting.

  3. 03

    An audience that blocks trackers by habit

    Coverage on Reddit traffic is structurally lower than on other networks. That is a property of who uses Reddit, not a broken implementation, and chasing a benchmark this audience will not give you wastes time.

  4. 04

    Nothing reconciles afterwards

    Reddit Ads Manager reports events received and matched. Expect lower match rates here than on Meta or Google and report the gap rather than explaining it away — reconcile against your own records for the same window.

Craft → Reddit · the fix

What working looks like — Craft → Reddit

  • The rdt_cid click identifier on every order

  • Conversions arriving in Reddit

    Events appear in Reddit Ads Manager and become usable for optimization, at coverage that will be lower than you are used to elsewhere.

  • Reconciled against the source

    Craft CMS's own records are the reference, not either dashboard.

Craft → Reddit · architecture

How Craft and Reddit actually connect

  1. 1

    Craft CMS holds the truth

    Craft installs are bespoke by nature. Establish how this particular build models a completed order before assuming anything transfers from another Craft site.

  2. 2

    Reddit needs a click to match

    Reddit matches server events on the click identifier and hashed customer information. Reddit's Conversions API is younger than Meta's and its documentation moves, so confirm the current endpoint and required fields directly rather than from an integration blog post.

  3. 3

    The identifier is the bridge

    The rdt_cid click identifier, captured at the visit and carried into the Craft Commerce order.

  4. 4

    The event source decides reliability

    Fire from the event listener in PHP rather than a Twig template, which may be cached.

  5. 5

    Deduplication at the destination

    Reddit deduplicates on a conversion identifier carried by both the pixel and the server event. Because so much Reddit traffic never runs the pixel, sending server-side only is a legitimate choice here in a way it rarely is elsewhere — and it removes the deduplication problem entirely. Decide deliberately rather than running both and hoping.

Craft → Reddit · normal or broken

Working vs. broken, side by side — Craft → Reddit

Normal, not a fault

  • The rdt_cid click identifier present on the order

    Visible on the record itself in Craft CMS, not merely captured somewhere on the site.

  • Sent from the Craft Commerce order-complete event

  • Deduplicated correctly

    Reddit deduplicates on a conversion identifier carried by both the pixel and the server event. Because so much Reddit traffic never runs the pixel, sending server-side only is a legitimate choice here in a way it rarely is elsewhere — and it removes the deduplication problem entirely. Decide deliberately rather than running both and hoping.

  • Reconciles with the source

    Reddit's count and Craft CMS's records agree within a few percent over a closed window.

Actually broken

  • The rdt_cid click identifier missing on most records

    Craft's template caching and static caching plugins both serve stored output, and because every build is custom, where the capture code lives differs per site. There is no standard place to look.

  • Sent from the browser

    There is no standard Craft setup, so an approach that worked on another Craft site may have nothing to attach to on this one. Read the build before quoting.

  • Counted twice, or not at all

    Coverage on Reddit traffic is structurally lower than on other networks. That is a property of who uses Reddit, not a broken implementation, and chasing a benchmark this audience will not give you wastes time.

  • Nobody has reconciled it

    The dashboard shows a number and no one has compared it to Craft CMS.

Craft → Reddit · diagnose

Diagnostic order — Craft → Reddit

  1. 01

    Count orders carrying the rdt_cid click identifier

  2. 02

    Follow one real conversion end to end

  3. 03

    Read how this specific build handles order completion

    Assumptions carried from another Craft project are the main source of wasted time here.

  4. 04

    Measure click-identifier capture on Reddit traffic specifically

    Not across all traffic. A healthy site-wide capture rate routinely hides a poor one on exactly the segment you are paying for.

  5. 05

    Read the match rate, not the success message

    Reddit Ads Manager reports events received and matched. Expect lower match rates here than on Meta or Google and report the gap rather than explaining it away — reconcile against your own records for the same window.

Craft → Reddit · prove

How it gets proven — Craft → Reddit

Against Craft CMS's own records, not against either platform's dashboard.

Source of truth

Craft Commerce's order records in your own database, filtered to completed.

  • The rdt_cid click identifier confirmed present on a live order.
  • Capture rate measured on Reddit traffic specifically, and the pixel-versus-server-only decision documented.
  • Order custom field confirmed populated on an order placed as an anonymous visitor through cache.

Craft → Reddit · free audit

What we check in the free audit

  • Count orders carrying the rdt_cid click identifier
  • Follow one real conversion end to end
  • Read how this specific build handles order completion
  • Measure click-identifier capture on Reddit traffic specifically
  • Read the match rate, not the success message

Checked against

Craft Commerce's order records in your own database, filtered to completed.

Get my free conversion tracking audit

Free30 minutesNo obligation

Craft → Reddit · when not to buy

When you don't need this — Craft → Reddit

  • If Reddit already reports conversions that reconcile against Craft CMS's records within a few percent, this join is working and there is nothing to buy.
  • Measure identifier coverage yourself first — pull your last hundred orders and count how many carry the rdt_cid click identifier.
  • If the original agency is still engaged, the fastest path is usually specifying the field and having them add the hook.
  • If your Reddit strategy is organic community presence rather than ads, none of this applies — that traffic has no click identifier by definition.

Craft → Reddit · what we deliver

What gets built — Craft → Reddit

  • Identifier capture into Craft

    Capture the identifier and store it as a custom field on the order through a Craft event listener, server-side.

  • Event source: the Craft Commerce order-complete event

    Fire from the event listener in PHP rather than a Twig template, which may be cached.

  • Dispatch to Reddit

    Server events to the Reddit Conversions API with the click identifier and hashed customer information.

  • Reversals where they exist

    Refunds and cancelled orders are recorded against the order.

Written guarantee

95%+ tracking accuracy

Measured against Craft Commerce's order records in your own database, filtered to completed.. Miss it and we keep working at no cost.

Get my free conversion tracking audit

From $400 · See packages

FAQ

Craft → Reddit questions, answered

It can stop server-side code from ever reading rdt_cid on the landing page. Capture it client-side and write it to the cart through an uncached request, or confirm how your cache handles query strings.

Free · 30 min

Get Craft and Reddit joined properly

Free30 minutesNo obligation