Demo Modules Data Model Compare Pricing FAQ Help Dashboard Get Started

Help Center / Privacy and GDPR

08 · Privacy and GDPR

No cookies. No analytics vendor. Here is exactly what that means.

Cookieless is an easy claim to make and a hard one to verify. This page is the verification: what Measr puts in the browser, what it writes to your database, everything it deliberately never collects, and how the GDPR obligations you carry map onto infrastructure you own.

What lives in the browser

The Measr SDK never sets or reads a cookie. It keeps its state in localStorage, which browsers scope to a single origin: other websites cannot read what Measr stores under your domain, the SDK transmits it only to the Supabase endpoint you configure, and there is no cross-origin synchronization of any kind. The anonymous ID exists once, on your origin, and Measr never attempts to match it with anything outside your site. One honest boundary note: origin scoping is a browser boundary between sites, not an access control within your own pages. Like any localStorage entry, other scripts you choose to run on your site could read it, so keep the usual care with third-party script includes.

KeyContentsLifetime
Anonymous IDA random UUID generated by the browser's crypto.randomUUID(). Not derived from the device, the IP, or any personal attribute.Persists until the visitor clears site data.
SessionThe full current-session object: its random ID, the anonymous ID, your site ID, start and last-activity timestamps, page and event counters, bounce state, and entry and exit page names.Not self-deleting: after 30 minutes of inactivity, the next SDK activity finalizes it and replaces it with a new session.
Current pageThe last page name, so the next page view can record where the visitor came from within your site.Overwritten on every page view.
Debug flagSet only if you enable debug mode while testing.Until you disable it.

That is the complete list. There is no fingerprinting of any kind: no canvas probing, no font enumeration, no hardware signals. A visitor who clears their browser data becomes a brand-new anonymous visitor, which is exactly what you should expect from privacy-respecting analytics.

What is written to your database

Everything lands in three tables in your own Supabase project: events, sessions, and video events. This is the field inventory; the authoritative reference is the migration files shipped in the repo, which are short enough to read in full:

FieldWhat it contains
Anonymous ID, session IDThe random UUIDs described above, plus a generated row ID per event.
Site and event typeYour site identifier and which kind of event fired (page view, interaction, video, download, and so on).
Page namesThe page title (or your data-measr-page-name override), capped at 100 characters, plus the previous page within the visit and the session's entry and exit pages. Names, not full URLs.
ReferrerThe referring website, or Direct when there is none.
Query stringThe URL query parameters, captured when the SDK initializes on a page load and re-encoded by the browser (parameter order is preserved, encoding is normalized). Kept for UTM campaign attribution.
Region and languageA continent-level region derived from the browser timezone (Europe, North America, Asia, and so on) and the browser language. No IP-based geolocation, no city, no coordinates.
Device categoryDesktop, mobile, or tablet, derived from the user agent.
Browser and operating systemThe browser and OS name (Chrome, Firefox, macOS, Windows, and so on), derived in the browser from the user agent. The user agent string itself is never stored.
Event dataWhat happened: which element was clicked (by its label or name), which outbound link was followed (its destination URL), which video reached which milestone and how many seconds in, which file was downloaded, how deep the visitor scrolled, which form was started or completed. Auto-tracking records element names, labels, and URLs, not what a visitor typed. The manual tracking APIs accept whatever you pass them, including free-text names and custom event-data objects, so keep personal data out of anything you send.
Timestamps and countersWhen the session started and ended, how long it lasted, how many pages and events it contained, whether it bounced.

What is deliberately never collected

Bot filtering is on by default (and configurable via excludeBots): automated browsers that expose the webdriver flag and clients matching a list of known crawler user agents are detected at init and write no rows. Detection is pattern-based, so a bot that fully impersonates a regular browser can slip through, which is true of every analytics tool.

The GDPR view: no analytics vendor in the picture

Most analytics compliance work is about the vendor: where they process, what their DPA covers, which subprocessors they use, what happens to the data when you leave. Measr removes the analytics vendor from that picture. The SDK on your pages writes directly to your own Supabase project: Creative Data Engineers never receives, stores, or can access your analytics data. One infrastructure party remains, and it is one you already have: your database provider hosts the data as your processor under your existing agreement with them, exactly as it does for the rest of your application. And since visitor UUIDs and captured URLs can still qualify as pseudonymous personal data under GDPR, the controller obligations, lawful basis, and retention decisions stay yours to assess. Measr's design makes that assessment short, not unnecessary.

ObligationWith a hosted vendorWith Measr
Data residencyVendor's regions, vendor's termsYou pick the Supabase region (EU and UK regions available); residency and backups then follow your provider agreement
Processor agreementDPA with the vendor plus their subprocessor listYour existing agreement with your database provider; no separate analytics processor is added
Erasure requestsTicket to the vendor, their timelineA DELETE statement on your own tables, on your timeline
Access requestsVendor export toolingA SELECT on your own tables
RetentionVendor-defined windowsYou define retention on tables you control, within your provider agreement

In practice, erasure and access requests are often short: visitors are random UUIDs, so the question is usually whether any record can be attributed to the person asking at all. That assessment is still yours to make for each request, but you make it on data you can fully query, on your own timeline.

The honest fine print

Two things a careful reader should know, because precision beats marketing:

Comparing tools on privacy grounds? The privacy analytics comparison puts Measr, Plausible, Fathom, Matomo, Simple Analytics, and Umami side by side on exactly these criteria.

Frequently asked

Is Measr really cookieless?
Yes. The SDK never sets or reads a cookie. The browser stores a random anonymous ID and a session object in localStorage, which browsers scope to your origin: other websites cannot read it, and the SDK transmits it only to the Supabase endpoint you configure. There is no cross-origin synchronization of any kind.
Does Measr store IP addresses?
No IP address is ever written to analytics events, sessions, or video events. Region comes from the browser timezone at continent level, and language from the browser settings. The toolkit's one IP use is a rate-limit counter that guards the ingestion endpoint against abuse inside fixed 60-second windows; it lives in a separate locked-down table and is never joined to analytics data.
Do I still need a consent banner with Measr?
Measr is built so that the honest answer can be no: no cookies, no fingerprinting, no directly identifying data by default, and no analytics vendor beyond the database provider you already trust. Whether your specific deployment requires consent under GDPR, UK GDPR, or PECR is a legal judgment that depends on how you use it, so treat this page as a precise technical description rather than legal advice.
How do I handle a GDPR erasure request?
Your analytics live in your own Supabase project, so erasure is a DELETE statement on tables you own. Visitors are random UUIDs with no name or email attached by default, so the practical question is usually whether any record can be attributed to the person asking at all. That assessment is yours to make, on data you can fully query.
Previous← Troubleshooting and updates UpHelp Center