Fathom Analytics alternative: free, open-source analytics your AI agent sets up

Fathom Analytics is cookieless, privacy-first web analytics from an independent Canadian company: from $15 a month for up to 100,000 pageviews across 50 sites, after a 7-day trial that needs a card (as of 7 November 2026). AgentFirstStack Analytics is cookieless too, but free and open source, and an AI agent can create the account, the site and the goals over REST and MCP and check its own install. It adds revenue and MRR from Stripe, Paddle, Polar and LemonSqueezy, AI crawler reports and Core Web Vitals. Fathom is the better choice for a simple dashboard your team reads, EU isolation by default and history kept for as long as you subscribe.

Updated

Set it up with one prompt

Paste this into your coding agent. If the site runs Fathom, the agent keeps it in place, sends the same events to both, and brings Fathom's history over when it can.

Paste this into Claude Code, Cursor or Codex

Add analytics to this project with AgentFirstStack. It's free, open-source, cookieless analytics built for agents, and you can do all of it yourself: there is no signup form, and no email or verification is needed. 1. Read https://agentfirststack.com/llms.txt and https://analytics.agentfirststack.com/llms.txt. 2. If this project's .env already has AGENTFIRSTSTACK_API_KEY, use it and read AGENTFIRSTSTACK.md. Otherwise get a key: curl -X POST https://agentfirststack.com/v1/signup, and save api_key in .env as AGENTFIRSTSTACK_API_KEY and in the production secrets. 3. Find what the site uses today. If it runs Fathom, note its site id and every fathom.trackEvent call (name and value), and don't remove any of it. 4. Create a site for the production domain and serve the snippet first-party: a first-party domain (one CNAME), or else the path proxy from the install answer. For each Fathom event, send the same name with afsa('event', ...) and create a goal for it. Don't send purchase values from the page: if the business takes payments, connect the provider instead (Stripe in one call with a restricted key I give you; Polar, Paddle or LemonSqueezy by webhook) and pass afsa.visitorId() into the checkout. 5. If you can get Fathom's daily history (its API with a token in .env, or a custom export I give you, grouped by day with Site Visitors and Pageviews), import it up to today: POST /v1/sites/:id/imports with source "other" and tool "fathom". 6. Deploy (or tell me to), open the site with ?afsa_debug=1, run verify, then GET https://agentfirststack.com/v1/setup?services=analytics until it says ready or tells you what's left. 7. Write the site id and the env var name (never the key) in AGENTFIRSTSTACK.md, and create a claim link for me with POST https://agentfirststack.com/v1/claim-link. Tell me what you set up and imported, how you verified it, and give me the claim link. Leave Fathom installed until I say otherwise.

What Fathom is

Fathom's headline is "Analytics without the cookies", and its homepage says: "Fathom doesn't use cookies, so no consent banner is required for your analytics" (as of 7 Nov 2026). It counts visitors with "a unique, privacy-preserving signature that rotates every 24 hours at midnight UTC", so a visit on Monday and one on Tuesday are two visitors (How Fathom measures your analytics). EU visitors' data is processed in the EU by default, and an "Extreme EU Isolation" script routes all traffic through the EU (EU isolation). As a Canadian company, it cites Canada's EU adequacy decision.

Events carry a name and an optional value in cents, which is how Fathom tracks ecommerce revenue (Track ecommerce conversions). It imports GA4 history after you sign in with Google, as daily data, in up to 48 hours (Google Analytics Importer), and exports CSVs grouped by hour up to year, with dimensions that include the AI assistant a visit came from (Export your data). It also has Search Console keywords, shared dashboards with a password and expiry, email reports, milestones on the chart, a firewall for pages, IPs, referrers and countries, and bot detection that uses bot user agents and data-centre IP ranges (Bot detection).

For agents, the API manages sites, events and milestones and runs reports. A person creates the token in the dashboard, after signing up with an email, a password and a card (Create a Fathom account). "Each request counts towards your monthly pageviews", and the included allowance is 600 requests an hour, with paid API tiers from $19 to $399 a month (API reference). Fathom's help center and API reference list no MCP server.

Fathom's plans (usefathom.com/pricing, as of 7 Nov 2026), billed monthly; yearly billing gives "2 months free":

Monthly pageviewsPrice
Up to 100,000$15 a month
Up to 200,000$25
Up to 500,000$45
Up to 1,000,000$60
Up to 2,000,000$100
Up to 5,000,000$140
Up to 10,000,000$200
Up to 15,000,000$290
Up to 20,000,000$380
Up to 25,000,000$470
Over 25,000,000Custom

Every plan has the same features: 50 sites (more in packs of 50 for $10 a month), "Full analytics history while subscribed", event and revenue tracking and the API. Over the limit, "We'll never turn your analytics off for occasional traffic spikes"; if you stay well over, Fathom asks you to upgrade and, after reminders, pauses dashboard and API access while it keeps collecting.

How AgentFirstStack Analytics differs

Both count visitors without cookies and with a salt that changes every day. The difference is who operates the tool, and what sits around the page counts.

  • No signup form, no card. POST https://agentfirststack.com/v1/signup returns a key. Your agent creates the site, gets the install code for the framework, adds goals and checks the install; you claim the project at the end with a link and your Google sign-in.
  • Writes over MCP, not only REST. The same key works on a REST API and an MCP server that can create sites, goals, funnels, alerts and reports, record payments and run read-only SQL. Read-only keys see only the read tools. API reads are 300 a minute per project.
  • Checks your agent runs. verify fetches the live page and checks the snippet, the script and the Content-Security-Policy; ?afsa_debug=1 marks its own visit as test traffic it can watch in realtime; the setup check returns "ready": true or a list of fixes.
  • Revenue from payments, not the page. Anyone can send browser events, so revenue sent from the page is ignored unless the site turns it on. Payments come from Stripe (one call with a restricted key, 90 days of history), Polar, Paddle, LemonSqueezy or a payments API, joined to the visit that brought them, with MRR by channel and campaign: revenue and MRR.
  • Events with properties. Up to 30 properties per event, goals on events, pages or scroll depth, funnels in order or any order with time windows, and six attribution models.
  • AI search and page speed. Your server can report AI crawler visits, which are set next to the visitors AI assistants send (AI search); the tracker measures Core Web Vitals from real visitors, by page, device, country and browser (page speed).
  • Served from your domain. A first-party domain (POST https://agentfirststack.com/v1/first-party-domains with {"hostname":"edge.example.com"}, one CNAME to fp.agentfirststack.com) serves the tracker from your own subdomain with no server code, so ad blockers that block analytics hosts don't drop the visit. A path proxy is the alternative.
  • More on the same key. A tag manager that sends conversions to the ad platforms' APIs, session replay and email inboxes, free on the hosted version.

Side by side

Fathom AnalyticsAgentFirstStack Analytics
PriceFrom $15 a month for 100,000 pageviews; 7-day trial with a cardFree hosted service with fair-use limits
AccountA signup form with email, password and cardPOST /v1/signup, one request
Sites50 included, more in packs of 5010 per project (3 before a person claims it)
Visitor countingA signature that rotates daily at midnight UTC; no cookiesA hash with a daily salt; no cookies by default; persistent mode optional
EU processingEU isolation by default; an all-EU scriptNo EU-only processing setting
EventsA name and an optional valueUp to 30 properties; goals on events, pages or scroll depth
RevenueEvent values in cents, sent from the pagePayments from Stripe, Polar, Paddle, LemonSqueezy or the API, joined to visits; MRR
APISites, events, milestones and reports; requests count as pageviews; 600 an hour includedRead and write for everything; 300 reads a minute
MCPNone listedRead and write tools on the same key
ImportsGA4, with Google sign-inGA4, Plausible or any tool's daily totals, Fathom included, with a check that the numbers match
HistoryFull history while subscribed400 days on the hosted service
Search Console keywordsYesNo
Script served fromcdn.usefathom.comYour subdomain (first-party domain) or a path on your site
Also includedEmail reports, shared dashboards, firewall, data removalsEmail reports, share links, exclusions, AI crawler reports, Core Web Vitals, alerts; tags, replay and inboxes on the same key
SourceHosted service, "100% independently owned"AGPL-3.0, self-hostable on Cloudflare; browser scripts MIT

When to choose which

Use Fathom if

  • People on your team or your clients read the dashboard and email reports, and want one simple page.
  • EU processing by default matters to you, or you'd rather pay an independent company with no investors.
  • You want history kept for as long as you subscribe, Search Console keywords, or 50 sites on the smallest plan.
  • Event values are all the revenue tracking you need.

Use AgentFirstStack if

  • An AI agent should set up analytics from nothing and keep it current, without a person creating accounts, cards or tokens.
  • You want revenue and MRR joined to visits from your payment provider, not values sent from the page.
  • You want AI crawler reports, Core Web Vitals and alerts in the same API, and MCP with write access.
  • You want it free, open source, or on your own Cloudflare account, with tags, replay and inboxes on the same key.

Moving from Fathom

  1. Find it. The tags service's site scan recognises Fathom's script and keeps its site id, and the setup check's migrate.tools row lists it until its history is brought over.
  2. Events. Each fathom.trackEvent('newsletter signup') gets an afsa('event', 'newsletter signup') next to it and an event goal with the same name. Values sent with _value are browser revenue, which we ignore by default: connect the payment provider for purchases instead.
  3. Daily history. Fathom's custom export, grouped by day with Site Visitors and Pageviews (and one dimension if you like: Page, Referrer, Country or Device Type), renamed to the generic columns (date, visitors, pageviews, and page, source, country or device), goes to POST /v1/sites/:id/imports?source=other&tool=fathom. Fathom's reports API works too.
  4. Compare, then decide. Keep both for a week and import Fathom's daily visitors for those days too. GET /v1/sites/:id/imports/compare?tool=fathom sets our visitors next to Fathom's and says whether they're close. Both count a visitor once a day, so the method matches; ad blockers and bot filtering can still differ. Remove Fathom when they're close and you say so.

FAQ

Is AgentFirstStack cookieless like Fathom?

Yes, by default. A visitor is a hash of a daily salt, the site, the IP address and the user agent, so like Fathom it counts a person once a day and sets no cookies. Persistent mode, which you turn on per site, keeps a random id in localStorage so visits on different days link.

What does Fathom cost?

As of 7 November 2026, from $15 a month for up to 100,000 pageviews, $60 for 1 million and $200 for 10 million, with 50 sites on every plan and 2 months free on yearly billing. The 7-day trial needs a card. AgentFirstStack's hosted service is free with fair-use limits.

Can an AI agent set up Fathom?

Partly. Fathom's API can create sites and events and run reports, but a person signs up first with an email, a password and a card and creates the API token in the dashboard. API requests count towards the monthly pageviews, and Fathom lists no MCP server.

Can I move my Fathom history?

The daily totals, yes. Export them from Fathom grouped by day, or read them from its API, and import them with source other and tool fathom. Keep Fathom running for a week, import those days too, and compare the two with the imports compare call before removing it.

Does AgentFirstStack keep EU data in the EU?

There's no EU-only processing setting. If your data has to stay in the EU, Fathom's EU isolation is on by default, and that's a reason to choose it.

How is revenue tracked differently?

Fathom attaches a value to an event sent from the page. AgentFirstStack takes revenue from your payment provider (Stripe, Polar, Paddle, LemonSqueezy or its payments API), joins each payment to the visit that brought it, and reports MRR and churn by channel and campaign. Browser-sent revenue is ignored unless a site turns it on.

Product names belong to their owners. AgentFirstStack isn't affiliated with Fathom Analytics.