If Stripe is where your revenue lands, the question "does social sell anything" is answerable, most tools just never connect the two ends. planpo.st schedules the posts and listens to your Stripe events, so the connection is automatic.
Setup is a read-only restricted API key, not a full key and not an OAuth grant that can touch your account. planpo.st validates it, registers a webhook, and payments start matching against your tracked link clicks.
Create a restricted key in Stripe
Read-only, from your Stripe dashboard. The connect form deep-links the exact permissions, so it is two minutes, and planpo.st never sees a key that can move money.
Paste it into planpo.st
The key is validated against your Stripe account and stored encrypted. A revenue webhook is registered automatically, pointing at our backend.
Post with tracked links
From then on it is just posting. Payments arrive as events and match back to the posts that drove them.
A Stripe payment matches to a tracked click directly when the trail is intact, or through a 30-day last-click window when it is not. Payments that cannot be tied to a post stay unattributed rather than being guessed onto your calendar, so the per-post numbers you see are ones you can repeat in front of an accountant.
A post publishes with a tracked link
The scheduled post goes out carrying a redirect link. Readers see a normal URL; the redirect records which post, platform and campaign each click came from before passing the visitor through.
Stripe fires a payment event
When someone pays, Stripe sends the event to the webhook planpo.st registered at connect time. The raw event is verified and parsed on arrival.
The matcher looks for the click
Direct click match first (high confidence). No direct trail? The 30-day window looks for the last recorded click from the same visitor (medium confidence). Still nothing? The payment is logged unattributed, deliberately.
The post gets its number
Attributed revenue lands next to the exact post in the dashboard, and any agent connected over MCP can read the same figure with get_revenue_overview.
Every successful charge counts: checkout payments, invoices paid, one-off sales. If Stripe processed it, the matcher sees it.
A new subscription's first payment attributes to the post that started the customer. Ongoing subscription revenue shows in the revenue view alongside per-post attribution, read from Stripe with the Subscriptions permission.
Refunds net out of your totals rather than inflating them, and refunded charges are flagged in the transactions view, so the number you report is the number you kept.
Charges keep their native currency in the transactions view, so a EUR payment does not masquerade as USD.
Every launch thread and changelog post carries a tracked link; subscriptions that start there attribute back. The eternal 'does posting convert' argument gets a column instead of a feeling.
Stripe checkout links in posts attribute sales per post, which reveals which content angle sells the course versus which merely grows the audience.
The client's Stripe connects read-only, and the monthly report shows posts next to the payments they produced. Renewal conversations change shape.
The honest alternative is the UTM spreadsheet: tag every link by hand, wait for GA4 to sample it into a report, then cross-reference conversions against your Stripe dashboard by date and squint. It works, in the way that manual bookkeeping works, and it dies the week you get busy, which is always the week worth measuring.
The other failure of the manual path is silence about confidence: a spreadsheet cell shows a number without saying whether it came from a solid trail or a hopeful guess. planpo.st labels every match direct or window, and refuses to attribute what it cannot support, which is precisely what makes the numbers usable in front of a client or a co-founder.
Where manual still wins
You schedule a LinkedIn post about your annual plan with a tracked link. Tuesday it publishes, Wednesday someone clicks through and starts a subscription.
The Stripe payment event arrives at the webhook, matches the Wednesday click, and the subscription amount appears next to that LinkedIn post in your revenue view. Your agent can read the same number over MCP by calling get_revenue_overview.
Other payment sources
The rest of the loop