Grosslytics

Revenue analytics for founders

Gross is vanity. Net is what you keep.

See which posts, searches and AI answers bring buyers, and what each one earned after fees and ad spend.

Free on your own Cloudflare. No cookies.

Live in three steps.

  1. Add one script tag

    Paste a 1.5 KB script into your site’s <head>. Works on any site: Next.js, Astro, WordPress, Webflow, Framer, Shopify or plain HTML.

  2. Point your payment webhook

    Add one webhook URL in Stripe, Razorpay, Polar, Paddle or Lemon Squeezy. Each sale is signed, checked and matched to the visitor who made it.

  3. See which channels pay

    Every source, page and campaign is ranked by the money it brought in after fees and ad spend, not by pageviews.

Every sale comes with its story.

Grosslytics follows a buyer from first visit to payment, then subtracts what the gateway and your ads took. You see the money, and where it really came from.

  • First touch, last touch, or both. Switch models instantly. Linear splits credit 50/50.
  • Fees taken off automatically. Stripe, Razorpay, Polar, Paddle and Lemon Squeezy.
  • Renewals stay attributed. Month 6 still credits the post that found the customer.
Sale #1042 Pro plan · monthly
  1. Mar 3 Saw your post on X x.com (in-app)
  2. Mar 5 Came back from a ChatGPT answer chatgpt.com (AI)
  3. Mar 5 Read /pricing for 2m 14s 92% scrolled
  4. Mar 5 Paid with Stripe 2 days to convert
Gross
$49.00
Stripe fee
−$1.72
Ad spend
−$0.00
You kept
$47.28
Credited 50% to x.com and 50% to chatgpt.com under linear attribution.

Every channel, ranked by what it earned.

Try it. Switch the model, the range, or gross and net.

acme.io27 online
This periodPrevious periodNote

Live

27 on site now
  • Seattle on /pricingchatgpt.comnow
  • Pune on /x.com19s ago
  • $99 sale from Manchesternews.ycombinator.com41s ago
  • Munich on /docsgoogle.com1m ago
  • São Paulo on /instagram.com2m ago
  • Paris on /compare/datafastperplexity.ai3m ago

Visitors from chatgpt.com are worth 4.9× those from google.com, your biggest source.

AI search brings 16% of visitors but 31% of net revenue.

94% of buyers read /pricing before paying; 17% of other visitors do.

Sources

Visitors may return on other days or appear in another source/channel. Referrers show top rows; totals include every source.

Pages

Revenue from buyers who viewed each page; pages overlap.

Sample data from a fictional SaaS.

A tiny tracker. Sharper answers.

“Direct” traffic, unmasked.

In-app browsers hide where visitors came from. Grosslytics names them.

Most toolsGrosslytics
  • Direct Instagram: instagram.com (in-app)
  • Direct TikTok: tiktok.com (in-app)
  • Direct LinkedIn: linkedin.com (in-app)
  • Direct X: x.com (in-app)

The whole tracker

1.5 KB

Compressed. No cookies and no layout shift.

AI answers get credit.

Visits from AI search are tracked as their own channel.

  • ChatGPT
  • Perplexity
  • Claude
  • Gemini
  • Copilot

Ask your numbers.

Connect Claude Code, Cursor or Windsurf over MCP, and ask in plain English.

Which channel earned the most per visitor this month?

chatgpt.com at $1.52 per visitor, from 35 sales. X brought more visitors but earned $1.00 each.

Every gateway.

  • Stripe
  • Razorpay
  • Polar
  • Paddle
  • Lemon Squeezy

Live, not refreshed.

Visitors and sales appear on your dashboard the moment they happen.

Yours to run.

Deploy to your own Cloudflare account in about five minutes. The setup checks each step for you.

Start the setup ›

Everything in the dashboard.

One page, built around the money. All of it is in the free self-hosted version.

  • Three attribution models

    First touch, last touch, or linear. Switch with one click and every panel recalculates.

  • Gross, net or profit

    See revenue before fees, after gateway fees, or after fees and the ad spend you enter per source.

  • Where the money goes

    A simple bridge from gross revenue to what you kept: gateway fees and ad spend, side by side.

  • Buyer journeys

    Open any sale to see each visit and page the buyer saw, from the first click to the payment.

  • Time to convert

    How long buyers take from first visit to paying: same day, within a week, or longer.

  • Lifetime value by first source

    Renewals included, so you know which channel finds customers who stay.

  • When buyers buy

    A weekday-by-hour heatmap of sales, with refunds in red, in your own timezone.

  • Pages that sell

    Revenue by entry page, plus read time and scroll depth, so you know which posts close.

  • Buyers vs everyone else

    How people who paid used your site compared with visitors who didn’t.

  • Readable “Direct”

    In-app browsers from Instagram, TikTok, LinkedIn and X are named instead of hidden as Direct.

  • Locations and technology

    Countries, devices, browsers and operating systems, each with its own revenue.

  • Filters everywhere

    Click any source, page, country or device to filter the whole dashboard to those visitors.

  • Live feed

    Visitors and sales stream in over a WebSocket the moment they happen.

  • Refunds handled

    A full Stripe refund removes the sale from revenue and marks it in red. Nothing to clean up by hand.

  • Chart notes

    Mark a launch or a post on the chart, so next month you still know why that day spiked.

  • Public revenue page

    Share an open revenue page and an embeddable badge. Customer emails and journeys stay private.

  • Bots left out

    Crawlers, headless browsers, verified bots and datacenter traffic are dropped before they reach your numbers.

  • Your currency and timezone

    Report in USD, EUR, GBP or INR, with days and hours on your local clock.

Two lines of setup.

The script goes in your site’s <head>:

<script defer src="https://your-api/g.js"
  data-site-id="gl_…"></script>

The webhook goes in your payment dashboard:

https://your-api/api/webhooks/stripe?siteId=gl_…

Track button clicks with a data-goal="signup" attribute. Stripe and Polar checkout links get the visitor ID added for you.

Your Cloudflare. Your data.

  • No cookies, no IP addresses stored. Buyer emails are masked.
  • Nothing passes through us. The tracker, API and database all run in your own Cloudflare account.
  • Signed payments only. Every webhook signature is checked, and repeats are counted once.
  • Events only from your domain. Visits sent from other sites are refused, and bots are filtered out.
  • Free to run. Cloudflare’s free tier covers most small sites.

What is your analytics costing you?

Compare entry plans, and see how much of your revenue goes to fees.

First-year cost on the entry plan

  • DataFastStarter, $9/mo, 10k events$108
  • PlausibleStarter, $9/mo, 10k pageviews$108
  • DataBullSelf-hosted, $49 once$49
  • GrosslyticsSelf-hosted, $0$0

Published entry prices, checked Nov 6, 2026. Higher traffic tiers cost more on DataFast and Plausible. Hosted options: DataBull from $9/mo, Grosslytics $5/mo.

How much of your revenue is fees?

$10,000
$29

$4,721 / year

goes to Stripe at 2.9% + 30¢ per sale. Grosslytics shows each channel's revenue with this taken out.

Simple pricing.

Self-host

$0 forever

Runs on your own Cloudflare free tier.

  • Unlimited sites
  • All attribution models
  • MCP server included
Start free

Indie Cloud

$5 per month

We run it. 14-day free trial, no card.

  • Everything in Self-host
  • Up to 100,000 events a month
  • Unlimited sites, hosted dashboard
Get Indie Cloud

Lifetime

$29 one time

One command installs it in your Cloudflare.

  • Everything in Self-host
  • No setup by hand: npx grosslytics install
  • Updates with the same command
Get Lifetime

Coming from another tool?

Questions

What makes Grosslytics different from Google Analytics or Plausible?

Those tools count visits. Grosslytics also receives your payment webhooks, so every sale is tied to the post, search or AI answer that brought the buyer, and shown after gateway fees and ad spend.

Which payment providers work?

Stripe, Razorpay, Polar, Paddle and Lemon Squeezy, through signed webhooks. Stripe is the most tested; full Stripe refunds are handled automatically.

What does self-hosted mean?

Grosslytics runs on your own Cloudflare account: a Worker, a D1 database and a queue. Your visitor and revenue data never passes through our servers, and Cloudflare’s free tier covers most small sites.

Do I need to write code?

No. You paste one script tag and one webhook URL. The setup at /start checks each step for you against real data.

What about cookies and GDPR?

Grosslytics sets no cookies and stores no IP addresses. A random visitor ID is kept in your site’s browser storage so a sale can be matched to the visit, and buyer emails are masked. Rules differ by country, so check whether your visitors need a notice or consent.

Will ad blockers break it?

The tracker posts to a neutral /api/event path on your own API with a plain request, which EasyPrivacy and uBlock Origin’s privacy list did not block in our tests.

Can I ask an AI agent about my numbers?

Yes. Your API includes an MCP server, so Claude Code, Cursor or Windsurf can answer questions like “which channel earned the most per visitor this month?”

Can I track several sites or client sites?

Yes. Self-hosting has no site limit; each site has its own ID, currency and timezone.

I use DataFast. Is switching hard?

Swap the script tag and point your payment webhook at your Grosslytics API. Existing data-fast-goal attributes on your buttons keep working.

Is hosting available, or only self-hosting?

Both. Self-hosting is free. Indie Cloud is hosted for you at $5 a month for up to 100,000 events, after a 14-day free trial with no card. Lifetime is $29 once: a license key and one command that installs Grosslytics in your own Cloudflare account and updates it later.

Find out which posts pay the bills.

Free on your own Cloudflare. Set up in about five minutes.