# nitur — privacy-first web analytics Page views, referrers, countries and custom events, counted in aggregate. No cookies, no IP logging, no fingerprinting, and so no consent banner. Home: https://nitur.dev MCP server: https://nitur.dev/api/mcp REST base: https://nitur.dev/api/v1 OpenAPI: https://nitur.dev/api/v1/openapi.json ## What is collected Per page view: the path, the referring domain, a browser family, an operating system, a device type, a country code, and the calendar day. Nothing else. Never collected: IP addresses (the country comes from a header the host has already resolved, and the address is never read into a variable), cookies or any browser storage, visitor ids, screen size, canvas or font fingerprints, language, and time zone. Visitors are counted with a hash of a secret that is destroyed every night, so the same person on two days counts twice and cannot be linked. This is why there are no funnels, no sessions, and no per-visitor endpoint: the identity those need does not exist. ## Install One script tag. No package, no build step — 1.9 KB gzipped, loaded asynchronously so it cannot slow your page down. Fastest path, if you have a terminal open: ``` npx nitur init ``` It detects the framework, creates the site, writes the tag into the right file, and prints the token. Otherwise, replace `YOUR_SITE_TOKEN` below with the token shown on your site's page in the dashboard. **Plain HTML** — `every page, inside
` ``` … ``` - Views from localhost are ignored. Add data-track-localhost="true" to count them while developing. - The script honours Do Not Track and Global Privacy Control, and sends nothing when either is set. - Client-side route changes are counted automatically — there is nothing to call on navigation. **Next.js (App Router)** — `app/layout.tsx` ``` export default function RootLayout({ children, }: { children: React.ReactNode; }) { return ( {children} ); } ``` - Use a plain