Software as a service
For SaaS startups running five experiments at once: which one brought revenue.
An early SaaS startup earns its first revenue while trying everything at once: founder posts, cold email, a launch, content, a partner or two. Tally ties each subscription to the visit behind it and says how much of your revenue it can account for, so the channel you double down on is one that actually paid.
14 days free, no card needed.
01How they sell
- SubscriptionMonthly and annual plans priced while the team is still learning what customers will pay, so plan names and prices change often and each change can be read against revenue.
- FreemiumA free tier or open trial to get usage early; the paid conversion can come weeks later, when a team outgrows the limits.
- UsageSome startups bill part of the price by usage from the start, so invoices grow with the customer and the first month says little about the account.
02Payments it reads
- StripeThe default at incorporation: Checkout for self-serve plans and Stripe invoices for the first hand-sold annual deals, both read with a restricted key.
- PaddlePicked by teams that sell abroad from day one and want a merchant of record to deal with sales tax; transactions, renewals and adjustments are read.
What Tally can't read
- A pilot paid by wire into the company's bank account, rather than through a Stripe or Paddle invoice, isn't read.
- Deals billed through a cloud provider's marketplace are paid out by that provider, so they don't reach Tally.
- Calls, demo notes and deal stages in your CRM aren't read; a hand-sold deal links to a visit only through the buyer's email, if your site identified them.
03Where buyers come from
- Founder posts on LinkedIn and XEarly customers may follow a founder for weeks before trying the product; their first visit and the one just before paying are both kept, so a post's slow effect stays visible.
- Cold emailOutbound sequences with UTM-tagged links show as campaigns, so a sequence that books calls but never brings a paying visit stands out.
- Launch sitesA launch brings a burst that fades within days; credited revenue a month later says whether it found customers or only spectators.
- AI assistantsBuyers asking ChatGPT, Claude or Perplexity for a tool in your category land in a channel of their own, small at first and worth watching from month one.
- Accelerator and investor introsIntroductions from a batch or a portfolio arrive as shared links or typed addresses; Readable Direct separates them from people who bookmarked the site.
04What Tally answers
Which of this month's experiments brought paying customers?
Give each experiment its own UTM campaign and the sources breakdown puts the revenue behind it on the same row as its visitors, so a channel that sends traffic but no money is plain within a few weeks.
Sources with revenueCan we trust these numbers enough to put them in an investor update?
Coverage says what share of revenue is linked to a visitor and why the rest isn't, with the snippet that fixes each reason. Quote channel figures for the linked share and say how large that share is.
CoverageCan we pull revenue by channel into our own reporting?
The REST API and the command line give you the figures to build a weekly report from, and the MCP server lets an AI assistant answer questions about them, so nobody has to paste screenshots into a deck.
API, CLI and MCPDid our first big customer ever visit the site, or was it all sales calls?
Open the customer in the visitor list and their journey shows each visit before the payment, if the payment was linked. A deal that came purely from calls shows as unlinked instead of being credited to a guess.
Visitors and journeysDo people even reach the plan we want them to buy on the pricing page?
Click and scroll heatmaps show where visitors stop on the pricing page and which plan buttons they press, which matters when the page changes every other week.
Heatmaps
05Numbers worth watching
- Coverage
- The share of revenue tied to a visit; until it is high, channel comparisons rest on a fraction of your customers.
- Revenue per visitor
- Revenue divided by visitors for each experiment, which keeps a loud channel from looking better than a quiet one that pays.
- Conversion
- Paying visitors over all visitors, worth reading before and after each pricing change.
- Visitors from AI assistants
- Visits from AI assistants; track them from the start so you can tell when they begin to matter.
06An example
Glad HamsterCustomerBerlin, Germany · Desktop · FirefoxRedditOrganic Sociallatest visit: 4 pages/blog/stripe-fees+2/thanks3 visits3m 08s median6m 42s longest$49
Visits, last 30 days
Whole journey- RedditOrganic Social/blog/stripe-fees/pricing/signup/thanks
4 pages · 6m 42s engaged · 1 goal$49 credited to this visit
- Directtyped or bookmark/pricing/docs
2 pages · 1m 36s engaged
- GoogleOrganic Search/blog/stripe-fees/
2 pages · 3m 08s engaged
Cosy CapybaraAustin, United States · Mobile · SafariGoogleOrganic Searchlatest visit: 2 pages//pricing1 visit1m 11s engaged–
Visits, last 30 days
Whole journey- GoogleOrganic Search//pricing
2 pages · 1m 11s engaged
Spry BisonToronto, Canada · Desktop · ChromeChatGPTAI Assistantslatest visit: 4 pages/compare+2/docs/api2 visits3m 57s median5m 44s longest–
Visits, last 30 days
Whole journey- ChatGPTAI Assistants/compare/pricing/docs/docs/api
4 pages · 5m 44s engaged · 1 outbound click
- PerplexityAI Assistants/compare
1 page · 2m 09s engaged
Snug CapybaraCustomerLeeds, United Kingdom · Desktop · EdgeNewsletterEmaillatest visit: 2 pages/changelog/2 visits1m 41s median2m 34s longest$120
Visits, last 30 days
Whole journey- NewsletterEmail/changelog/
2 pages · 2m 34s engaged
- Directtyped or bookmark/
1 page · 48s engaged
Bubbly LlamaUtrecht, Netherlands · Mobile · Chromex.comOrganic Sociallatest visit: 1 page/blog/launch-week1 visit1m 04s engaged–
Visits, last 30 days
Whole journey- x.comOrganic Social/blog/launch-week
1 page · 1m 04s engaged
Velvet PenguinBengaluru, India · Desktop · ChromeHacker NewsOrganic Sociallatest visit: 3 pages/blog/stripe-fees/docs/pricing1 visit4m 56s engaged–
Visits, last 30 days
Whole journey- Hacker NewsOrganic Social/blog/stripe-fees/docs/pricing
3 pages · 4m 56s engaged
07Setting up
- Next.jsIn a Next.js app, put the tag in the root layout once; marketing pages and the signed-in app then carry it alike, and route changes count as pageviews.
- StripeAdd the visitor's id to the metadata of every Checkout Session your backend creates, the annual plans included.
- When a hand-sold deal starts with a sign-up form, call tally('identify', { email }) there, so the invoice you send later links by email.
- Send sale alerts to the team's Slack channel, so everyone sees which source each new customer came from.
08Questions
We sell some deals by invoice. Are those counted?
Yes, if the invoice is a Stripe or Paddle one: it is read like any other payment. It links to a visit when the buyer's email matches someone your site identified; otherwise it is counted as unlinked, so the total stays right even when the source is unknown.
We change the website every week. Does the tag need upkeep?
No. The tag stays the same whatever the pages become, and a goal set with data-fast-goal moves with the button it sits on.
Is there anything to learn with only a handful of customers?
Each sale's receipt is useful from the first one. Views that summarise, such as peak hours, say when there aren't enough sales to name a pattern rather than drawing one.