client_reference_id. When the payment lands, match client_reference_id → click → post. seenpaid does this for you once revenue attribution is on.
Why it’s hard by default
Every platform and scheduler shows likes, reach and clicks. None can tell you which post produced a paying customer, because the sale happens on a different surface (Stripe) than the post. To recover the link, one identifier has to survive the whole journey:The method
1
Give each post a tracked link
A unique short link per post (for example
go.seenpaid.com/r/abc123). The id in that link ties a future sale back to this post.2
Record the click and keep the id
Log the click against the post and store the id first-party (a cookie plus localStorage) so it’s still there when the visitor reaches checkout, even a few pages later.
3
Pass the id into Stripe
Attach it to the payment as
client_reference_id. For Payment Links and Buy Buttons this can be automatic; for a server-side Checkout Session you set one field:4
Match the payment to the post
On the completed-payment webhook, read
client_reference_id, find the click, find the post.The honest-attribution rule
If a payment arrives with no tracking id, or one that doesn’t resolve to a click, don’t guess. Leave it unattributed. Referrer matching, time-window last-touch and fingerprinting all produce a modelled number that makes the real number doubtful. Subtract refunds and chargebacks so a post’s revenue reflects money you kept.How seenpaid does it for you
- Tracked links are minted when you publish (or your own URL gets a
cp_tidparameter, your choice). - The pixel (one script tag) keeps the id and attaches it to Stripe Payment Links, Buy Buttons and Checkout. See Track your sales.
- Matching runs off your connected revenue source via webhooks, including subscription invoices and refund reversals, and works the same way for Gumroad, Lemon Squeezy, Whop, Shopify, Paddle, Polar and Dodo Payments. See Connect a revenue source.
- Sales traced to a post on Results shows what share of your sales matched, so gaps never hide.
Turn it on
Attribution is optional and off by default. Here’s the switch.