Demo Modules Data Model Compare Pricing FAQ Help Dashboard Get Started

Measr

Self-hosted analytics toolkit

30 minutes to deploy. 16 years to design.

Self-hosted analytics for developers
9
Tracking modules
30 min
Setup time
0
Cookies
Tracking hits

Three pieces. One toolkit.

Clone the repo. Set up Supabase. Deploy the dashboard. You're tracking in 30 minutes.

SDK
Tracking SDK
A single configurable JavaScript file. Drop it into any website or app. Handles sessions, device detection, referrer capture, geo/language, and all 9 event modules. Three config values and you're live.
Database
Migration Pack
SQL migration files for your Supabase project. Tables, indexes, RLS policies, and server-side RPC functions for aggregation. Run once, done. Your data stays in your database.
Dashboard
Dashboard App
A standalone React app you deploy to Vercel, Netlify, or any static host. KPIs, time series, device distribution, traffic sources, page performance, error breakdown. Date and page filters built in.

Built by someone who spent 16 years cleaning up bad tracking

Measr isn't a weekend project. It's the distillation of every analytics implementation mistake I've seen, and the standard I built to stop making them.

Balázs Turán

Built by

Balázs Turán

Digital analytics consultant with 16 years in the field. I've built analytics departments from scratch at Metro AG, designed tracking strategies for Zürcher Kantonalbank's entire digital ecosystem, and led Mazda Europe's GA4 migration. Every project, same story: tracking that's either too simple (pageview counters) or too complex (GA4 with 47 custom dimensions nobody understands). So I built the CDE Analytics Standard, a 19-module event taxonomy that covers everything a marketing site or web app actually needs. Measr is that standard, packaged as a product.

16+
Years in analytics
10+
Enterprise brands
50+
Analytics projects

Enterprise experience: Metro AG, Zürcher Kantonalbank, Peek & Cloppenburg, Commerzbank, 20+ e-commerce brands via econda

Connect on LinkedIn

Live in three steps

No build tools. No complex configuration. No vendor lock-in.

1
Run the migrations
Create a free Supabase project. Paste the migration SQL. Tables, indexes, RLS policies, and RPC functions are set up in one step.
-- Run in Supabase SQL Editor
\i database/migrations/*.sql
2
Add the script
Drop one script tag into your app. Configure three values: Supabase URL, anon key, site ID. Start tracking immediately.
Measr.init({
  supabaseUrl: 'https://...',
  supabaseKey: 'eyJ...',
  siteId: 'my-app'
});
3
Deploy the dashboard
Push the dashboard app to Vercel, Netlify, or any host. It connects to your Supabase and shows your data. That's it.
$ npm run build
$ netlify deploy --prod

Try before you buy

Every click fires a real event to Supabase. Interact with the page, watch each event appear in the live console, then open the demo dashboard to see the numbers move.

Live console preview
22:01:03 page_view Interactive demo
22:01:07 interaction Tab: Sessions
22:01:12 scroll_depth 25%
Open the interactive demo

Your session appears in the dashboard within seconds, on your phone as well as on a desktop.

9 modules. Everything that matters.

Each module tracks a specific type of user behavior with a defined event schema. No guesswork. No "custom events with 14 parameters."

A
Page Tracking
page_view
Page views, sessions, bounce rate, unique visitors, session duration, entries and exits.
B
Interactions
interaction
CTA clicks, accordion opens, toggles, sliders. Any click with a visible result. Interaction rate, CTA click rate.
C
Navigation
navigation
Internal link clicks by navigation type: main nav, footer, sidebar, in-content links.
D
Exit Links
exit_link
Outbound link clicks with the destination captured as origin + path (query strings and fragments are stripped). Know where your users go.
E
Scroll Depth
scroll_depth
Scroll milestones at 25%, 50%, 75%, 90%, and 100%. Each fires once per page view.
F
Video
video
Video starts, milestones (25/50/75/90%), completion rate. No autoplay tracking.
G
Errors
error
Client-side errors with message and type. Find what's breaking before your users tell you.
H
Downloads
download
File downloads by name and file type. PDFs, CSVs, images, tracked automatically.
K
Form Tracking
form_view / form_start / form_end
Track form views, starts, and completions. Tracking via CSS selector or manual API calls.

19 modules are defined in the CDE Analytics Standard. 9 ship today. The remaining 10 are specified and ready. They ship as demand validates them.

Measr vs. everything else

Self-hosted depth with none of the setup pain. For the named head-to-heads, read the full comparison: Measr vs Plausible, Fathom, Matomo, Simple Analytics, and Umami.

Feature Measr Umami Plausible PostHog OpenPanel GA4
Self-hosted ✓ (CE free)
You own the data Depends Depends
Pre-built event taxonomy ✓ (9 modules)
Interaction tracking ✓ Auto Manual ✓ Auto Manual
Video tracking Manual
Download tracking ✓ Auto Manual Manual
Form tracking ✓ Auto Manual
Scroll depth ✓ Auto Plugin Manual
Dashboard included
Unlimited events Tiers Tiers
No cookies
Supabase-native
GDPR deletion ✓ (via SQL) Manual Complex
Setup time ~30 min ~15 min ~5 min (hosted) ~30 min ~10 min ~15 min
Monthly cost €19 Free €9-99+ Free-$$$ Free-$2.50+ Free

Clean API. Zero complexity.

No tag managers. No data layers. No configuration files. Call init(), everything fires.

// That's it. Everything fires automatically. Measr.init({ supabaseUrl: 'https://your-project.supabase.co', supabaseKey: 'your-anon-key', siteId: 'my-app' }); // Page views, scroll depth, exit links, downloads, // navigation, interactions, errors — all automatic. // Need something custom? The manual API is still there. Measr.trackInteraction('CTA', 'hero_signup'); Measr.trackVideo('Product Demo', 'play'); // Debug mode: see every event in the console Measr.enableDebug();

Use Claude Code? The setup and update skills handle everything.

Setup skill Claude Code
AI-guided setup in your terminal
The Measr setup skill lets Claude Code walk you through your entire installation — Supabase configuration, database migrations, SDK integration, dashboard deployment, and end-to-end verification. One command, fully automated.
Update skill Claude Code
AI-guided updates in your terminal
Updates work the same way. The update skill lets Claude Code detect what changed, run new migrations, update your SDK and dashboard, and verify everything still works. Pull and update in one command.
Both skills are included with your Measr license. Requires Claude Code installed on your machine.

Why Measr over the free alternatives

What you get that Umami, Plausible, and PostHog don't ship.

Pre-built Event Taxonomy
9 tracking modules with defined event schemas. Page views, interactions, navigation, exit links, scroll depth, video, errors, downloads, forms. You don't design the tracking. You deploy it.
Auto-detection
Drop in the SDK, call init(). Scroll depth, exit links, downloads, navigation, interactions, errors, and page views fire automatically. No manual wiring per element.
Professional Event Schema
Every event has a defined structure: type, element, name, value, URL. Consistent across all modules. Your data is queryable from day one, not a mess of random strings.
Dashboard Included
A pre-built dashboard you deploy under your own domain. KPI cards, time series, device breakdown, traffic sources, geo distribution, page performance. Date and page filters included.
Supabase-Native
Runs on your existing Supabase project. No extra database, no extra hosting, no extra billing. One migration command, one init call with your Supabase URL, key, and site ID.
Ongoing Architecture Updates
New modules ship to the repo as demand validates them. 19 defined in the standard, 9 live today. Pull updates like any Git dependency. No migration headaches.

One product. One price.

No tiers. No feature gates. No per-seat charges. Everything, always.

Full Access
19/mo
Everything included. No tiers. No per-seat charges.
Tracking SDK with all 9 modules
Supabase migration pack (tables, RLS, RPCs)
Standalone dashboard app
Unlimited tracking hits
Multi-site tracking support
All future updates and new modules
GDPR data deletion built in
Setup documentation and QA test script
Get started

Or pay €190/year and save 2 months →

Founder Pricing - First 10 Customers
€9/mo — locked for life
Use code MEASR-FOUNDER-9 at checkout. Same product. Your price never goes up.

Pay. Clone. Deploy.

Three steps from checkout to your first tracked event.

1
Pay via Stripe
Monthly or yearly. Cancel anytime. Your subscription gives you full access to the Measr repository and all future updates.
2
Get repo access
You receive a GitHub collaborator invite to the Measr repository within 24 hours. The repo contains everything: SDK, dashboard app, database migrations, documentation, and QA scripts.
3
Clone and deploy
Clone the repo, run the setup guide — or use the Claude Code setup skill for AI-guided installation — and your first events land in Supabase within minutes.
You own the code. If you cancel, everything you’ve deployed keeps working.
Need help? Email support@measr.app

Know exactly what gets tracked.

Every field, every module, fully transparent. No hidden data collection. No mystery payloads. This is the complete schema that lands in your Supabase.

Shared dimensions
Stored with every event (identifiers and session linkage are resolved server-side)
FieldTypeDescription
session_iduuidResolved server-side per visit (30-minute inactivity window)
anonymous_iduuidDaily visitor key, derived server-side; nothing stored in the browser
sitestringYour site identifier
page_namestringCurrent page at time of event
device_categorystringDesktop, Mobile, or Tablet
geo_languagestringBrowser language, primary tag (e.g. en)
geo_regionstringTimezone-based region
created_attimestampEvent timestamp (ISO 8601)
A
Page tracking
page_view
FieldTypeDescription
page_namestringName of the current page (top-level column)
previous_page_namestringPrevious page (or "Entry") — resolved server-side from the session
original_referrerstring|nullFirst page view of the session only
query_parametersstring|nullUTM keys only (utm_source, utm_medium, utm_campaign, utm_content), first page view of the session only. All other URL parameters are dropped in the browser.
B
Interactions
interaction
FieldTypeDescription
interaction.elementstringWhat was clicked (e.g. "CTA button")
interaction.namestringAction name (e.g. "signup_click")
interaction.click_count1Always 1 per event
C
Navigation
navigation
FieldTypeDescription
navigation.typestringNav category (main, footer, sidebar)
navigation.valuestringTarget page or link label
navigation.click_count1Always 1 per event
D
Exit links
exit_link
FieldTypeDescription
exit_link.urlstringOutbound destination, origin + path only (query string and fragment are stripped in the browser)
exit_link.click_count1Always 1 per event
E
Scroll depth
scroll_depth
FieldTypeDescription
scroll.depthnumberMilestone reached: 25, 50, 75, 90, or 100
scroll.hit_count1Always 1 per milestone
F
Video
video
FieldTypeDescription
video.namestringVideo identifier
video.milestonestring0%, 25%, 50%, 75%, 90%, 100%
video.secondsnumberSeconds since previous milestone (delta)
video.start_count0|11 only at 0% milestone
video.90percent_count0|11 only at 90% milestone
video.hit_count1Always 1 per milestone
G
Errors
error
FieldTypeDescription
error.messagestringError message text
error.count1Always 1 per error
H
Downloads
download
FieldTypeDescription
download.namestringFile name
download.typestringFile extension (pdf, csv, etc.)
download.count1Always 1 per download
K
Form tracking
form_view / form_start / form_end
FieldTypeDescription
form.namestringForm identifier
form.view_count1Sent with form_view
form.start_count1Sent with form_start
form.end_count1Sent with form_end

19 modules are defined in the CDE Analytics Standard. 9 ship today. The remaining 10 are specified and ready. They ship as demand validates them.

Guides for every step, with screenshots.

From an empty Supabase account to reading the numbers: seven guides plus one page per dashboard section.

Getting started
What Measr is, what you need before installing, and which setup path fits you.
Reading the dashboard
Nine section guides: what each section measures and what the numbers mean.
Campaign tagging
UTM capture with zero configuration, and how to tag your campaign URLs.
Browse all guides
The full Help Center: setup paths, tracking modules, and troubleshooting.

Common questions

You do. Everything runs on your own Supabase project. Your database, your server, your data. Measr never sees, touches, or stores any of your analytics data. If you stop using Measr, your tracking continues to work and your data stays exactly where it is.
Yes. Measr uses a two-tier security model. The tracking script sends events to an ingestion function in your own Supabase project, which validates and rate-limits every request before writing with server-side credentials. The public key it ships with can call that endpoint (and retains the legacy write-only grants for pre-v1.3.0 SDK copies) but can never read, change, or delete analytics. The dashboard requires authentication. Only authenticated users can view analytics or delete data.
No. The SDK keeps no visitor state on the device — no cookies, no identifiers, no session object. (The single localStorage key is a developer debug toggle: read on load, written only by you while testing.) Sessions are counted server-side with a 30-minute idle timeout and a daily-rotating visitor key. No client-side fingerprinting, no cross-domain tracking — built so most deployments need no consent banner; whether yours does is a judgment for you or your counsel, not legal advice.
Yes. The SDK detects and excludes known bots, crawlers, and headless browsers: automation flags (Playwright, Puppeteer, Selenium), known crawler user-agents (Googlebot, Bingbot, and 20+ others), and non-browser environments. Detection is pattern-based and best-effort — a bot impersonating a real browser can evade any client-side filter. You can disable it with excludeBots: false if you want to analyze bot traffic.
You own and host everything. Your data lives in your own Supabase project — there is no analytics vendor; your database provider is the only processor involved. The tracking script collects no directly identifying data by default (per-day pseudonymous keys and URLs can still be personal data under GDPR). Data deletion is handled directly in your Supabase project via SQL.
About 30 minutes. Create a free Supabase project, run the migration SQL, add the tracking script to your site, deploy the dashboard. The setup guide walks you through every step. Or use the Claude Code setup skill for fully automated, AI-guided installation.
Measr ships with 9 tracking modules: Page Views (sessions, bounce rate, entry/exit pages), Content Interactions (CTA clicks, accordion opens, toggles), Navigation (internal link clicks by type), Exit Links (outbound clicks with URL capture), Scroll Depth (25/50/75/90/100% milestones), Video (play, milestones, completion rate), Errors (client-side JavaScript errors), Downloads (file download clicks), and Form Tracking (views, starts, completions). Each module has a defined event schema. No ambiguity about what goes where.
Yes. Measr adds its own tables (analytics_events, analytics_sessions, analytics_video_events) and RPC functions to your project. They don’t conflict with your existing schema, and migrations never touch objects that aren’t Measr’s own — later migrations do update Measr’s functions and constraints in place, which is why they run in numeric order.
Every update ships via the GitHub repository. Pull the latest changes, then apply in the order the CHANGELOG gives: new migrations first, then any edge-function deploys, then the updated tracking script, then your dashboard. Or use the Claude Code update skill, which handles the order and verification automatically.
Yes. The CDE Analytics Standard defines 19 modules total. The remaining 10 cover internal search, multi-step processes, overlays, e-commerce, and more. They ship when demand validates them. Every module is proven across real sites before it reaches your repo.
Yes. As long as your subscription is active, every update is included: new modules, bug fixes, dashboard improvements, documentation updates. You pull updates like any Git dependency. No extra cost, no upgrade tiers.
Yes. Every table has a site column. One Supabase project can track multiple sites or apps. The dashboard includes a site switcher. Just set a different siteId in each site's Measr configuration.
Yes. Measr includes a pre-built React dashboard you deploy under your own domain. Eight sections cover overview, content, media, pages, traffic, technology, health and forms, with KPI cards, trend charts and breakdown tables. Global date, page and campaign filters narrow every table. You host it, you control who gets in. A drag-and-drop dashboard builder is planned; when it ships, you pull it like every other update.
No. At €19/month, with full data ownership, no pageview limits, and a self-hosted stack you control, the risk is minimal. If you stop paying, you lose access to repo updates, but everything you've already deployed keeps working. Your tracking doesn't break. Your data doesn't disappear.
Your tracking continues to work. Your dashboard continues to work. Your data stays in your Supabase. You keep everything you've already cloned. What you lose: access to new updates, new modules, bug fixes, and dashboard improvements. No repo access means no git pull.

Ready to own your analytics?

Stop renting dashboards. Stop feeding your data to someone else's servers.

Get Started | €19/mo Compare alternatives

Stay updated

Get product updates and new features in your inbox.

No spam. Unsubscribe anytime.

Page last updated: 15 August 2026