Reading the numbers
Read the dashboard
What each screen answers: Overview, Revenue and customers, Content and channels, and Connections. Periods, provenance labels and the MRR share card.
The dashboard has four main screens in the sidebar: Overview, Revenue, Content & channels and Connections. Below them, under Workspace, are Setup and Settings. Each main screen leads with the one answer it exists for and puts the breakdown one step below it, so you can stop reading as soon as you have what you came for.
| Screen | The question it answers first |
|---|---|
| Overview | What is MRR now, how did it move, and what made money? |
| Revenue | Why did MRR move, and which customers moved it? |
| Content & channels | Which pages, keywords, channels and posts bring paying customers? |
| Connections | Is every source connected and up to date? |
The same numbers feed the Monday brief and the MCP server, so a figure in an email or in Claude matches the one on screen.
What every screen shares
The period picker. Overview, Revenue and Content & channels have a picker with four periods: 7D, 30D, 90D and 12M. Each ends today and includes it. Overview and Revenue open on 30D, Content & channels on 90D. The period is in the URL, so a link to a screen keeps its period. With 12M, charts show weekly points instead of daily ones.
Provenance labels. Every attributed figure is marked Measured or Modeled. Hover the label for what it means. Page, channel and post revenue are measured; keyword revenue is modeled. The difference is explained in How attribution works.
Definitions. The small info marks next to metric names open the written definition of that metric. They are the same texts as on metric definitions, and the full list is also under Connections, in Metric definitions.
Notes on charts. Click a day on the MRR or movement charts to add a note. Notes show on every chart and are also available through MCP. Stripe price changes and Instagram posts are added as notes automatically.
Money. Every amount is in the workspace's reporting currency, converted with ECB reference rates. MRR excludes tax, trials and one-time payments.
Overview
The Overview answers the Monday-morning question in one sentence at the top, for example "MRR is €4,210, up €310 (8%) since 1 Oct." The change compares MRR at the end of the period with MRR the day before it started.
Under the sentence:
- The source split: Stripe and RevenueCat MRR, and, when some subscriptions are past due, how much MRR is at risk on them. At-risk MRR is still counted in MRR until the subscription cancels. A Reconcile link jumps to the reconciliation panel on Revenue.
- Freshness: "Synced 12 min ago" uses the oldest last sync across your sources, so it's never more optimistic than the stalest one. Search Console data lags 2–3 days, and the line says so.
- Share MRR card, next to the period picker, opens the share screen described below.
Then, in order:
Needs your attention. Up to three alerts that fired in the period, each with a one-sentence cause and, where there is one, a "Fix this" link. New-customer events don't appear here. The rules are on Alerts, the Monday brief and new-customer pings.
Attribution status. While the snippet is younger than 30 days, "Attribution warming up: day N of 30" shows a progress bar: page and keyword revenue get reliable after about 30 days of snippet data. If the snippet isn't installed and you haven't skipped it, "Attribution is off" explains what to add.
The MRR chart and the period's numbers, side by side:
| Row | What it shows |
|---|---|
| Net new MRR | New + expansion + reactivated − contraction − churned, with the new, expansion and churned-or-contracted parts |
| One-time revenue | Only when you have one-time sales: the total, net of refunds |
| Active subscribers | Customers with a paid, non-trial subscription, and the change over the period |
| ARPU | MRR ÷ active paying customers |
| Trial conversion | Trials started in the period that became paid. Trials still running are left out until they end, and the row says how many are running. |
| Attributed share | Attributed new MRR ÷ all new MRR, with "N of M new customers linked to a first visit" |
| Goal | Progress toward your MRR goal and the month you'd reach it at the last 90 days' growth, or a link to set one |
Money found. The leak audit: money your billing data shows you are losing, with no snippet or setup needed. Each finding gives its value and the number of customers, which open the list on Revenue. The panel is hidden when there is nothing to report.
| Finding | What it means | Value shown |
|---|---|---|
| Forever coupons | Stripe coupons with no end date on paying subscriptions | What the coupons take off MRR each month, 100% coupons included |
| Customers on old prices | Stripe subscriptions on a price you archived, or one the product's default price replaced, for the same currency and interval | What moving them to the current price would add each month. Tiered and metered prices are left out, and so are prices that are still on sale with no default price replacing them. |
| Past due for 30+ days | Customers whose payments have failed every day for the last 30 days | Their past-due MRR, which still counts in MRR until the subscription cancels |
| Ready for an annual plan | Monthly subscribers for more than a year, not past due, on Stripe or RevenueCat | Their MRR. An opportunity, not a leak, so it isn't in the total |
Amounts are converted to your reporting currency at today's rate. The Monday brief suggests the largest leak as the week's action when it puts more MRR at stake than a slipping money page.
What made money. New MRR by the page each customer first landed on, measured, with the number of paying customers per page, followed by a one-line split by channel. A page links to its detail on Content & channels. If nothing is attributed yet, the panel shows which of the three links is missing: the snippet, identify() at signup, or a payment linked to a signup.
Newest customers. The latest customers to pay in the period, each with MRR at first payment (or the one-time amount), plan, first page and channel. "Source unknown" means no first touch was linked.
If your workspace only sells one-time products, the Overview adapts: the sentence reports revenue over the period instead of MRR, the chart shows revenue per day or week as bars, and "What sold" lists revenue by product. Before any revenue exists, the Overview is the setup checklist instead; see the Quickstart.
Revenue
Revenue answers why MRR moved and who moved it.
MRR by source. MRR over the period. When you have both Stripe and RevenueCat revenue, the chart shows Combined, Stripe (web) and RevenueCat (mobile) as three lines.
MRR movements. The totals for new, expansion, reactivation, contraction and churned MRR, with customer counts for new and churned, and net new MRR. The bars show the movements by day for 7D and by week otherwise. Movements are computed per customer, day over day.
Below the bars, Net new MRR by breaks the same movements down by Plan, Source, First-touch channel or Country. In the channel breakdown, customers without a first touch are grouped as Unattributed, so you can see how much of a week's growth Joinsight can explain.
Cancellation reasons
When anyone churned in the period, Why customers left splits the churned MRR three ways: canceled by choice, payment failed (failed or disputed payments, and refunds) and no reason recorded. Below that, each reason gets its customers, churned MRR and the first-touch channel most of it came from, so you can see, for example, that "Too expensive" mostly comes from Reddit. The comments customers wrote when canceling are listed under In their words. The same reason also appears in the Churned tab and on the customer page.
The churned MRR here is the same churn as in MRR movements, so the reasons always add up to it. Each churn takes the reason of the customer's subscription that ended closest to it.
Where the reason comes from:
- Stripe records why a subscription ended. A failed or disputed payment is always counted as such. For other cancellations, Joinsight uses the answer the customer picked in Stripe's customer portal (too expensive, missing features, switched service, unused, too complex, low quality, customer service or other) and their comment.
- RevenueCat sends the store's reason with its cancellation webhooks: unsubscribed, billing error, price increase, refunded by customer support, or canceled by you. Apple and Google don't ask customers why they leave, so a mobile cancellation reads "Canceled, no reason given".
To collect reasons from web customers, open the customer portal settings in your Stripe dashboard and, in the cancellation options, turn on asking customers for a cancellation reason. Only cancellations made after that carry an answer; earlier ones show "Canceled, no reason given".
Customers
The customer list has five tabs:
| Tab | Who is in it |
|---|---|
| New | Customers whose first payment, subscription or one-time, falls in the period |
| Churned | Customers who stopped paying in the period and have no MRR now, with the MRR they had on their last paying day and why they left |
| At risk | Customers with a past-due subscription, with the amount past due |
| Expiring cards | Paying customers whose card expires this month, with the total MRR riding on them |
| All paying | Customers with MRR now, sorted by current MRR. Churned customers and buyers who only paid one-time are left out. |
A finding opened from Money found adds its own tab, listing its customers by value.
One-time buyers appear under New for the period they bought in. If your workspace only sells one-time products, the list shows New alone.
Each row shows the customer's masked email or your user ID, plan, first touch (page and channel, or Unattributed) and the relevant amount. A "Web + mobile" badge marks someone who pays through both Stripe and RevenueCat; they count as one customer.
The customer page
Open a customer to see their journey, which is the most direct check that attribution is wired up correctly.
- Source: current MRR, MRR at first payment, one-time purchases if any, then first page, channel, campaign, referrer, signup date and country.
- Timeline: first visit, signup ("identify() linked the visit to this user"), first payment, first purchase, and each MRR change, churn (with the MRR lost) or reactivation, in date order.
- Subscriptions: each subscription with its source and status, and for a canceled one the reason and the customer's comment. "Counted in Stripe" marks a RevenueCat subscription that Stripe also bills, which is counted once, from Stripe.
Emails stay masked: Joinsight only stores a keyed hash and a masked form.
One-time sales
When you have one-time sales, a One-time revenue panel shows revenue, payments, average sale and refunds for the period, revenue per day or week, and What sold by product. Refunds are netted from the sale they refund. One-time revenue is never part of MRR.
Reconciliation and churn
Sources reconcile shows how combined MRR is built: Stripe MRR, plus RevenueCat MRR excluding subscriptions billed through Stripe, with the overlap that was left out. The overlap counts paid subscriptions only, not trials, and is converted to your reporting currency the same way MRR is. When RevenueCat is connected, it also quotes RevenueCat's own MRR figure in its own currency, including the overlap, so you can check the two against each other.
Churn shows revenue churn, logo churn and the LTV estimate for the last full month. LTV is ARPU ÷ monthly revenue churn and is always an estimate.
Content & channels
Content & channels answers which pages, keywords, channels and posts bring paying customers. It has up to six views.
Pages. Each landing page's path from Search Console clicks to sessions, signups, paying customers and new MRR, plus revenue per visitor. Signup rate (signups per session) and paying rate (paying customers per signup) sit under the counts. Click any number column's heading to sort by it. A page appears as soon as it has Search Console clicks, before the snippet or any revenue has arrived. Sessions and revenue per visitor count consented visitors only.
When GA4 or Plausible is your traffic source, set on the Google connection, the table adds a GA4 sessions or Plausible visits column: the sessions that tool counted starting on each page in the period. The snippet's column is then labelled Snippet sessions, to keep the two apart. The analytics tool counts with its own consent and bot rules, so its numbers usually differ from the snippet's. They are context only: attribution, signup rate and revenue per visitor always use snippet sessions. A page with analytics traffic alone is listed too.
Select a page to open its queries: clicks, impressions, average position, the change in position against the previous period, and modeled MRR per query. If part of the page's organic revenue came through queries Google anonymizes, a line under the table says how much.
Keywords. Opens with a reminder that keyword revenue is modeled. Three figures come first: Organic Google new MRR, Hidden queries (with their share of organic revenue) and Without search data (pages with no Search Console clicks that month). Then revenue by keyword, and Keyword opportunities: queries at average positions 8–20 over the last 28 days of Search Console data, on pages with organic Google revenue in the last 90 days, ranked by impressions × the page's revenue per click. Revenue per click is that organic Google revenue divided by the page's Search Console clicks over the same 90 days, so both sides come from Google. The panel states the date window it used. The ranking favors queries with many impressions on pages whose search visitors already pay; Striking-distance keywords explains the idea.
Channels. Sessions, signups, paying customers, new MRR and revenue per visitor by channel, measured. Paid channels carry their network, such as Paid search · Google or Paid social · LinkedIn. Social traffic is attributed from referrers and UTM links, so it needs no social API. Social apps often strip referrers, which is what the link builder is for. How each visit gets its channel is on Channels, UTM tags and campaign links.
App Store. Once App Store Connect is connected: impressions, product page views, downloads, trials started and new mobile MRR from RevenueCat, then the store funnel by source type or by campaign link. App Store data arrives 1–2 days late. See Connect App Store Connect and Instagram.
Instagram. Shown when Instagram is enabled for the workspace, marked Beta. Each post with its views and reach next to the sessions, signups, paying customers and new MRR its tagged link drove in the period. Posts join through utm_content set to the post's ID. The list holds the posts published in the period, plus older posts that still brought visits, signups or revenue in it. Sessions and signups count when they happened, paying customers and new MRR by the month of first payment, like pages and channels. Views and reach are Instagram's totals since posting.
Link builder. Builds tagged links so visits get the right channel and post: a "Website link (UTM)" with presets for an Instagram bio, story or post, or a custom tag, and an "App Store campaign link", which needs App Store Connect connected. Saved links are listed for reuse. Tagging conventions are on Channels, UTM tags and campaign links.
Empty views say what they need, as a short checklist of the sources still missing.
Connections
Connections answers whether your data is complete and current. The top line reads like "3 of 6 sources connected, snippet live". If any source is failing or its access was revoked, a warning names it instead.
Sources are grouped as Revenue, Search and traffic, Mobile and social, and Your site (the tracking snippet). Each row says what the source feeds and its state: Not connected, Waiting to sync, Setup not finished, Syncing, Synced with the time, Sync failing, or Access revoked. Setup not finished means a choice is still yours to make, such as the Search Console property or the App Store app's reports, and nothing syncs until you make it. The snippet shows its last session, and turns to a warning when it has been silent for over a day.
Open a source to connect or manage it. Its page shows the sync cadence, the last eight syncs with their result, duration and any error, and, for owners, a Sync now button. The screen refreshes on its own while a sync is running. What each source needs is on Connect Stripe and RevenueCat, Connect Search Console, GA4 or Plausible and Install the tracking snippet.
Setup
Setup is the checklist from the Quickstart: five steps from connecting billing to linking payments to signups, each marked done, waiting, optional or skipped. It stays useful after onboarding. The last step reports how many signups identify() has recorded and how many paying customers are linked, which is the first thing to check when attribution looks thin.
Share your MRR
"Share MRR card" on the Overview opens a page with two 1200 × 630 images for X, LinkedIn or Instagram:
- MRR amount: your current MRR and its growth over the last 12 months, from MRR on the first day of that window. If you started charging less than 12 months ago, growth runs from your first week with MRR and the card says since when.
- Growth only: the growth as a percentage, without revenue figures, for founders who keep their numbers private.
Nothing is published. The image is generated when you view or download it, and only signed-in members of the workspace can do either. Download PNG saves it.
Settings
Settings holds the workspace's name, reporting currency and time zone, the MRR goal, annotations, notifications (new-customer pings, alerts and the Monday brief), AI assistant connections, the team, the site and secret keys, and account options including deleting the workspace. Changing the reporting currency reconverts every figure. All of it is covered in Workspaces, team, settings and billing.