Connecting Square to Reddit
Square holds the transaction, and for most Square businesses the majority of those transactions are a card tapped at a counter with no browser anywhere near them. 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 Square payment or 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
Square to Reddit Conversions API: online orders, server-side only
Capture rdt_cid on landing, keep it on your server, and attach it to the Square Online order before hosted checkout. Send completed online orders from the Square payment webhook to Reddit's Conversions API as Purchase, with the Square order ID as conversion ID, amount, currency and hashed email. Report counter-sales lift separately, never as Reddit's.
For a Square business, Reddit is usually a test for a product with a hobby or niche community, such as coffee, sneakers or gear, and almost always for Square Online sales rather than the counter. Reddit traffic blocks the pixel more than most, and Square Online checkout is hosted, so the browser side contributes very little. Capture rdt_cid on landing, keep it on your server, and attach it to the order before the shopper reaches Square's checkout.
Send completed online orders from the Square payment webhook to the Reddit Conversions API as Purchase, with the Square order ID as the conversion ID, amount and currency from the order, and the buyer's hashed email from the order or customer record. Server-only is a reasonable choice for this pair; if you run the pixel as well, it has to send the same order ID. Reflect refunds at least in your own reporting, since returns on hobby goods are common.
The specific misread: a Reddit thread mentions your shop, foot traffic rises, and counter sales jump with no rdt_cid anywhere. That lift is real and unattributable. Report it beside the measured online orders rather than adding it to the campaign.
Square → Reddit · what breaks
Why this join usually fails — Square → Reddit
- 01
The rdt_cid click identifier never reaches Square
Square Online checkout is hosted, so the identifier must be carried deliberately rather than by cookie. For in-person payments there is no identifier at all unless the customer booked an appointment or is in the customer directory — a walk-in who taps a card cannot be joined to an ad click by anyone.
- 02
Most of the revenue has no browser
A card at a terminal has no click, no session and no identifier. That is a boundary to measure rather than a bug to fix, and the honest deliverable includes how much of your revenue sits outside it.
- 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.
Square → Reddit · the fix
What working looks like — Square → Reddit
The rdt_cid click identifier on every transaction
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
Square → Reddit · architecture
How Square and Reddit actually connect
- 1
Square holds the truth
Square records every payment with its amount, channel and, where the customer is identified, a link to the customer directory. That directory is the only bridge between a counter payment and anything that happened online.
- 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 Square payment or order.
- 4
The event source decides reliability
Subscribe to payment and order events and send from your server. This covers online orders cleanly, and covers in-person payments only for the share you can join to an identity.
- 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.
Square → Reddit · normal or broken
Working vs. broken, side by side — Square → Reddit
Normal, not a fault
The rdt_cid click identifier present on the transaction
Sent from the Square payment webhook
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
Actually broken
The rdt_cid click identifier missing on most records
Square Online checkout is hosted, so the identifier must be carried deliberately rather than by cookie. For in-person payments there is no identifier at all unless the customer booked an appointment or is in the customer directory — a walk-in who taps a card cannot be joined to an ad click by anyone.
Sent from the browser
A card at a terminal has no click, no session and no identifier. That is a boundary to measure rather than a bug to fix, and the honest deliverable includes how much of your revenue sits outside it.
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
Square → Reddit · diagnose
Diagnostic order — Square → Reddit
- 01
Count transactions carrying the rdt_cid click identifier
- 02
Follow one real conversion end to end
- 03
Split Square revenue by channel before anything else
Online versus in-person. Every subsequent number depends on that split, and blending them makes both unreadable.
- 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.
Square → Reddit · prove
How it gets proven — Square → Reddit
Source of truth
Square's transaction list, split by channel — online and in-person are different questions.
- The rdt_cid click identifier confirmed present on a live transaction.
- Capture rate measured on Reddit traffic specifically, and the pixel-versus-server-only decision documented.
- The in-person join rate measured and stated as a number before any coverage claim is made.
Square → Reddit · free audit
What we check in the free audit
- Count transactions carrying the rdt_cid click identifier
- Follow one real conversion end to end
- Split Square revenue by channel before anything else
- Measure click-identifier capture on Reddit traffic specifically
- Read the match rate, not the success message
Checked against
Square's transaction list, split by channel — online and in-person are different questions.
Free30 minutesNo obligation
Square → Reddit · when not to buy
When you don't need this — Square → Reddit
- Measure identifier coverage yourself first — pull your last hundred transactions and count how many carry the rdt_cid click identifier.
- If nearly all your revenue is in person with no appointments and no identified customers, there is very little here to attribute and we will say so rather than build a bridge to nothing.
- If your Reddit strategy is organic community presence rather than ads, none of this applies — that traffic has no click identifier by definition.
Square → Reddit · what we deliver
What gets built — Square → Reddit
Identifier capture into Square
Capture the click identifier and carry it into Square Online checkout, and for in-person work use an appointment booking as the bridge so the eventual payment can be joined through the customer record.
Event source: the Square payment webhook
Subscribe to payment and order events and send from your server. This covers online orders cleanly, and covers in-person payments only for the share you can join to an identity.
Dispatch to Reddit
Server events to the Reddit Conversions API with the click identifier and hashed customer information.
Reversals where they exist
Square exposes refunds clearly, and in hospitality and services voids and comps are frequent enough that wiring the reversal matters.
Written guarantee
95%+ tracking accuracy
Measured against Square's transaction list, split by channel — online and in-person are different questions.. Miss it and we keep working at no cost.
From $400 · See packages
FAQ
Square → Reddit questions, answered
Capture rdt_cid on landing, link it to the order before checkout, and send completed orders from the Square payment webhook to Reddit's Conversions API with the order ID.
No. Counter payments carry no click identifier; treat any in-store lift as unattributed.
Almost always because the rdt_cid click identifier never reached the Square payment or order. Square Online checkout is hosted, so the identifier must be carried deliberately rather than by cookie. For in-person payments there is no identifier at all unless the customer booked an appointment or is in the customer directory — a walk-in who taps a card cannot be joined to an ad click by anyone. 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 Square payment webhook. Subscribe to payment and order events and send from your server. This covers online orders cleanly, and covers in-person payments only for the share you can join to an identity.
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 Square → Reddit
- Square Online → RedditConnecting Square Online to Reddit
- Square Appointments → RedditConnecting Square Appointments to Reddit
- Reddit · Lead → booked callHow to track lead to booked call for Reddit Ads
RELATED GUIDES
Where Square → Reddit fits in the rest of your tracking
- Reddit · Financial servicesReddit Ads conversion tracking for financial services firms
- Reddit · SubscriptionsReddit Ads conversion tracking for subscription businesses
- Reddit × SubscriptionsHow to reconcile Reddit Ads against your billing system
- Reddit · Free trial → paidHow to track free trial to paid for Reddit Ads
- Worldpay → RedditConnecting Worldpay to Reddit
- Square → LinkedInConnecting Square to LinkedIn Ads
- SaaSConversion tracking for SaaS, from signup through to the payment that matters
- Helcim → RedditConnecting Helcim to Reddit
Free · 30 min
Get Square and Reddit joined properly
Free30 minutesNo obligation
