Skip to content

How we measure

Every number in your dashboard comes from a small set of rules. This page lists them, so you know exactly what a visitor, a visit or a conversion means – and what we deliberately do not collect.

What the script sends

  • Pageview when a page loads, and again when a single-page app changes its URL. Loading the same URL twice in a row counts once.
  • Engagement when the visitor leaves or hides the tab: time spent with the tab visible and focused, and how far they scrolled.
  • Events you or an integration trigger (for example puremetrix('signup'), a WooCommerce purchase or an automatic 404).

Each request contains the page URL, the referrer (the page the visitor came from), your site domain and public key, plus the event details listed above (engagement time, scroll depth, custom properties you pass). Nothing else is read from the browser. No cookies, no local IDs, no fingerprinting APIs (canvas, fonts, audio). You can read the full script on The tracker script, line by line.

Unique visitors without cookies

When an event arrives, our server builds a visitor ID from four inputs: a salt (a random value that changes daily) for your site, the browser's user agent, the IP address and your root domain. The result is a 64-bit hash (SipHash-2-4) — a one-way checksum that cannot be turned back into the inputs. The IP address and user agent are used for this calculation and for the country/region/city lookup, then discarded – they are never written to the database.

A new salt is created every day in your site's time zone. Old salts are deleted after 48 hours; after that, nobody – including us – can recompute a visitor ID or link visits from different days.

What this means for your numbers: a person who visits on Monday and again on Thursday counts as one visitor per day. Over a 7-day range, they appear as two unique visitors. Tools that set cookies recognise returning visitors across days and therefore show fewer, "more unique" visitors for long ranges.

Visits, bounces and engagement

  • A visit ends after 30 minutes without activity. Visits that run past midnight are not split.
  • A visit bounces when it has one pageview and no interaction (no second page, no custom event).
  • Engagement in the dashboard is the opposite: the share of visits that viewed a second page or interacted.
  • Visit duration counts only time with the tab visible and focused – a forgotten background tab does not inflate it.

What we filter out

  • Automated browsers (WebDriver, headless test tools) – the script does not send anything.
  • Known crawlers, link previewers, AI bots and uptime monitors, detected by user agent on the server.
  • Double sends: the same event for the same visitor on the same page within 5 seconds counts once.
  • Your own visits, once you exclude them: WordPress roles and site shields (see Excluding pages and traffic), or per browser with localStorage.setItem('puremetrix_ignore', '1') in the developer console. localhost is ignored unless you enable it.

Revenue and sources

Purchases from WooCommerce or Shopify are sent by your shop's server, so they are counted even when the buyer's browser blocks scripts. The revenue is assigned to the source of that visitor's first pageview on the same day. When dashboard filters are active, the per-source revenue column is hidden, because this assignment is calculated without filters.

Ad blockers and the proxy

Some ad blockers block requests to third-party analytics hosts. If you serve the script and the event endpoint from your own domain (the proxy), those visits are counted as well. The dashboard shows whether your site already uses the proxy.

Why numbers differ from Google Analytics

  • Behind a consent banner, Google Analytics only counts visitors who accept. PureMetrix does not depend on that choice for its core measurement.
  • Ad blockers affect both; with the proxy, PureMetrix is affected much less.
  • Google Analytics recognises returning visitors across days via cookies; PureMetrix counts per day (see above).
  • Session rules, bot lists and time zones differ slightly between tools.

Differences of 10 % or more are normal. If you want to compare, run both tools in parallel for at least two weeks and compare daily visitors rather than monthly totals.

Related