Skip to main content

How we count clicks

Plain-language methodology for Snipzr link analytics. See the Privacy Policy for the legal basis and the Link stats API for the data shape.

Clicks, not visitors

We count clicks, not unique visitors. We deliberately do not compute unique-visitor numbers: doing it accurately needs either a cross-request identifier (which we refuse to create — no cookie, no fingerprint, no salted hash) or probabilistic math we consider not worth the privacy cost. So a number labelled "clicks" is clicks; in the dashboard it means human clicks unless stated otherwise.

Human vs bots

Every request to a short link is either a human click or a bot / automated request. We separate them by signature and report both — bots are counted and shown separately, never silently dropped.

  • Human = all requests − bots. This is the headline number.
  • Bots include known crawler user-agents (~50 signatures), link-preview "unfurlers" (the fetch a chat/social app makes to render a preview), prefetch/prerender requests (Sec-Purpose / Purpose / X-Moz headers), HEAD requests, and requests with no user-agent.
  • This is a best-effort signal, not adversarial-grade. A script sending a normal browser user-agent can inflate counts — don't use these numbers for billing or fraud decisions.

The raw total (humans + bots) is available in the API and CSV export but kept out of the default dashboard view — an uptime monitor hitting a link shouldn't make "82 human clicks" look like "43,000".

Repeat clicks (debounce)

Short-link redirects carry a short private-cache header (~90s), so a browser reloading the same link within about 90 seconds is typically served from its own cache and not re-counted. This debounces accidental double-clicks; it is not a per-visitor dedupe.

Time — everything is UTC

Days and hours are UTC. A "day" is a UTC calendar day; the hourly view is a rolling last-24-hours histogram by UTC hour. The dashboard labels times as UTC so the chart, the "today" boundary and the live badge all agree regardless of your timezone.

Countries

We show the country a click came from — country only, never city or precise location. The country is derived at our content-delivery provider's edge from the IP address; we never store the IP. When the country can't be determined it shows as Unknown.

Referrers — "Direct / unknown" and hosts only

The referrer is where a click came from. We store the referring site's host only (e.g. reddit.com) — never the full page URL. Modern browsers already trim cross-site referrers to the origin, so host-only loses almost nothing.

  • Direct / unknown means no referrer was sent — typical for clicks from apps, email, chat, and QR scans.
  • Other is a fold: to stay bounded and resist referrer-spam, we track at most 48 distinct referring hosts per link per day; beyond that, and for very small entries, hosts fold into "Other". (CSV export keeps every host.)

Devices, browsers, operating systems, languages

Broad families only — desktop / mobile / tablet; chrome / safari / firefox; windows / android / ios / macos / linux; and the primary browser language (en, de, …). Derived from the user-agent and Accept-Language. No exact models or versions.

We split human clicks by source: a direct short-link click vs a QR scan (Snipzr QR codes resolve through a distinct path). This is the one dimension you can verify yourself — scan your own QR and watch it increment.

All-time vs the tracked era

Per-day tracking started on a specific date. The link's all-time counter predates that, so we show the split honestly — "X total since creation (incl. bots) — Y before per-day tracking began [date]" — and the big lifetime number never silently contradicts the detailed per-day view.

Retention

Aggregate statistics are retained for up to 750 days (~25 months) for every plan. Your subscription tier changes only how far back you can view — not how long we keep the data. Asking for a longer window than your plan allows isn't an error; we show what your plan can read and tell you how many days are actually stored. Deleting a link or your account deletes its analytics.

Freshness

Today's numbers are live — they merge already-consolidated data with the current day's in-flight counts. An hourly job consolidates previous hours into permanent storage; a same-day number may dip briefly while that job runs, then settle. If our analytics store is momentarily unreachable we show recent data labelled "recent data only" rather than a wrong zero.

What we deliberately don't do

No cookies or device storage for analytics · no cross-site tracking · no visitor profiles · no unique identifiers · no city/precise location · no full referrer URLs · no per-click event log in the product · no selling or sharing of this data.