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
- 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.
- 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.
- 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.
- 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
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
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
The identifier is the bridge
The rdt_cid click identifier, captured at the visit and carried into the Craft Commerce order.
- 4
The event source decides reliability
Fire from the event listener in PHP rather than a Twig template, which may be cached.
- 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
- 01
Count orders carrying the rdt_cid click identifier
- 02
Follow one real conversion end to end
- 03
Read how this specific build handles order completion
Assumptions carried from another Craft project are the main source of wasted time here.
- 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.
- 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.
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.
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.
Only with the order reference as a shared conversion ID on both. Many Craft stores send server-only to Reddit because the pixel misses so much of that audience anyway.
Almost always because the rdt_cid click identifier never reached the Craft Commerce order. 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. Measure coverage before debugging the dispatch.
The rdt_cid parameter on your landing page URL. The Reddit Pixel also keeps its own identifier in a cookie, but on this audience specifically the cookie frequently does not exist — ad-blocker and tracker-blocker use on Reddit traffic runs well above average. The URL parameter is what survives; persist it server-side the moment you see it.
The Craft Commerce order-complete event. Fire from the event listener in PHP rather than a Twig template, which may be cached.
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.
More on Craft → Reddit
- Craft → Google AdsConnecting Craft CMS to Google Ads
- Craft → MetaConnecting Craft CMS to Meta Conversions API
- Craft → GA4Connecting Craft CMS to GA4
RELATED GUIDES
Where Craft → Reddit fits in the rest of your tracking
- Reddit · Local servicesReddit Ads conversion tracking for local service businesses
- Reddit · B2BReddit Ads conversion tracking for B2B companies
- Reddit × Ecommerce OrdersHow to reconcile Reddit Ads against your store's order table
- Reddit · Comparison page → demoHow to track comparison page visit to demo request for Reddit Ads
- Duda → RedditConnecting Duda to Reddit
- Craft → Microsoft AdsConnecting Craft CMS to Microsoft Ads
- Local servicesConversion tracking for local businesses, where most conversions bypass the website
- Contentful → RedditConnecting Contentful to Reddit
Free · 30 min
Get Craft and Reddit joined properly
Free30 minutesNo obligation
