RUM (real user monitoring)

Telemetry collected inside real visitors' browsers, so you see what your actual users hit instead of what your laptop hits.

real-world speed, not lab testswhat it's like on their phonewhy is it slow for users but fast on my machinefield data instead of lab scoresreal user moniteringbrowser-side telemetryperformance data from actual visitorsthe beacon the browser sends back

See it

Live demo coming soon

What it is

RUM is a small script riding along in your page that reads the browser's own APIs (PerformanceObserver, Navigation Timing, window.onerror) and beacons the results back to you. Every sample carries context: route, device, connection type, browser, country, release. That context is the whole point, because it turns 'the site feels slow' into 'the /checkout route is slow on mid-range Android since Tuesday's deploy'.

Reach for it when your synthetic checks are green and users keep complaining anyway. RUM is the only source that includes the three-year old phone, the hotel wifi, and the browser extension injecting 400kb. Pair it with server-side traces: a bad p75 in RUM plus a fat span in the API trace tells you which half of the stack to go fix. The same beacon usually carries JS errors too, which is why RUM and error tracking tend to ship as one SDK.

Gotchas: RUM is skewed toward people who stayed. A modern SDK does report early measurements and flushes them on visibilitychange or pagehide with sendBeacon, so a fast bounce is not automatically lost, but the visitor who gave up before the script ran, or whose beacon never made it out, is silently missing from your numbers and probably had the worst experience of anyone. Treat it as nonresponse bias rather than a complete census. Ad blockers and consent banners quietly eat a chunk of your beacons. Report p75 or p95, never the mean, since one person in a tunnel drags an average into fiction. And attaching a user ID to every event is how you buy a surprise bill.

Ask AI for it

Add real user monitoring to this web app. Install the 'web-vitals' library, subscribe to onLCP, onINP, onCLS, onTTFB and onFCP, and also capture uncaught errors and unhandled promise rejections. Batch each sample and send it with navigator.sendBeacon to POST /api/rum on visibilitychange 'hidden', not on unload. Include the route pattern (not the raw URL), release commit SHA, device type, effective connection type, and an anonymous session ID, but no user identifiers and no query strings. Keep 100% of error events and sample performance events at 20%. Server-side, aggregate to p75 and p95 per route per device over a rolling 7-day window and flag regressions after a deploy.

You might have meant

telemetryapmsynthetic monitoringlatency percentileerror tracking