Google Analytics alternative
A Google Analytics alternative that counts sales, without cookies.
GA4 is free and very capable. It is also built for advertising: cookies that last two years, Consent Mode, audiences for Google Ads, and a learning curve few small teams need.
runomine measures visits and money from your backend, with nothing in the browser. Here is the difference, without the hype, and when you should stay on GA4.
Reviewed on October 14, 2026
The short answer
Pick runomine if…
- You want to know which source brings buyers, with revenue read from Stripe, Paddle, Lemon Squeezy, Shopify or PayPal, refunds included.
- Your app has a backend (Laravel, Node, Django, FastAPI, Rust) and you’d rather measure there, with no cookies or third-party scripts.
- You want your visitors’ IP addresses to stay on your server.
- A dashboard you understand in five minutes is enough, or asking your AI assistant over MCP.
Stay on Google Analytics if…
- You spend on Google Ads and need conversions, audiences and remarketing wired in.
- You use the BigQuery export or data-driven attribution.
- You need demographics, interests, or one user’s journey over months.
- Your team already knows GA4 well and misses nothing.
runomine and GA4, point by point
Both answer “where does my traffic come from?”. What changes is where it’s measured, what’s stored in the browser, and how the money arrives.
| runomine | Google Analytics 4 | |
|---|---|---|
| Cookies in the browser | None. No localStorage or fingerprinting either. | _ga and _ga_<id>, expiring after 2 years by default |
| Where it’s measured | In your backend, with a library for PHP, Node, Python or Rust. An optional beacon under 1.5 KB for cached pages and static sites. | In the browser, with gtag.js or Tag Manager. The Measurement Protocol augments the tag; it doesn’t replace it. |
| Unique visitors | A daily hash computed on your server; the salt changes every UTC day | A client id stored in the _ga cookie |
| The visitor’s IP | Never leaves your server (with the libraries) | Reaches Google with every hit; GA4 says it doesn’t log or store it |
| Revenue | Read from your payment provider, with renewals and refunds | A purchase event with value, currency and transaction_id that you send |
| Attribution | Each sale to the first source that brought that buyer | Data-driven, or last click. First click, linear and other models were removed in November 2023. |
| Retention | Set per site | 2 or 14 months for explorations and funnels; longer only on GA360 |
| Thresholds and sampling | Neither | Thresholds that hide data with few users; sampling in very large explorations |
| Google Ads, audiences, BigQuery | No | Yes |
| Price | Free during the beta | Free |
What you gain
-
Nothing in the browser
No cookies, no localStorage, no third-party scripts. Your app’s middleware counts the pageview as it answers, and sends it afterwards.
-
Money from its source
Sales, renewals and refunds come from your payment provider, in your currency. No prices in your code, no hand-made
purchaseevents. -
The IP stays with you
The library computes the visitor hash on your server and sends only that.
-
Less to set up
No properties, data streams or tags: a token in the environment and the middleware.
runomine initdoes it for you. -
Ad blockers can’t see it
An ad blocker can stop gtag.js in the browser. It can’t see what your server does.
-
Your numbers in your assistant
An MCP server with 17 tools: ask Claude Code or Cursor which source sells most.
What you lose (better to know up front)
- Google Ads. No imported conversions, audiences or remarketing. If your business runs on Ads, GA4 is still the piece that connects them.
- BigQuery and attribution models. runomine credits each buyer’s first source. There is no data-driven or multi-touch attribution.
- Long-term profiles. A runomine visitor lasts a day: no demographics, interests or one person’s journey over months. Only when your app knows the user (they’re logged in) are their purchases joined to their visits.
- The ecosystem. GA4 has years of tutorials, consultants and integrations. runomine is in beta, and its libraries aren’t published on Packagist, npm, PyPI or crates.io yet.
How to move from GA4 to runomine without flying blind
- Install runomine next to GA4.
runomine initin your project, or the three lines for your stack. It doesn’t touch the browser, so it doesn’t interfere with your tags. - Connect your payment provider. runomine imports the last 90 days (PayPal only from when you connect it) and adds the visitor to your checkouts with
checkoutMetadata(). - Compare for a month. The numbers won’t match, and that’s fine: GA4 counts browsers with a cookie that lasts two years; runomine counts unique visitors per day. And pages your CDN serves from cache never reach your backend: add the beacon to those.
- Decide with data. runomine doesn’t import GA4 history: export the reports you want to keep before removing the tag.
FAQ
Frequently asked questions
Is runomine free, like Google Analytics?
Can I run runomine and Google Analytics side by side?
Why don’t GA4 and runomine numbers match?
Can I import my Google Analytics history?
Do I need a cookie banner with runomine?
Sources
Public pages and documentation, checked on October 14, 2026. If something has changed, we will fix it.
Keep reading
- runomine vs Plausible Two cookieless tools. The difference: where it’s measured and how the money arrives.
- Laravel analytics Pageviews from a middleware, events with Rom::track, and Stripe sales by source.
- Server-side analytics What measuring from the server means, what you see and what you miss, and how to count visitors without cookies.
Count what matters.
Visits, sales and servers in one place. Installed in less time than it took to read this page.