Real User Monitoring (RUM): Definition, Tools, Examples

RUM captures performance and errors from actual user sessions in production — JS-based instrumentation. Complements synthetic tests with real-world data.

What is Real User Monitoring (RUM)?

Real User Monitoring (RUM) is the practice of capturing performance, errors, and user-experience data from actual users browsing your application in production. A small JavaScript snippet runs in the user's browser, collects timing/error data, and sends it to a monitoring backend. RUM provides field data: what real users on real devices, real networks, real geographies actually experience.

RUM complements (doesn't replace) synthetic monitoring. Synthetic = consistent baseline from controlled environments. RUM = messy reality across the long tail of devices and networks.

What RUM measures

CategoryMetrics
Page loadTTFB, FCP, LCP, DOMContentLoaded, load event
ResponsivenessINP, FID (legacy), Long Tasks
Visual stabilityCLS
ErrorsJS exceptions, unhandled promise rejections, network errors
Resource performancePer-asset load times, transfer size
User contextBrowser, OS, device, screen size, country, ISP
Custom eventsBusiness KPIs (signup completed, checkout started)
Session recording(Some tools) replay user actions

RUM vs synthetic monitoring

AspectRUMSynthetic
Data sourceReal user sessionsScripted tests from monitoring infra
SampleAll real trafficFixed schedule (e.g., every 5 min)
CoverageLogged-in pages, all browsersPublic pages, controlled browser
Detects pre-traffic issuesNo (need users)Yes (24/7 even with no users)
Reflects user realityYesNo (controlled env)
Cost~$ per session~$ per check

Best practice: use both. Synthetic for alerts and SLO tracking; RUM for diagnosing real-world issues and validating performance budgets.

How RUM works (technical)

RUM uses Browser Performance APIs:

// Capture LCP
new PerformanceObserver((list) => {
  for (const entry of list.getEntries()) {
    sendBeacon('/rum', { metric: 'lcp', value: entry.startTime });
  }
}).observe({ type: 'largest-contentful-paint', buffered: true });

// Capture errors
window.addEventListener('error', (e) => {
  sendBeacon('/rum', { type: 'error', message: e.message, file: e.filename });
});

// Capture INP, CLS, FCP, etc.

Data is batched and sent via navigator.sendBeacon() (works during page unload). RUM tools (Sentry, Datadog RUM, New Relic) wrap this in a small JS library.

Popular RUM tools

ToolStrengthsPricing
Datadog RUMTight integration with APM/logsPer-session
SentryError monitoring + RUMPer-event, generous free tier
New Relic BrowserFull-stack observabilityPer-user/usage
Cloudflare Web AnalyticsPrivacy-first, Core Web VitalsFree tier strong
Akamai mPulseCDN-integrated, large-site focusedEnterprise
SpeedCurvePerformance-focused, frontend-onlyPer-monitor
RaygunErrors + RUM, simpler toolingPer-error
Self-hosted (Boomerang.js + custom backend)Privacy, no vendor lock-inDIY

What RUM is good for

  • Diagnosing real-world performance. "Why are mobile users in Brazil seeing 6s LCP?"
  • Validating fixes. Did p75 LCP actually improve in production after the fix shipped?
  • Catching browser-specific bugs. Safari-only crash? RUM surfaces it.
  • User-impact data. Quantify how many users hit a slow path.
  • Setting performance budgets. Alert when p75 LCP exceeds 2.5s.
  • Correlating performance with conversion. Slow LCP → cart abandonment, with stats.

What RUM is NOT good for

  • Pre-launch testing. No users, no data — use synthetic.
  • Testing internal/staging. Synthetic gives consistent measurements.
  • Detecting infrastructure outages. No users hitting site = no signal. Synthetic alerts on outages.
  • Comparing to competitors. CrUX is better for comparing across origins.
  • Fully reproducible benchmarks. RUM data has variance; lab benchmarks are stable.

RUM best practices

  • Sample appropriately. 100% sampling can be expensive at high traffic. 10% often sufficient for trends; 100% for errors.
  • Tag with context. Release version, feature flag, A/B variant — for slicing.
  • Track p75 and p95. Average is misleading; long-tail latency is what users feel.
  • Segment by device + connection. Mobile vs desktop, 4G vs WiFi — perf varies dramatically.
  • Watch for Safari quirks. Some Performance APIs differ; test cross-browser.
  • Respect privacy. Don't collect PII; use IP anonymization; comply with GDPR/CCPA.
  • Combine with errors. Slow page + error spike → likely related.
  • Set alert thresholds. Page on p75 LCP regression, not on every blip.

RUM and Core Web Vitals

Google's CrUX is essentially RUM data from Chrome users. Self-hosted RUM gives you the same metrics but for ALL browsers + tied to YOUR sessions/users — better for diagnosing your specific issues. CrUX is for SEO ranking; RUM is for engineering action.

FAQ: Real User Monitoring

Is RUM the same as APM?

No. APM = backend (server) monitoring. RUM = frontend (browser) monitoring. Together they're "full-stack observability."

Does RUM slow down my site?

Marginally. Modern RUM scripts are 10-30KB gzipped, load async. Use defer or beacon-based tools.

What's the difference between RUM and CrUX?

CrUX: Chrome-only, aggregated, public dataset. Self-hosted RUM: all browsers, your sessions, custom dimensions.

How much data does RUM collect?

Per session: ~1-5KB. At 1M sessions/month: a few GB. Most tools price per session not per byte.

Can I do RUM without a vendor?

Yes — Boomerang.js or web-vitals.js + a custom backend. More work; full control. Open-source RUM in a box: Akumuli, plus the web-vitals library by Google.

Is RUM GDPR-compliant?

Depends on what you collect. Anonymize IPs, no PII, document in privacy policy. Some tools (Cloudflare Web Analytics) are designed for privacy compliance.

How does RUM handle SPAs?

SPAs need explicit page-view markers (no full page reload to detect). All major RUM tools have SPA support — wrap router transitions in route.start() / route.end().

Combine RUM with synthetic via LoadFocus

RUM tells you what users experienced; synthetic tells you what's possible. LoadFocus runs Lighthouse audits + load tests from 25+ regions to set performance baselines that RUM data can be compared against. Sign up free at loadfocus.com/signup.

How fast is your website?

Elevate its speed and SEO seamlessly with our Free Speed Test.

Free Website Speed Test

Analyze your website's load speed and improve its performance with our free page speed checker.

×