Private Organic Search & LLM Activity Tracker
A private analytics tool for tracking website traffic, organic search performance, and activity from search engines and LLM crawlers. It brings ordinary visitor statistics, crawler requests, Google Search Console and Bing Webmaster Tools into one dashboard.

Images
About Private Organic Search & LLM Activity Tracker
I wanted something along the lines of a lighter Matomo, built around the things I kept wanting to check on my own sites. How much traffic was coming from search? Which pages were getting attention? How often were search and AI crawlers coming through, and what were they actually requesting?
That last part was a big reason for building it. I wanted a clearer picture of the automated traffic alongside the people visiting my sites.
It has the usual analytics features: pageviews, referrers, countries, devices, realtime activity, custom events and goals. The browser tracker is small and works without cookies or browser storage. The dashboard lets me switch between sites and see traffic, acquisition and crawler activity without having to assemble the picture from several different tools.
Crawler tracking has its own collection path, using requests forwarded from the server or CDN. That matters because plenty of crawlers never run the JavaScript tracker. The reports group requests by provider and crawler family, with separate identification states for verified crawlers, bots claiming a particular identity, and failed verification attempts.
Google Search Console and Bing Webmaster Tools add the search side: query and page performance, clicks, impressions and the available crawl information. Having that next to the traffic and crawler reports made the whole thing comfortable to use. I could look at a site and follow what was happening without immediately opening another three tabs.
The original version used Rust, SQLite and Svelte, and ran on Bunny Magic Containers. At around 25,000 pageviews a day, my deployment was using roughly 90–100 MB of RAM and 0.1–0.15% CPU. I was very happy with how little it needed to keep running.
Then I got into the database and migration work.
SQLite became awkward for the way I wanted to manage the project, and rewriting migrations turned into more work than I wanted from my own analytics tool. The project later moved to Elixir, Phoenix LiveView and PostgreSQL, with background jobs handling maintenance and search-data synchronisation. The repository includes that rewrite, but I’ve switched back to Umami for now. PostgreSQL is easier for me to manage, and Umami lets me get on with the other things I’m building.
I’ll probably come back to this one. I liked having a dashboard built around my own questions, especially the combination of search performance and crawler activity. It was comfy. I just reached the point where I wanted to check my traffic more often than I wanted to work on the thing checking my traffic.
























