The claim that a tool can tell you which tweet produced a specific $49 payment sounds like it must involve either magic or invasive tracking. It involves neither. It is four concrete mechanical steps, each of which you could implement yourself in an afternoon, chained together so they run automatically.
Understanding the chain matters even if you never build it. It tells you exactly where attribution breaks, why some sales get credited and others do not, and what you can reasonably expect the numbers to mean.
Step 1: connect Stripe with read-only access
The connection uses Stripe Connect OAuth, which is the same mechanism your accountant uses to pull your books. You click authorize, Stripe shows you exactly which permissions are being requested, and you approve. No API keys pasted into a form, no code.
The scope that matters here is read-only. A read-only connection can list charges, read payment metadata, and receive webhooks about completed payments. It cannot create charges, issue refunds, change your prices, or transfer funds anywhere. If you ever want to check, Stripe lists every connected application in your dashboard settings along with its permissions, and you can revoke access from there in one click without contacting anyone.
This is worth understanding properly rather than taking on faith, because the honest version of the security question is not whether the vendor is trustworthy but what the connection is technically capable of. A read-only Stripe connection is capable of reading. That is the whole risk surface.
Step 2: post with a tracked link
Instead of pasting your raw product URL into a post, you share a short link that redirects to it. The redirect is instant and invisible to the visitor. What it does is record which post the click came from before forwarding the browser onward.
The mechanism is a lookup table. Each link maps to one post id. When someone clicks, the server writes down the post id and issues a redirect. The visitor lands on your product page a few milliseconds later, carrying a tracking identifier in the URL or in a cookie set on your own domain.
This step is where most attribution quietly fails, because it depends on you actually using a distinct link per post. If you paste the same URL into every post, there is nothing downstream that can separate them. The discipline of one link per post is the whole foundation.
Step 3: the tracking id survives to checkout
Now the identifier has to travel from the landing page to the payment. Stripe provides two fields designed exactly for this.
- client_reference_id on a Payment Link or Checkout Session. A free-form string you set, which Stripe stores against the session and returns on the webhook.
- metadata on a Checkout Session or PaymentIntent. Arbitrary key-value pairs, useful when you want to carry more than one value.
If you sell through a Stripe Payment Link, this is a URL parameter and nothing more. If you sell through a signup flow with a trial, the id gets stored client-side at first touch and attached when the Checkout Session is created, which is a few lines in whatever creates that session.
The practical consequence is that the tag now rides along with the money. Whatever happens next, the payment record itself knows which post sent the visitor.
Step 4: the webhook fires and the sale gets matched
When the payment completes, Stripe sends a webhook event. The event payload includes the amount, the currency, the customer, and the client_reference_id or metadata you set back in step three.
The matching logic is then trivial: look up the tracking id, find the post it belongs to, record the amount against that post. The dashboard row that previously read "1,240 impressions, 31 clicks" now also reads "$147 attributed". Refunds and disputes arrive as their own webhook events, so a properly built system subtracts them rather than leaving you with inflated numbers.
That is the entire chain. Connect once, post normally with tracked links, and the matching happens on its own. This is the flow seenpaid implements end to end, which is why the setup is a one-time click rather than an integration project. It handles the link generation across all 21 networks it posts to, so the tracked link is created as part of publishing rather than as a separate chore.
What the number does and does not mean
The attributed figure on a post means: someone clicked this specific link and later paid. It is a strong signal. It is not proof of causation.
This is last-click attribution, and last-click has a well-known bias. It over-credits whatever came at the end of the journey and under-credits everything that built awareness earlier. A post that finally converted someone who had been reading you for two months gets the full credit; the twelve posts that made them a reader get nothing.
Read the numbers accordingly. High attributed revenue tells you a post converts people who are already warm. Low attributed revenue does not tell you a post was worthless, especially if it is educational content near the top of your funnel. Use the numbers to find what closes, not to decide what to delete.
Common reasons a sale does not get attributed
Some payments will arrive with no tag. This is normal and worth understanding so you do not chase phantom bugs.
- The visitor cleared cookies or used a private window between clicking and buying.
- They clicked on a phone and bought on a laptop. Nothing links the two devices.
- Someone shared your link in a way that stripped the parameters, which many messaging apps do.
- The customer came from a channel with no clickable link at all, such as a podcast mention.
- The gap between click and purchase exceeded your attribution window.
If a solid majority of your payments carry tags, your setup is working. Cover the remainder with a post-purchase "how did you hear about us?" field, which catches exactly the cases tracking structurally cannot.
A sensible first week
Connect Stripe read-only. Generate tracked links for the next ten posts you publish, one per post. Leave it alone for two weeks so real payments accumulate.
Then open the report and sort by revenue. Do not act on it yet. Just look at whether the ranking matches your intuition. It usually will not, and the mismatch between what you thought was working and what actually paid is the most valuable thing this whole setup produces.