Everything a website owner acts on,
nothing a product team needs

Traffic, the friction that kills it, the sales it produces — cookie-free, hosted in the European Union, and readable from your own code. No session replay, no cohorts, no feature flags: those belong elsewhere.

Friction

Where visitors get stuck

Three angry clicks on a button that does nothing. A click on something that only looks clickable. The field everyone abandons in your signup form. A JavaScript error on the page that takes the money. Captured without a line of instrumentation, ranked by how often they happen, with the page and the element named.

  • Rage clicks, dead clicks, abandoned form fields, JavaScript errors
  • The element and the page named — never what someone typed
  • Scroll depth and engaged time per page
  • Exit pages, ranked by where sessions actually end

What is captured automatically →

Rage clicks

  • Pay now

    /checkout

    34
  • Apply code

    /checkout

    18
  • Download PDF

    /invoice

    7

Abandoned fields

  • company_vat

    /signup

    41
  • phone

    /contact

    17
  • card_number

    /checkout

    9
Your payment webhook
curl -X POST https://kipstats.com/api/collect/server \
  -H "Authorization: Bearer $KIPSTATS_INGEST_KEY" \
  -d '{"name":"purchase","ref":"ch_3U9…",
       "data":{"amount":4900,"currency":"EUR","plan":"pro"}}'
Revenue

The sale, even when the tab is closed

Your payment provider confirms on your server, not in the visitor's browser — which may be closed, offline or never come back to your success page. One authenticated call records it, with the amount, the currency and an idempotency key so a webhook retry never invents a second sale.

  • Amounts in the smallest unit, with their currency, converted for totals only
  • Idempotent: the same payment recorded twice counts once
  • Works with Stripe, WooCommerce, Shopify or anything that can POST
  • Custom events for signups, checkouts, downloads — unlimited on every plan

How revenue tracking works →

Acquisition

Including the assistants that send you traffic

ChatGPT, Perplexity, Claude and the rest arrive as ordinary referrers in most tools, when they show up at all. Kipstats names them and counts them as their own acquisition channel, next to search, social and direct — with full UTM support for the campaigns you run yourself.

  • AI assistants counted as their own channel, broken down by assistant
  • Search, social, referral and direct, grouped from the referrer
  • Full UTM support: source, medium, campaign, term, content
  • Entry and exit pages per campaign

Channels, last 30 days

Sample numbers

Search46%
Direct27%
AI assistants14%
Referral9%
Social4%

Human sessions

4.2K

6.1%

Declared robots

1.9K

4.3%

Sample numbers. A robot that moves a mouse is still a robot.

Traffic quality

Whether it was a human at all

A session counts as human only once behaviour proves it: a mouse that moves, a key pressed, a finger, a real scroll. Declared crawlers — search, AI, SEO tools, headless browsers, monitors — are separated out, and what proves neither stays in its own bucket rather than being guessed at.

  • Humans: proven by behaviour, not by user agent
  • Robots: declared crawlers, SEO tools, headless browsers, monitors
  • Unconfirmed: kept apart instead of being guessed at
  • Every funnel can be read on humans only

How the three buckets are defined →

Privacy & weight

One line, no cookie, 4.2 KB

A visitor is counted through an anonymous fingerprint that changes every night, and the IP address is never stored. Nothing is written to the browser, so there is nothing to consent to. The script is loaded with defer and sends through sendBeacon, so it never blocks a page.

<script defer src="https://kipstats.com/tracker.js" data-site="kp_xxxxxxxx"></script>
  • No cookie, no localStorage, no fingerprint that survives the night
  • IP resolved to a country then dropped, never stored
  • Hosted in the European Union, never sold, CSV export on demand
  • Your own visits excluded with ?kp_ignore=1, dev hosts muted automatically

4.2 KB

gzipped — 11.5 KB raw, unminified and readable

Read the script →
Read your own numbers
curl -H "Authorization: Bearer ks_your_api_key" \
  "https://kipstats.com/api/v1/sites/example.com/stats?period=30d&compare=previous"
API & exports

Nothing locked inside the dashboard

Every metric is readable from your own scripts with an API key you create in one click — stats, time series, fourteen breakdowns, friction and live visitors — plus CSV export and an OpenAPI 3.1 spec. It is in every plan, including the free one.

  • Bearer keys, 1000 requests an hour, revocable instantly
  • Stats, time series, 14 breakdowns, friction, real-time
  • OpenAPI 3.1 spec served by the app itself
  • Server-side ingest key per site, separate from the public tracking ID

API reference →

Real-time

And a globe, because watching it is useful

Visitors appear as they arrive, on an interactive globe fed by a WebSocket, next to a live activity feed. It is the fastest way to know a deployment went out fine, or that the campaign you just launched is landing.

  • Live globe and activity feed, fed by WebSocket
  • Visitors active in the last five minutes, per site
  • A public visitor-count badge you can put on your own site
  • Multi-site overview with sparklines

See it in the live demo →

Sites, at a glance

Sample numbers

Online now

27

Today

1.8K views

One site on the free plan, up to ten on Pro, unlimited on Agency — each with its own tracking ID, dashboard and ingest key.

What Kipstats does not do

No session replay — a recording of someone using your site is the feature that turns analytics into a privacy file. No heatmaps, no A/B testing, no feature flags, no mobile SDKs, no behavioural cohorts. If you need those, PostHog, Mixpanel and Clarity do them well, and our comparisons say so.

See your first visitor in about a minute

One site and 10,000 pageviews a month, free, with every feature above.

Get started free