Demo Modules Data Model Compare Pricing FAQ 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: Mazda Motors Europe, 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. Enter your name, interact with the page, then find your session in the dashboard.

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.

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 full target URL capture. Know where your users go.
E
Scroll Depth
scroll_depth
Scroll milestones at 25%, 50%, 75%, and 100%. Each fires once per page view.
F
Video
video
Video starts, milestones (25/50/75/100%), 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.

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

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 uses your Supabase anon key with INSERT-only permissions. It can write events but never read or delete them. The dashboard requires authentication. Only authenticated users can view analytics or delete data. The anon key is safe to ship in client-side code.
No. Sessions use localStorage with a 30-minute idle timeout. No cookies, no fingerprinting, no cross-domain tracking. No consent banner needed.
Yes. The SDK automatically detects and excludes bots, crawlers, and headless browsers. It checks for automation frameworks (Playwright, Puppeteer, Selenium), known crawler user-agents (Googlebot, Bingbot, and 20+ others), and missing browser APIs. No bot events reach your database. You can disable this with excludeBots: false if you want to analyze bot traffic.
You own and host everything. No data leaves your infrastructure, no third-party processors involved. The tracking script collects no PII by default. 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/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. The migration scripts are additive — they create new objects, they don’t alter existing ones.
Every update ships via the GitHub repository. Pull the latest changes, run any new migrations listed in the CHANGELOG, and redeploy your dashboard. Or use the Claude Code update skill — it handles migrations and verification automatically. Your tracking never breaks during updates.
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 custom dashboard builder you deploy under your own domain. It's a WYSIWYG drag-and-drop explorer where you build your own dashboards: add sections, choose widgets (KPI cards, line charts, bar charts, tables, pie charts), configure metrics and filters. You design the dashboard that fits your needs, save it, and it's there every time you log in. You own the dashboard, you host it, you control access.
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.

Know exactly what gets tracked.

Every field, every module, fully transparent. No hidden data collection. No mystery payloads. This is the complete schema your SDK sends to your Supabase.

Shared dimensions
Sent with every event
FieldTypeDescription
session_iduuidAuto-generated per browser session
anonymous_iduuidPersistent visitor ID (localStorage)
sitestringYour site identifier
page_namestringCurrent page at time of event
device_categorystringDesktop or Mobile
geo_languagestringBrowser language (e.g. en-US)
geo_regionstringTimezone-based region
created_attimestampEvent timestamp (ISO 8601)
A
Page tracking
page_view
FieldTypeDescription
pageNamestringName of the current page
previousPageNamestringPrevious page (or "Entry")
originalReferrerstring|nullFirst page view only
queryParametersstring|nullURL query string, first page view only
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.urlstringFull outbound URL
exit_link.click_count1Always 1 per event
E
Scroll depth
scroll_depth
FieldTypeDescription
scroll.depthstringMilestone: 25%, 50%, 75%, 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.

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.