Chapter 5 of 6 · 12 min read
Turn attention into sales
Link strategy, landing pages that work from an in-app browser, offers that fit a post, and how to measure which post actually drove a sale — including what per-post attribution can and cannot honestly claim.
Updated September 11, 2026
Everything up to now produced attention. This chapter is about the narrower thing you actually wanted: some of that attention turning into customers, and knowing which posts did it. The second half is harder than it looks, and a lot of what gets reported as social ROI is channel-level, not post-level. So this chapter is careful about what can be known.
Link strategy: one destination, many doors
The one action from chapter 1 is the destination. The links in your posts, bio and pinned post are doors to it, and the whole measurement question is which door each buyer came through. Three rules:
- Every link points at the same destination, or at a page one click from it. A post that links to your homepage, where the offer is two clicks away, loses most of the people who tapped from a feed.
- Every link is distinguishable. At minimum, UTM parameters that say which network and which post; better, a distinct link per post. Chapter 3’s log has a column waiting for this.
- Where links are not clickable — Instagram and TikTok captions — the bio link is the door, and it should be a page that lists the current offer first, not a generic link tree.
UTM parameters are the free, universal version of this. Google’s own documentation defines five: utm_source, utm_medium, utm_campaign, utm_term and utm_content. For social, a workable convention is utm_source=linkedin, utm_medium=social, utm_campaign= the month or the offer, and utm_content= a short id for the post. Your analytics will then show sessions and, if you have set up conversions, purchases by post id.
The landing page test to run first
On a phone, a tap from a social post often opens in the network’s in-app browser, on a phone, on a mobile connection, by someone who was mid-scroll and will be back to scrolling in ten seconds. The page has to work under those conditions, and most pages built at a desk do not.
- Open your own post in the app, tap the link, time it. If the offer is not visible within a few seconds, that is the first fix.
- The first screen says the same thing the post did. If the post promised "the invoice template", the first screen says "the invoice template", not the company name and a hero image.
- The action is one tap away: a button that goes to checkout or the trial, not a form with eight fields.
- No login before the offer. A page that asks people to create an account before showing what they came for loses the ones who were curious rather than committed.
- It works with no cookie consent clicked and no ad-blocker exceptions, because that is how it will be seen.
Offers that fit a post
A post is a small promise. The offer at the other end of the link should be the same size. Some shapes that fit:
- The thing the post was about. A post about undercharging for revisions links to the pricing calculator or the contract clause, not to "our platform".
- A specific plan, not a pricing page. If the buyer is a solo operator, link to the solo plan’s checkout, so the decision on the page is yes or no rather than which.
- A trial with a clear end. "Seven days, then it is $X" is a promise a buyer can evaluate in a feed. Open-ended "free" makes people wonder what the catch is.
- A free thing that is one step from the paid thing. A template that lives inside the product, a checklist that ends with the product doing the checklist.
Measuring which post actually drove a sale
Here is the honest state of the art, because this is where a confident-looking dashboard can quietly be measuring something else.
A sale can be tied to a specific post only if something from that post travels with the buyer all the way to the payment. There are exactly three ways anything travels: bytes in the URL (a UTM parameter, a tracked link, a token), the browser’s referrer header, or a guess. The referrer header tells you at best which network the click came from — Safari, for one, trims it to the bare domain in some cases, and it can arrive empty. So it can never identify a post. And a guess is a guess, however confident the dashboard looks.
That leaves the URL. If the link in the post carries a per-post identifier, and that identifier reaches your checkout, you have a real answer. If it does not, you have channel-level numbers ("some sales came from LinkedIn this month"), which are useful but are not the thing this chapter promised.
The setup that works with plain tools
- Give every linked post a unique
utm_contentvalue (or a unique short link that redirects with one). - On the landing page, store that value in a first-party cookie or
localStoragewhen the page loads, so it survives the buyer clicking around before buying. - Pass it to the checkout. Stripe Payment Links accept a
client_reference_idURL parameter, up to 200 characters, and return it in thecheckout.session.completedwebhook; Stripe’s docs also describe passing UTM codes through a Payment Link. A custom checkout can put it inmetadata. - Match payments to post ids in a spreadsheet or a small script. Now the chapter 3 log has a revenue column.
Where seenpaid fits, honestly
seenpaid’s optional attribution does the four steps above for you when your payments run through Stripe. It is off by default; the scheduler is the product and this is the plus.
- When a post is published, links in it are rewritten to tracked links carrying that post’s id (or, if you prefer your own domain visible, your URL with a small
cp_tidparameter appended, read by a pixel on your site). - A click records the post id first-party in the buyer’s browser.
- seenpaid connects to your Stripe account through Stripe Connect. Stripe requires a read-write scope for that kind of connection; seenpaid only reads from it — it never charges your customers and never touches payouts. A payment that follows a recorded click is matched to the post that sent the buyer, at full confidence, not modelled.
- What it will not do: guess. A payment with no matching click shows as unmatched, not as "probably LinkedIn". If the match rate is low, the product tells you the tracking setup is incomplete rather than inventing a number.
The output is three numbers next to every post — clicks, sales, revenue — and a ranking. Whether that is worth paying for depends entirely on whether you sell through Stripe and post links. If you do neither, use the UTM setup above and a cheaper scheduler.
What to do with the answer
Once you know which posts sold, the temptation is to post only those. Resist it for a month, because the sample is tiny and one sale is not a pattern. Instead:
- Look at the sold posts’ formats and hooks in the log. If they share one, make that the primary tier’s default (chapter 4).
- Look at the posts with clicks and no sales. That list is the more useful one: it tells you either the landing page is losing them or the promise did not match the offer. Fix the page first.
- Republish the sold posts after a few weeks, with a new first line, and see whether they sell twice. A post that sells twice is the closest thing to a growth engine a solo founder gets.
Sources
Every platform claim in this chapter traces to one of these. Anything not covered here is written as something to test, not a rule.
- Google Analytics help — collect campaign data with custom URLs (UTM parameters)support.google.com/analytics/answer/1033863
- Stripe docs — track a payment link with URL parameters and UTM codes (client_reference_id)docs.stripe.com/payment-links/url-parameters
- Stripe docs — Checkout Session object (client_reference_id, metadata)docs.stripe.com/api/checkout/sessions/object
- Stripe docs — metadatadocs.stripe.com/api/metadata
- WebKit — Intelligent Tracking Prevention 2.1 (seven-day cap on script-set cookies)webkit.org/blog/8613/intelligent-tracking-prevention-2-1/
- WebKit — Intelligent Tracking Prevention 2.3 (24-hour cookie cap after link decoration; localStorage; referrer trimming)webkit.org/blog/9521/intelligent-tracking-prevention-2-3/
- seenpaid — how attribution works, and what it refuses to estimateseenpaid.com/features#attribution
Want the scheduling half done for you?
seenpaid publishes to 21 networks from one composer, ships an MCP server with 50 tools for your AI agent, and can optionally show which post made the sale. Seven-day trial, card required, cancel from the billing page.
Try seenpaid free for 7 days