What we track

Satsu is built to answer "how is my site doing?" without answering "who is this person?". This page is the exact list of what's collected, what's derived, and what we refuse to touch. It doubles as the source for our privacy documentation.

Collected by the tracker (client-side)

The tracker ships only raw signals; all intelligence lives server-side. It sends:

  • Pageviews — the path, the referrer, and your screen width. The page path is stored without its query string, and only the origin and path of the referrer are stored; UTM parameters are extracted server-side.
  • Custom events — the name and flat props you pass to window.satsu(). Don't put personal data in props: Satsu does not scan or filter them, so anything you send is stored.
  • Presence heartbeats — a lightweight "still here" ping while the tab is visible. Used only for the live count. Never stored, never billed.
  • Local dev ping — on localhost the package components send one ping per page load (site ID and local page path) so the install check can confirm setup. It is never written to the analytics database, counted or billed.
  • UTM parameters — utm_source, utm_medium, utm_campaign, parsed from the URL server-side.
  • Ad click-id presence — the name of a click-id parameter (e.g. gclid, fbclid) if present. The value is never stored — only that one was there.
  • SPA route changes — automatic pageviews on client-side navigation.
  • Outbound link clicks — the destination URL, with query and hash stripped.
  • File downloads — clicks on common file types or download links.
  • Scroll depth — how far down a page a visit reached (25 / 50 / 75 / 100 %), once per pageview.
  • Web Vitals — LCP, CLS, INP and TTFB once per page load (not billed).

With each request the server also records the browser's fetch-site header: whether the visit came from the same site, another site or none (used to spot stripped referrers).

Derived server-side

From those raw signals, Satsu derives the following at processing or query time; none of it is linked to a person or carried across days:

  • Country — from the IP, at country level only. The IP is not stored in the analytics database; it passes through our message queue only until the event is processed, at most 24 hours.
  • Browser, OS and device class — from the user-agent string.
  • Bot filtering — obvious bots are dropped. Known AI crawlers that fetch the tracker are counted separately (bot name and site only, no IP).
  • Session metrics — bounce rate, visit duration, pages per visit — computed from the daily-rotating fingerprint.
  • Channel — Direct, Organic Search, Social, Referral, Paid, Email or AI — classified at query time, not stored.
  • Goal conversions — matched at query time against your goals.

The session key that ties a visit together is a daily fingerprint, not a cookie. The session ID stored with each event is a one-way hash that changes every UTC day. See How it's private for exactly how it works.

Deliberately not tracked

The following are refused by design — not a roadmap gap, a decision:

  • Session recordings, mouse movement, or individual heatmaps.
  • Persistent identifiers of any kind — no cookies, no localStorage IDs, no cross-day fingerprints.
  • Reverse-IP company lookup ("which company visited").
  • Anything that, in our assessment, would require a consent banner.

By design: what Satsu can't tell you

Because the fingerprint changes at 00:00 UTC, Satsu cannot track a returning visitor across days, build a retention cohort, or follow one person's journey over time. That limit is the point — it's why, in our assessment, no consent banner is needed. Geography is country-level only, for the same reason.

Next: How it's private →