Cookieless · No cross-site profile · 1600 bytes

Which post paid for itself?

Web analytics that ties every visit to the revenue it produced. Stop reading “1,200 visits from X” and start reading “X → 9 sales → $1,240”.

Every plan, free for 14 days. Card required, charged when the trial ends, cancel any time before it and you pay nothing.

originstat.com/app/s/acme.inc
acme.inc
0 now24h30 days12 months
Visits
0
▲ 38.2%
Visitors
0
▲ 31.4%
Sessions
0
▲ 29.0%
Bounce
0%
▼ 4.1 pts
Duration
2m 14s
▲ 18s
Revenue
$0
▲ 62.0%
Visits over timeLast 30 daysPrevious 30
X / Twitter034%
Google / organic024%
Direct015%
ChatGPT09%
Hacker News07%
Shared link05%
Reddit04%
Revenue by sourceFirst touch
X / Twitter9 sales$0
Hacker News6 sales$0
Google / organic4 sales$0
ChatGPT2 sales$0
Direct1 sale$0

Reddit brought 890 visits and no sales. Hacker News brought half that and $890.

Channels
Social41%Search24%Direct15%AI9%Referral7%Email4%

AI is 9% of this month and climbing. In Google Analytics it is filed under “referral”, mixed in with everything else.

/040%
/pricing023%
/blog/how-we-built-it013%
/docs09%
/signup06%
Countries
US044%
GB016%
DE012%
IN010%
CA08%
BR06%
AU05%
Devices
desktop064%
mobile031%
tablet04%

Two thirds of this month is desktop. The mobile share is where the bounce rate lives.

Journeystimes walked
From pageNext pagePage after/pricing → /docs: 96+ times at least96+/docs → /signup: 96+ times at least96+/ → /pricing: 205+ times at least205+/docs → /pricing: 310 times310/ → /docs: 480 times480/blog/how-we-built-it → /: 610 times610/pricing → /signup: 860 times860/pricing → /signup: 540+ times at least540+/ → /pricing: 2,140 times2,140/: show the hops in and out of it//pricing: show the hops in and out of it/pricing/pricing: show the hops in and out of it/pricing/signup: show the hops in and out of it/signup/blog/how-we-built-it: show the hops in and out of it/blog/how-we-built-it/: show the hops in and out of it//docs: show the hops in and out of it/docs/docs: show the hops in and out of it/docs/signup: show the hops in and out of it/signup/pricing: show the hops in and out of it/pricing
//pricing2,140
/pricing/signup860
/blog/how-we-built-it/610
//pricing/signup540
//docs480
/docs/pricing310
/blog/how-we-built-it//pricing205
/pricing/docs/signup96

Each arrow is a hop from one page to the next, thicker the more often it happened. The indigo route is the most walked one; point at a page to see what leads to it and where it goes. A number with a + comes only from longer walks, so the hop happened at least that often.

A real dashboard, with a made-up company's numbers. Same components you get on day one.

Which channel pays, and whether it paid for itself

Visits tell you where people came from. These three tell you what to do about it. Every figure here is worked out from the acme.inc demo above.

Conversion by source

X sends 5 times the traffic of Hacker News. Hacker News converts at 3 times the rate.

Sales divided by sessions from the same source, and what each session was worth after refunds. Beside every source, on the dashboard you already open.

SourceSessionsSalesConv.Per session
X / Twitter4,85290.19%$0.26
Hacker News94660.63%$0.94
Google / organic3,42140.12%$0.18
ChatGPT1,25820.16%$0.14
Spend and return

Type in what you paid. See what came back.

A sponsorship, an ad, a listing: weighed against the net revenue from the same source or campaign.

  • Promoted postsX / Twitter$400 in, $1,240 back3.1×
  • Sponsored threadReddit$300 in, $0 back0.0×
Sale notifications

Every sale in Slack or Discord, with where it came from

Paste an incoming-webhook URL. Only new sales are posted, never your history.

OriginStat

New sale on acme.inc: $149.00 from Hacker News (campaign: launch).

Where your traffic actually comes from

Every visit is checked against several independent signals before we name a source, and they disagree often. That is the whole job, and it is why these two reports describe the same week.

Most analyticsOriginStat
“Direct, 38%”Direct, shared links and the platforms that hide behind them, told apart
Twitter, twitter.com and t.co as three separate rowsOne row, named X, with the whole number on it
ChatGPT and Perplexity buried in “referral”AI as its own channel, so you can watch it grow
Ad traffic lost whenever the browser withholds the referrerStill attributed to the campaign that paid for it
A link from a phone app counted as “direct”Counted as what it was
Bots and link previews inflating the whole reportFiltered before anything is counted

And when nothing resolves, we say so. A visit we can tell arrived from somewhere, but cannot name, is reported as a shared link, not quietly filed under “direct” as though we knew.

Refunds

Net, not gross

A refund comes off the source that brought the sale, on the day it happens. A channel that sells well and refunds a third of it stops looking like your best one.

AI traffic

ChatGPT gets its own channel

ChatGPT, Perplexity, Claude, Gemini and Copilot, separated instead of buried in “referral”. It is the fastest-growing source most dashboards cannot show you.

Trust

Bots filtered from day one

Crawlers, uptime monitors, browser prefetch and Slack link previews never counted. Nor are your own visits, once you switch yourself off.

Speed

1600 bytes, deferred

One script tag, no cookie, nothing to profile anyone with, and nothing that blocks your page from rendering. Proxy it from your own domain and ad blockers stop mattering.

Sharing

A public dashboard, one switch

The open-stats page founders like to show, on its own clean URL, without exposing anything else in your account.

Goals

No JavaScript to write

Put data-goal="Signup" on any button. That is the whole integration: no API to call, no events to name in a config file.

Priced per event, not per feature

Every plan has everything. What changes is how many events and how many sites.

Pro
$89.99/yr
$8 a month · saves $17.89
  • 500k events a month
  • 10 sites
  • Revenue attribution & cohorts
  • Spike alerts and badges
  • Unlimited history
Start 14-day trial
Scale
$179.99/yr
$15 a month · saves $35.89
  • 2.5M events a month
  • 30 sites
  • Revenue attribution & cohorts
  • Spike alerts and badges
  • Unlimited history
Start 14-day trial
Business
$499.99/yr
$42 a month · saves $99.89
  • 10M events a month
  • Unlimited sites
  • Revenue attribution & cohorts
  • Spike alerts and badges
  • Unlimited history
Start 14-day trial

Every plan starts with the same 14-day trial, on the full plan, not a cut-down version of it. A card is required and it is charged when the trial ends; cancel before then and you pay nothing. For scale: Plausible charges $99/mo for a million pageviews. Here $49.99 buys ten million.

Questions people actually ask

Do I need a cookie banner?

Almost certainly not for us, but the honest answer is that it depends on where you are and we are not your lawyers. We set no cookie, we never store an address, and the identifier that tells one visitor from another is rebuilt every midnight, so it cannot follow anyone into tomorrow, let alone across sites. There is no profile here to disclose.

What the script does keep is a little bookkeeping in your own site’s storage, so it can tell one session from the next and credit a sale to the campaign that started it. It stays on your domain, holds no identity, and is not a cookie, but it is still something written to a device, and a few jurisdictions read their rules broadly enough to want that mentioned. Our privacy page describes it exactly, so you can say the same thing in your own notice.

What exactly counts as an event?

A pageview or a custom event. Requests we discard as known bots, as browser prefetch, or from anyone who has excluded themselves do not count. We would rather say that here than argue about it on your invoice.

What happens if I go over my plan?

We keep counting. At 100% you get an email and a banner, and not a single data point is lost. Between 100% and 150% you get a full grace period. Only well past that, for two months running, do we move you up a plan, with seven days’ notice and the option to say no.

We never stop measuring. Cutting your history off in the month things went well for you is the worst possible moment to do it.

One site went viral and ate my whole allowance.

That is why every site can have its own cap. The allowance is a single pool across your sites because that is simpler to reason about, but you can tell any one site not to spend more than a set number of events a month, so a side project cannot blind the site that pays your bills.

How does the revenue attribution work?

The first time someone lands on your site we remember what brought them. Weeks later, when they buy, the order reaches us from your payment provider (Polar, Stripe, Lemon Squeezy, Paddle or Dodo, through a read-only key or a webhook) and we match the two, so the sale is credited to the source that started it. Attribution is first touch.

Setting it up is one attribute on the link to your checkout. Skip it and your revenue is still counted, it just cannot be split by source.

Will ad blockers break it?

Any script served from an analytics domain eventually lands on a block list, and for a technical audience that can be a large share of your traffic. Proxy our script from a path on your own domain and it stops being blockable. We document it for Cloudflare, Vercel and Netlify, and it takes about five minutes.

Can I make my dashboard public?

Yes, with one switch. You get a clean public page you can link from your own site, the open-stats page a lot of founders like to show, without exposing anything else in your account.

What if I cancel?

Cancel during the trial and your card is never charged at all. Cancel later and the plan runs to the end of the period you already paid for.

After that the tag stops counting and nothing is deleted: your dashboard and every event already recorded stay readable, with no export deadline and no thirty-day deletion clock. Put a plan back on and it picks up from that day.

One tag. About a minute.

Paste this in your <head> and the dashboard starts filling in as the first visitor lands.

<script defer data-site="…" src="https://originstat.com/o.js"></script>
Start a 14-day trial