RUM · content analytics · no cookie banner

Measure every visitor.
Not just the ones who clicked “Accept”.

Cookieless real user monitoring with content analytics built in. You get Core Web Vitals measured by Google's own library, and every click tied to the page, article and slot it came from. Nothing is stored on the visitor's device.

Cookies set
0
Device storage
none
Script, as served
8.4 KB
Updates for returning visitors
65 B
Fig. 1 · one page view, as recorded
Timeline of one article page view Navigation timing, first contentful paint at 0.9 seconds, largest contentful paint at 1.8 seconds on the hero image, a layout shift, and a click on the second related article fifteen seconds later. 0.0 s 0.6 s 1.2 s 1.8 s 2.4 s 15.2 s NAVIGATION dns · tcp · tls · request · response TTFB 180 ms FCP 0.90 s LCP 1.80 s img.hero · load delay 100 ms layout shift 0.04 · .ad-slot click → article:67890 related-articles · slot 2 page_view_id 7Kq…f3 · sent with sendBeacon · 0 cookies

§1 · The consent gap

Your RUM data has a bias you didn't choose.

Most monitoring scripts set a cookie, so they wait for consent. The people who never answer the banner, or decline it, never get measured. Those are often the visitors on slow phones and slow connections, the ones you most need to see.

We designed the script so there's nothing to consent to for storage: no cookies, no localStorage, no sessionStorage, no fingerprinting. Same-day visits are grouped on our servers with a salt that is deleted every midnight, and the raw IP address is never stored.

Exactly what we collect, and what we don't →

§2 · One script, two questions

Is it fast? Is it working?

Performance

Vitals, with the reason attached

LCP, INP, CLS, FCP and TTFB from Google's web-vitals, so the numbers match Search Console. Each one comes with its cause: the LCP element and its sub-parts, the slow interaction's target, the element that shifted.

Content

Every click, on the page it happened

Mark an area with data-cv-region and you'll see which related article, product or slot gets clicked, and from which article. Pages are matched to articles automatically from your existing JSON-LD.

The overlap

What slowness actually costs

Each page view carries its own vitals and its own clicks. So you can ask the question neither kind of tool answers alone: do slow pages get fewer clicks, less reading, fewer product views?

Fig. 2 · clicks by region on one article, last 7 days (illustrative)

RegionMost clickedSlotClicksCTRp75 LCP of source
related-articlesarticle:6789021,2846.1%1.9 s
product-carouselproduct:CH-910901406423.0%1.9 s
nav/explorer/builds/45112.4%1.9 s
related-articles (LCP > 4 s)article:678902973.2%4.6 s

§3 · Engineering notes

We measured. Then we decided.

65bytes

What a returning visitor downloads when your settings change. We serve the update as a zstd delta against the version they already have (RFC 9842). A full download is 8,413 B.

The measurements →
1.4KB

Deep diagnostics (every resource, long animation frames down to the function name) arrive in a separate file, and only once your page has finished loading and the browser is idle.

0stored

IP addresses written to disk. The IP is used once in memory, for the visitor hash and a country lookup, and then it's gone.

§4 · Pricing

Free to start.
No surprise bills, ever.

Free for one site and 10k page views a month, with every feature and no card. Paid plans start at $5: you reserve page views with a slider. Go over and we keep collecting. If you go well over, we switch to even sampling rather than cutting you off. We never charge for overage automatically.

See pricing