Adaca Analytics
Self-hosted dashboards for Google Analytics 4, running on Cloudflare Workers with daily rollups stored in a D1 database you own. Dashboards are built from configurable widgets, realtime stays live on Google, and the whole thing deploys from one button.
Users by day
Why We Built It
The GA4 interface answers most questions one report at a time. The screen a team checks each morning is a dozen of those reports side by side, shaped to that team, and the products that sell that screen charge a monthly fee for a copy of data you already own.
We built Analytics because the cost of writing that screen has fallen far enough that owning it is now the sensible default: the rollups live in your account, the dashboards are yours to change, and there is no renewal. It is the same argument we make about custom software generally, applied to one tool we needed ourselves.
Part of our position on · Own your technology, don't build a tech team
The Morning Screen
A dozen reports side by side, shaped to the team that reads it. Drag widgets on the grid, save the layout, and share a read-only link.
Users by day
Sources
Home dashboard, dark theme. Sample figures.
Six Dashboards Out of the Box
Home, Realtime, Acquisition, Content, Audience and Behaviour. Each is a template you can customise, reset, or copy into your own.
The Four-Step Builder
Data type, specific data, chart type, then configure. A widget is four choices.
1 · Data type
2 · Specific data
3 · Chart type
4 · Configure
How the Numbers Are Made
Every site is ingested into the same twenty report families, one row per day per dimension value, and stored in a D1 database you own. Realtime stays live on Google Analytics.
The home hero's idiom: each stage is a small constellation, links are hairlines, and chevrons give the direction.
| site | report | date | key1 | key2 | users | sessions |
|---|---|---|---|---|---|---|
| adaca.com | page | 2026-09-06 | /open-source/ | Open Source | 412 | 486 |
| adaca.com | page | 2026-09-06 | /red/ | Adaca RED | 1,208 | 1,377 |
| adaca.com | source | 2026-09-06 | google / organic | 7,730 | 11,904 | |
| adaca.com | geo | 2026-09-06 | Australia | Sydney | 5,102 | 7,516 |
| adaca.com | device | 2026-09-06 | mobile | iOS | 3,940 | 5,802 |
| adaca.com | event | 2026-09-06 | form_submit | true | 38 | 38 |
Every Number Opens
Sources, pages, countries, devices and the rest are detail pages with their own trend and breakdowns, precomputed so they load in one round trip.
Get Started
Click the button and Cloudflare forks the repository, creates the D1 database and the KV namespace, asks for your service-account key and deploys the Worker with its cron.
Or deploy by hand with five commands. The setup wizard starts on the first visit.
$ npx wrangler login $ npx wrangler d1 create adaca-analytics $ npx wrangler kv namespace create CACHE $ npx wrangler secret put GOOGLE_SERVICE_ACCOUNT_JSON $ npm run deploy
Releases
Releases are read from GitHub and never written by hand.
Common Questions
Is it free?
Yes. Adaca Analytics is open source under the MIT licence. Run it on the Workers Free plan for a small site.
Does it replace Google Analytics?
No. It reads GA4 through the Data API or the BigQuery export and stores daily rollups you own. Realtime stays live on Google.
What does it cost to run?
A Cloudflare Worker, a D1 database and a KV namespace. A year of a small site fits the free plan.
How is it protected?
There is no sign-in built in. Put Cloudflare Access in front of it, or set the optional Basic Auth pair.
Open Source Under MIT
Adaca Analytics is released under the MIT licence. The source is available to read, audit and modify, and the rollups stay in your account.
View on GitHub