Skip to content

Content-led SaaS

Find the blog posts and pages that bring paying customers

Analytics tells you which posts get read. Billing tells you who pays. Joinsight joins the two: each paying customer is credited to the page they first landed on, so a post that brings 400 visits and 6 customers ranks above one that brings 4,000 visits and none.

No card required. The trial clock starts when your first revenue source connects.

Why it's hard to answer today

  • GA4 and Plausible count visits and goal conversions, not the subscription that starts four days later or the upgrade three months after.
  • Stripe knows who pays but not which page, query or post sent them.
  • Joining the two by hand means exporting both and matching emails in a spreadsheet, once, for one month.
PagesExample data · last 90 days
PageSignupsPayingMRR
/blog/stripe-vs-paddle4115€435
/pricing-guide279€312
/blog/mrr-calculator336€174
/blog/saas-metrics-glossary581€29

Measured

The glossary brings the most signups and almost no revenue. That is the post to stop promoting, not the one to write a sequel to.

How Joinsight answers it

  1. The snippet records the first page

    A first-party script records where each visitor first landed, with referrer and UTM tags, once per session.

  2. identify() links the visit to a user

    One call at signup ties that first visit to your user ID. Stripe's metadata.user_id ties the user to the subscription.

  3. Pages are ranked by what they earned

    Content & channels lists each landing page with Search Console clicks, sessions, signups, paying customers, attributed MRR and revenue per visitor.

  4. Queries are split out, and labeled

    Open a page to see the Search Console queries behind it. Their revenue is modeled from each query's share of clicks, and marked that way.

What you connect

Good to know

  • Page revenue needs customers who arrive after the snippet is live. Expect useful numbers after about 30 days.
  • Credit goes to the first page a customer landed on, not every page they read before paying.
  • Visitors who block scripts or refuse consent and leave before signing up can't be attributed. The share that was attributed is shown on every report.

Set it up

  • Install the tracking snippet

    Add the first-party script, pass consent from your cookie banner, serve it from your own domain and check that it works.

  • Link visitors to customers with identify()

    Call identify() at signup, from the browser or your server, and use one user ID across Stripe, RevenueCat and your app so each person is one customer.

  • How attribution works

    First touch, identity stitching, measured and modeled numbers, the attributed share, and why Joinsight never reaches 100%.

Further reading

Other questions it answers

See what makes you money.

Connect Stripe or RevenueCat and Search Console, and you see combined MRR and 16 months of search history on day one. Page and keyword revenue follow as the snippet collects first touches.

No card required. The trial clock starts when your first revenue source connects.