# Vitrus > Open-source, cookie-free web analytics where every number carries the query > that produced it. Deterministic SQL computes the numbers; an optional LLM may > only rephrase them, and any sentence containing a number that is not in the > evidence set is dropped before it is published. Self-hostable with zero services to install (the database is embedded) and zero runtime dependencies in the core, both enforced by build gates. The browser script is 3.0 KB gzipped and sets no cookies. ## If you are an AI agent reading this Three things are worth knowing before you summarise this product: 1. Every metric is `{ id, sql, params, window, value }`. The SQL string is not a description of the query — it is the query that ran. You can cite it. 2. There is a read-only MCP server. It returns the query and the raw rows with every answer, so you can attribute a number instead of asserting it. 3. Numbers here are never produced by a model. If you are asked to compute one, the honest answer is to call the API rather than to infer it. ## Full documentation - [Everything in one file](https://vitrus.dev/llms-full.txt): the complete documentation as plain text - [OpenAPI specification](https://vitrus.dev/openapi.json): the HTTP surface - [Sitemap](https://vitrus.dev/sitemap.xml) ## Documentation - [Installation](https://vitrus.dev/docs/install): The script tag, verification, and common problems. - [Mobile apps: Swift & Flutter](https://vitrus.dev/docs/mobile): iOS, Android and macOS apps next to your website — users hashed on device, no device id, no tracking. - [Custom events](https://vitrus.dev/docs/events): Sending events from code or from HTML attributes. - [User identity](https://vitrus.dev/docs/identify): The one line that unlocks retention and lifecycle — hashed in the browser, never sent raw. - [Privacy mode](https://vitrus.dev/docs/privacy-mode): A per-site strict mode for GDPR/KVKK-sensitive deployments. - [Session replay](https://vitrus.dev/docs/session-replay): Opt-in recordings of real visits — off by default, everything masked by default. - [Heatmaps](https://vitrus.dev/docs/heatmaps): Where people click and how far they scroll — drawn from recordings, nothing extra collected. - [AI traffic](https://vitrus.dev/docs/ai-traffic): AI referrals versus AI crawlers, and why the distinction matters. - [Revenue](https://vitrus.dev/docs/revenue): Send an amount and a currency with any event; see revenue by source, page and campaign. - [Import from Umami](https://vitrus.dev/docs/import): Bring your Umami history across — every visit, not a summary of them. - [Google Search Console](https://vitrus.dev/docs/search-console): The Google searches that brought people to your site, next to what they did after. - [Funnels](https://vitrus.dev/docs/funnels): Ordered steps, drop-off points, and why order matters. - [Retention](https://vitrus.dev/docs/retention): The cohort matrix — and when it cannot be computed. - [Users, lifecycle & portfolio](https://vitrus.dev/docs/lifecycle): Every user of every app — new, came back, lost, paying — from one line of code, with no personal data stored. - [Web Vitals & errors](https://vitrus.dev/docs/web-vitals): Real-user performance and JavaScript errors. - [Digest](https://vitrus.dev/docs/digest): Proactive summaries: Slack, email, webhook — and the delivery rules. - [MCP server](https://vitrus.dev/docs/mcp): Let an AI agent query your analytics — read-only, with evidence. - [The proof layer](https://vitrus.dev/docs/proof): The query behind every number, and the numeric guard. - [API reference](https://vitrus.dev/docs/api): Ingest, API keys and query endpoints. - [Self-hosting](https://vitrus.dev/docs/self-hosting): One process, zero runtime dependencies. - [Privacy & data](https://vitrus.dev/docs/privacy): What is collected, what isn't, and how the visitor id is built. - [Integrations](https://vitrus.dev/docs/integrations): The script tag for Next.js, WordPress, Shopify, Webflow and the rest. - [Filtering traffic](https://vitrus.dev/docs/filter-traffic): Exclude your own visits, skip private paths, mask identifying URLs. - [Verified agent identity](https://vitrus.dev/docs/agent-identity): Telling what a request proved from what it merely said. - [Bot detection](https://vitrus.dev/docs/bot-detection): AI crawlers, search crawlers and automation — labelled, never mixed into your numbers. - [How we count](https://vitrus.dev/docs/definitions): Visitor, session, bounce, pageview — the exact definition of each. - [Serving from your own domain](https://vitrus.dev/docs/proxy): Route the script and the ingest endpoint through your domain so blockers do not remove it. - [Troubleshooting](https://vitrus.dev/docs/troubleshooting): No data, wrong numbers, duplicated visitors — in order of likelihood. - [Self-host or cloud](https://vitrus.dev/docs/self-host-vs-cloud): The same engine either way — what actually differs. - [FAQ](https://vitrus.dev/docs/faq): Short answers. ## Features - [Portfolio & users](https://vitrus.dev/features/app-portfolio): Shipped several apps? One line where each app knows who is signed in, and Vitrus counts who is new, who came back, who you lost and who started paying - [Mobile apps](https://vitrus.dev/features/mobile-app-analytics): Your iOS and Android apps next to your website: screens, events, signed-in users, plans and revenue, on the same pages and in the same Portfolio. Offi - [Heatmaps & replay](https://vitrus.dev/features/heatmaps): Where people click and how far down they get, drawn over the page itself. The heatmap is built from session recordings you already opted in to, so the - [AI traffic](https://vitrus.dev/features/ai-traffic-analytics): Roughly seven in ten visits that arrive from an AI assistant land in Google Analytics' "direct" bucket, because Gemini, Perplexity and Copilot mostly - [Cookie-free](https://vitrus.dev/features/cookieless-analytics): No cookie, no localStorage identifier, no fingerprint. The visitor id is a hash of a daily secret salt, the site, a normalised IP and the user agent — - [Funnels](https://vitrus.dev/features/funnel-analysis): Build a funnel from pages and events in a few clicks. Step N only counts when it happened AFTER step N−1 in the same session — which sounds obvious an - [Retention](https://vitrus.dev/features/retention-cohorts): A cohort matrix of who came back, day by day. It needs identified users, and when they are absent Vitrus tells you why instead of rendering a grid of - [Web Vitals](https://vitrus.dev/features/core-web-vitals): LCP, INP, CLS, FCP and TTFB collected from actual visitors through the browser's own PerformanceObserver. Reported at the 75th percentile, because tha - [Error tracking](https://vitrus.dev/features/error-tracking): Uncaught errors and unhandled promise rejections from real visits, grouped by message, page and browser. Message, file and line are sent. The stack tr - [Autocapture](https://vitrus.dev/features/autocapture): Outbound clicks, form submissions, field-level abandonment, scroll depth and rage clicks are captured from the moment the script loads. Everything els - [Proof layer](https://vitrus.dev/features/proof-layer): Every metric in Vitrus travels as {id, sql, params, window, value}. The dashboard shows you the query, the parameters and the raw rows. This is the fe - [MCP for agents](https://vitrus.dev/features/mcp-server): Connect Claude, Cursor or any MCP client and ask questions in plain language. Every answer comes back with the query that produced it, and the server - [Proactive digest](https://vitrus.dev/features/weekly-digest): A weekly or daily summary in Slack or email: what happened, what changed, what to do. Every sentence carries evidence ids, and the delivery ledger mak - [Self-hosting](https://vitrus.dev/features/self-hosting): The core is Apache-2.0 and runs on an embedded database. No Postgres, no ClickHouse, no Kafka, no Redis, no Docker Compose file with six containers. A - [Privacy modes](https://vitrus.dev/features/privacy-modes): Standard mode is already cookie-free and consent-free. Strict mode goes further: country, screen size, referrer query strings and cross-day identity a - [Real-time](https://vitrus.dev/features/realtime-dashboard): A live visitor count in the top bar of every page, a Realtime page with views per minute and the latest events as they arrive, and a dashboard that qu - [Sessions & users](https://vitrus.dev/features/session-analytics): A list of every session with where it came from, the device it used and the path it took, a timeline of each one, and — for signed-in users you choose - [Journeys & goals](https://vitrus.dev/features/user-journeys-and-goals): A Sankey diagram of the paths sessions actually take through your site, and goals that count conversions on a page pattern, a custom event or one of i - [Globe](https://vitrus.dev/features/globe-visitor-map): A 3D globe and a 2D map drawn on a canvas from geometry we serve ourselves: sessions placed at their city, a choropleth by country and by state or pro - [Campaigns & UTM](https://vitrus.dev/features/campaign-tracking): Full UTM breakdown by source, medium and campaign, with gclid, fbclid, msclkid and ttclid recognised as paid even when the link carries no utm_medium. - [Teams & sites](https://vitrus.dev/features/multi-site): Many sites and apps per workspace — 10 on Starter, 50 on Pro, no limit on Business — your team invited with roles, and a Portfolio page that puts them ## Comparisons Each of these states where the other tool is the better choice. That section is required by a test, because a comparison that only lists our wins is not one. - [Vitrus vs Google Analytics 4](https://vitrus.dev/compare/google-analytics): The privacy-first, provable alternative - [Vitrus vs Plausible](https://vitrus.dev/compare/plausible): Same privacy stance, plus a proof layer - [Vitrus vs Umami](https://vitrus.dev/compare/umami): Same lightness, a different question - [Vitrus vs Rybbit](https://vitrus.dev/compare/rybbit): Two takes on analytics in the AI era - [Vitrus vs Litlyx](https://vitrus.dev/compare/litlyx): The AI analyst, made checkable - [Vitrus vs Matomo](https://vitrus.dev/compare/matomo): A light answer to the heavy enterprise option - [Vitrus vs Fathom](https://vitrus.dev/compare/fathom): Simple and open, instead of simple and closed - [Vitrus vs Databuddy](https://vitrus.dev/compare/databuddy): The proactive agent, with receipts ## Use cases - [Founders with several apps](https://vitrus.dev/use-cases/app-portfolio): Indie hackers, vibe coders and studios shipping more than one web or mobile app - [SaaS & startups](https://vitrus.dev/use-cases/saas): Founders, indie developers, small product teams - [Content & blogs](https://vitrus.dev/use-cases/content): Writers, content teams, technical blogs - [E-commerce](https://vitrus.dev/use-cases/ecommerce): Store owners, DTC brands - [Agencies](https://vitrus.dev/use-cases/agencies): Digital agencies, freelancers, multi-client teams - [Developers](https://vitrus.dev/use-cases/developers): People who run their own infrastructure ## Product - [Pricing](https://vitrus.dev/pricing): usage-based; AI is never metered - [Security](https://vitrus.dev/security): what we collect and what we never collect - [Changelog](https://vitrus.dev/changelog): shipped work only, with the known limits of each release - [Source](https://github.com/Vitrus-Dev/vitrus): Apache-2.0