Theme

Start for free

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.

Start for free

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

  1. 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 revenue
  2. Can 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.

    Coverage
  3. Can 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 MCP
  4. Did 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 journeys
  5. Do 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

Example
  1. 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
    1. RedditOrganic Social
      /blog/stripe-fees/pricing/signup/thanks

      4 pages · 6m 42s engaged · 1 goal$49 credited to this visit

    2. Directtyped or bookmark
      /pricing/docs

      2 pages · 1m 36s engaged

    3. GoogleOrganic Search
      /blog/stripe-fees/

      2 pages · 3m 08s engaged

  2. Cosy CapybaraAustin, United States · Mobile · SafariGoogleOrganic Searchlatest visit: 2 pages//pricing1 visit1m 11s engaged–

    Visits, last 30 days

    Whole journey
    1. GoogleOrganic Search
      //pricing

      2 pages · 1m 11s engaged

  3. Spry BisonToronto, Canada · Desktop · ChromeChatGPTAI Assistantslatest visit: 4 pages/compare+2/docs/api2 visits3m 57s median5m 44s longest–

    Visits, last 30 days

    Whole journey
    1. ChatGPTAI Assistants
      /compare/pricing/docs/docs/api

      4 pages · 5m 44s engaged · 1 outbound click

    2. PerplexityAI Assistants
      /compare

      1 page · 2m 09s engaged

  4. Snug CapybaraCustomerLeeds, United Kingdom · Desktop · EdgeNewsletterEmaillatest visit: 2 pages/changelog/2 visits1m 41s median2m 34s longest$120

    Visits, last 30 days

    Whole journey
    1. NewsletterEmail
      /changelog/

      2 pages · 2m 34s engaged

    2. Directtyped or bookmark
      /

      1 page · 48s engaged

  5. Bubbly LlamaUtrecht, Netherlands · Mobile · Chromex.comOrganic Sociallatest visit: 1 page/blog/launch-week1 visit1m 04s engaged–

    Visits, last 30 days

    Whole journey
    1. x.comOrganic Social
      /blog/launch-week

      1 page · 1m 04s engaged

  6. Velvet PenguinBengaluru, India · Desktop · ChromeHacker NewsOrganic Sociallatest visit: 3 pages/blog/stripe-fees/docs/pricing1 visit4m 56s engaged–

    Visits, last 30 days

    Whole journey
    1. Hacker NewsOrganic Social
      /blog/stripe-fees/docs/pricing

      3 pages · 4m 56s engaged

Fig. 1The visitor list on the example site, one customer's journey unfolded. For a startup, open your largest customers one by one and see whether the site played any part in each sale.

07Setting up

  1. 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.
  2. StripeAdd the visitor's id to the metadata of every Checkout Session your backend creates, the annual plans included.
  3. 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.
  4. 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.