

The overview: what the bot filter kept out, what the AI assistants took against what they sent back, and the searches that found you.
Vireo Analytics is a self-hosted, privacy-first analytics plugin for WordPress. It gives you the numbers that actually matter: pageviews, visitors, top content, referrers, countries, devices, without cookies, without a consent banner, and without sending a single byte to a third party. All data stays in your own database.
The numbers you see are the numbers that matter. Most analytics tools count uptime monitors (StatusCake, UptimeRobot, Pingdom), SEO crawlers (Ahrefs, Semrush), AI bots (GPTBot, ClaudeBot, PerplexityBot), and headless browsers as “visitors”, inflating your stats by 20 to 40%. Vireo Analytics filters them out at the tracker level against a database of over eight hundred known crawlers, sorted into what each one is doing, plus Cloudflare signals and automation detection. What you see is real humans reading your content.
It’s designed to be a drop-in replacement for Jetpack Stats or Google Analytics for site owners who want clarity over dashboards full of noise. If you’re already running Koko Analytics, Vireo Analytics can import your existing history in one click. If you’re moving off Jetpack Stats, the built-in importer pulls up to 14 months of historical data from the Jetpack API.
Features
This plugin includes an optional one-click importer for historical Jetpack Stats data. When (and only when) a site owner runs that importer from Vireo Analytics Settings Import data, the plugin calls the WordPress.com Stats API at https://stats.wordpress.com/csv.php to retrieve the site’s existing pageview, referrer, and top-post history.
What is sent:
blog_id (read from the connected Jetpack install).views, referrers, topposts).What is not sent: no visitor data, no user data, no site content, no credentials beyond the Jetpack API key the site already holds.
When it is sent: only while the import is actively running, in response to a site owner clicking “Run Import”. No background or recurring calls are made.
The Stats API is provided by Automattic Inc. (WordPress.com).
The importer is entirely optional.
When a site owner runs the Google Analytics importer, the plugin signs a request with the service-account key they pasted and calls https://oauth2.googleapis.com/token for an access token, then https://analyticsdata.googleapis.com to read that property’s history.
What is sent: the service account’s own credentials and a date range. No visitor data, no site content, nothing about anyone reading the site.
When it is sent: only while an import is running, in response to a site owner starting one. The key can be removed from the same screen afterwards.
When a site owner connects Search Console, the plugin authenticates the same way and calls https://searchconsole.googleapis.com to read the searches that led people to the site.
What is sent: the service account’s own credentials, the property address the owner entered, and a date range.
When it is sent: once a day on a schedule, and whenever the owner presses the refresh control. This is the one recurring outbound call the plugin makes, and it only happens on sites that have connected Search Console. Disconnecting stops it and removes the schedule.
Both Google APIs are provided by Google LLC.
Country-level geolocation needs a local database, and Pro’s city-level detail needs a second one. When a site owner presses the download button, the plugin fetches the current monthly file from https://download.db-ip.com.
What is sent: nothing but the request for the file. No site data, no visitor data, no identifiers. Lookups afterwards happen entirely on your own server against the downloaded file; no address is ever sent anywhere.
When it is sent: only when the owner presses the button.
DB-IP Lite data is provided by DB-IP under CC BY 4.0.
A site that imports nothing, connects nothing and downloads no geolocation database contacts none of these services.
It does make one recurring request to itself: once an hour the plugin posts to its own tracking endpoint to check the fast path is still reachable, because a host rule or a CDN change can break it silently. That request never leaves your server and carries no data about anyone.
None of these paths send visitor data anywhere. Every one of them pulls data in.