Revenue attribution for content-driven founders
See which pages, keywords and posts make you money.
Joinsight links each paying customer in Stripe or RevenueCat to the search query, page or post that first brought them, then reports it in four screens, a Monday email and in Claude.
No card required. The trial clock starts when your first revenue source connects.
Mon 09:14Search Console
Searched “stripe vs paddle fees”, position 6
Mon 09:14Snippet
Landed on /blog/stripe-vs-paddle
Mon 09:31identify()
Signed up as usr_8f2c
Thu 16:02Stripe
Started Solo at €29/month
Revenue by page · this month
Measured/blog/stripe-vs-paddle
€406€435+€29
15 paying customers · first touch on this page
Every number says how it was made.
Attribution is never complete. Visitors block scripts, refuse consent and switch devices. Joinsight shows how much of your new MRR it could link to a source, and labels each figure.
- Measured
- Page, channel and post revenue. Each customer is linked to the page they first landed on.
- Modeled
- Keyword revenue. A page's revenue split by each query's share of Search Console clicks, with Google's anonymized queries kept apart.
- Defined
- MRR, churn and every other metric have one written definition, the same in the app, the email and Claude. Read the definitions
| Page | Paying | MRR |
|---|---|---|
| /blog/stripe-vs-paddle | 15 | €435 |
| /pricing-guide | 9 | €312 |
| / | 11 | €289 |
| /blog/mrr-calculator | 6 | €174 |
| /changelog | 2 | €58 |
Measured
Queries behind /blog/stripe-vs-paddle
- stripe vs paddle fees43% of clicks€187
- paddle alternative22% of clicks€96
- stripe or paddle for saas11% of clicks€48
- Hidden queries24% of clicks€104
Modeled
Three connections, then it runs on its own.
Connect billing and search
Stripe and RevenueCat with read-only keys. Search Console and GA4 or Plausible with a Google sign-in. Combined MRR and 16 months of search history appear the same day.Add the snippet and identify()
A first-party script under 2 KB records where each visitor first landed. One call at signup links that visit to the customer who later pays.<!-- every page --> <script defer src="…/j.js" data-site="js_pk_…"></script> // after signup succeeds joinsight("identify", user.id, user.email);Read the answer
Revenue per page, query, channel and post. Alerts when MRR or signups move, with the segments that caused it, computed by code before any sentence is written.
Read it on Monday. Ask it any day.
The dashboard, the email and the MCP server read the same pre-computed figures, so a question in Claude gets the number you saw on screen.
Monday 07:00 · from Joinsight
Week 43: MRR €3,412, up €87
- MRR
- €3,412, up €87 (+2.6%). New €174 from 6 customers, churned €87 from 3.
- Pages that earned
- /blog/stripe-vs-paddle €58 · /pricing-guide €29 · / €29
- Needs attention
- 2 subscriptions past due, €58 at risk. Cards were declined on renewal.
- One thing to do
- Refresh /pricing-guide. It fell from position 7 to 11 for “saas pricing page” and carries €340 MRR.
Which blog posts brought paying customers last month?
joinsight · get_page_revenue · 30d
Three posts brought 11 of your 23 new customers in September:
- /blog/stripe-vs-paddle: 6 customers, €174 MRR
- /blog/mrr-calculator: 3 customers, €87 MRR
- /blog/paddle-fees: 2 customers, €58 MRR
These are measured: each customer first landed on that post. 72% of new MRR was attributed; the rest came from visitors with no recorded first touch.
Works in Claude, ChatGPT and Cursor. How the MCP server works
Everything a content-driven founder bills, ranks or posts through
- StripeRevenue
- RevenueCatRevenue
- Google Search ConsoleSearch
- Google Analytics 4Traffic
- PlausibleTraffic
- App Store ConnectApp Store
- InstagramSoonSocial
Comparing tools? Joinsight vs Revinho or Joinsight vs Baremetrics.
Read-only, and careful with your customers
- Read-only access to every source. Each credential encrypted with its own data key.
- No IP addresses stored. Emails kept only as a keyed hash and a masked display form.
- Nothing stored on a visitor's device before consent.
- Claude only receives aggregates and labels, never raw customer records.
- Every MCP call is logged, and tokens are bound to one workspace.
Questions founders ask first
How is this different from Google Analytics?
Analytics tools count visits and conversions. Joinsight links a visitor to the customer they became in Stripe or RevenueCat, so each page, query and post is credited with real MRR, including upgrades and churn later.
What do I need to install?
One script tag on your site and one identify() call at signup. For Stripe, add metadata.user_id at Checkout. Everything else connects with a read-only key or a Google sign-in.
How long until I see which pages earn?
Combined MRR and 16 months of Search Console history appear on day one. Page and keyword revenue need new customers to arrive after the snippet is live; expect useful numbers after about 30 days.
What do measured and modeled mean?
Page revenue is measured: each customer is linked to the page they first landed on. Keyword revenue is modeled: a page's revenue is split by each query's share of Search Console clicks, because Google never reveals which query a visitor typed. Every number is labeled.
What happens to visitors who refuse consent?
The snippet stores nothing on their device. Their landing page stays in memory and is passed along only if they sign up before leaving. The share of revenue Joinsight could attribute is shown on every report, so the gap is visible.
Can Joinsight write to Stripe or my other tools?
No. Every connection is read-only, credentials are encrypted, and the MCP server can only read pre-computed numbers.
Find out which posts paid for this month.
From €29 a month after a 14-day trial. Combined MRR and search history on day one; page revenue as new customers arrive.