You published the same idea to six networks on Tuesday. By Friday you have three new paying customers. Which post brought them? Your social analytics will tell you which post got the most impressions. Stripe will tell you three payments arrived. Neither one will connect the two, and so the honest answer is that you do not know.
Not knowing has a cost, and it is not the cost you expect. It is not that you miss a reporting line. It is that you keep spending your limited hours on the platform that feels good rather than the one that pays, because feeling good is the only signal you have.
Why engagement is the wrong number to optimise
Every social platform gives you engagement metrics for free, and they are genuinely accurate. The problem is what they measure. A like costs the person nothing. A follow costs them nothing. An impression is something that happened to them, not something they chose. These numbers describe attention, and attention is only loosely correlated with intent to buy.
The uncomfortable version of this is that the two can be inversely correlated. Broad, entertaining, widely-shareable content reaches enormous numbers of people who will never buy anything from you. Narrow, specific, faintly boring content about the exact problem your product solves reaches far fewer people, most of whom have that problem. The first post wins on every metric your dashboard shows you. The second one pays your rent.
This is not an argument for ignoring engagement entirely. Reach is a precondition — nobody buys from a post nobody saw. It is an argument for treating engagement as an input, not a scoreboard, and for having at least one metric downstream of it that involves money.
What social media revenue attribution actually requires
Tracing a sale back to a post is not a machine learning problem. It is a chain of four unremarkable steps, each of which has to work every single time.
- A distinct tracked link per post per platform, so a click can be identified rather than merely counted.
- A click record with a first-party cookie, so the visitor is still recognisable when they return days later.
- That identifier carried through to checkout — with Stripe, the client_reference_id field on a Checkout Session or Payment Link is built exactly for this.
- A webhook on payment completion that reads the identifier back and joins the sale to the click, and the click to the post.
Every link in that chain is simple. The difficulty is entirely in consistency. Miss the tracked link on one post and that post can never be credited. Forget to append the id on one checkout button and every sale through it is orphaned. Attribution systems do not fail dramatically; they fail by degrading, one skipped step at a time, until the numbers are wrong in ways nobody notices.
The four ways the chain breaks
First, link-hostile platforms. Instagram and TikTok do not give you a clickable link in the post itself. Traffic goes through a bio link, which collapses every post into a single source. If most of your audience is on those platforms, you need either per-post landing sections on the bio page or a discount code per post, and you need to accept that the data will be coarser.
Second, platform browsers. Links opened inside an app often load in an embedded browser with its own cookie store. Someone who clicks in-app, then reopens your site later in Safari, arrives as a stranger. This is normal and unavoidable; it means your attributed revenue will be a floor, not a total.
Third, the long gap. If your product takes weeks to consider, the click and the sale can be a month apart. Whether you credit that depends on your attribution window, and stretching the window to catch more sales makes every number less trustworthy.
Fourth, dark social. Someone screenshots your post and sends it to a colleague on Slack. The colleague buys. No link, no referrer, no chain. That sale was caused by your post and no tracking system will ever prove it. Which is why a simple “how did you hear about us?” field on signup is worth more than its crudeness suggests — it catches the traffic your tooling structurally cannot.
The honest-zero rule
When a sale arrives with no identifier attached, there is a strong temptation to guess. Attribute it to the platform that had the most traffic that week. Split it proportionally. Assign it to the last post published before the payment. All of these produce a fuller-looking dashboard and all of them are worse than useless.
The rule worth holding is that a sale you cannot trace gets attributed to nothing. Not to your best guess. Nothing. An unattributed bucket that says 40% tells you honestly that your tracking has holes and your conclusions are partial. A dashboard that quietly distributes that 40% across your posts tells you a specific post made money when it did not, and you will spend the next month making more posts like it.
A conservative number you can act on beats a complete number you cannot trust. This is not a philosophical position; it is the difference between a measurement tool and a flattery tool.
What you do with the answer
Once revenue is attributed per post, three decisions get much easier. The first is platform allocation: if one network produces most of your revenue and another produces most of your likes, you know where the next ten hours go. The second is content selection: look at your top five revenue posts and find what they have in common, which is almost never what your top five engagement posts have in common.
The third is knowing what to repeat. A post that produced customers is a post worth republishing in a different form in six weeks. Most of your audience did not see it the first time, and the ones who did have forgotten. Recycling proven revenue posts is the least glamorous growth tactic available and one of the most reliable, but you can only do it if you know which posts were proven.
Closing the loop
None of the mechanics here are proprietary. You can build the whole chain yourself with a link shortener, a cookie, Stripe metadata and a webhook handler. Plenty of people do, and if you enjoy that kind of work you should.
What is hard is running it consistently across every post on every platform without ever forgetting a step. That is the specific problem seenpaid solves: it publishes to 21 networks, mints a tracked link per post per platform automatically, and reads your Stripe to match the payments back — so the answer to “which post made money” is a screen you look at, not a project you maintain.
Whichever way you do it, do it. The gap between publishing and revenue is where most content strategies get abandoned, not because they were failing, but because nobody could tell whether they were working.