Catchpoint Real User Monitoring: Measuring End-User Experience
Synthetic monitoring tells you how your application performs under controlled conditions. Real User Monitoring (RUM) tells you how it performs for actual users — on their devices, on their networks, in their browsers. Catchpoint's RUM solution captures performance data from every real page view and surfaces the patterns that synthetic tests can't replicate.
This guide covers Catchpoint RUM implementation, key metrics, segmentation strategies, and how to use RUM data to make meaningful performance improvements.
What Is Real User Monitoring?
RUM works by injecting a small JavaScript snippet into your web pages. When a real user loads your page, the snippet:
- Captures browser performance timing data (Navigation Timing API, Resource Timing API)
- Measures Core Web Vitals (LCP, FID, CLS)
- Records user interaction timing
- Transmits the data beacon to Catchpoint's collection infrastructure
Unlike synthetic tests that run from known nodes on clean network conditions, RUM data reflects the full diversity of your actual user base:
- Users on slow 3G connections in rural areas
- Users on outdated browsers that parse JavaScript slowly
- Users in countries with high latency to your servers
- Power users on fiber connections seeing fast response
This diversity is precisely what makes RUM valuable — and why it complements rather than replaces synthetic monitoring.
Setting Up Catchpoint RUM
Step 1: Create a RUM Test in Catchpoint
Navigate to Test Library > Add Test > Real User Monitoring. Configure:
Name: Production RUM Monitor
Domain: yoursite.com (include subdomains if needed)
Data Retention: 30 days (or per your contract)
Sampling Rate: 100% (reduce for high-traffic sites)Catchpoint generates a unique snippet ID tied to your RUM configuration.
Step 2: Add the JavaScript Snippet
Catchpoint provides a lightweight async script tag. Add it to the <head> of every page you want to monitor:
<head>
<!-- Catchpoint RUM snippet -->
<script>
(function(c,a,t,ch,p,o,i,n,t2) {
c[ch]=c[ch]||{};c[ch].api=p;
var s=a.createElement(t);
s.async=1;s.src=o;
var f=a.getElementsByTagName(t)[0];
f.parentNode.insertBefore(s,f);
})(window,document,'script','_crum','https://rum.catchpoint.com/v1/','YOUR_SNIPPET_ID');
</script>
</head>Replace YOUR_SNIPPET_ID with the ID from your Catchpoint RUM configuration.
Performance impact: The snippet is loaded asynchronously and doesn't block page rendering. The data transmission beacon is fired after the page load event, so it has zero impact on user-perceived performance.
Step 3: Tag Single-Page Applications (SPAs)
For React, Vue, Angular, or other SPA frameworks, route changes don't trigger full page loads. You need to manually signal navigation events to the RUM agent:
React Router example:
import { useEffect } from 'react';
import { useLocation } from 'react-router-dom';
function RUMPageTracker() {
const location = useLocation();
useEffect(() => {
if (window._crum && window._crum.newPage) {
window._crum.newPage(location.pathname);
}
}, [location]);
return null;
}
// Add to your root App component
function App() {
return (
<Router>
<RUMPageTracker />
{/* rest of your app */}
</Router>
);
}Without SPA instrumentation, Catchpoint will only see the initial page load, missing all subsequent navigation.
Step 4: Add Custom Dimensions
Custom dimensions let you segment RUM data by business context:
// Set custom dimensions after the snippet loads
window._crum = window._crum || {};
window._crum.customDimensions = {
userSegment: 'premium', // User tier
appVersion: '2.4.1', // Deployed version
experimentGroup: 'variant-b', // A/B test group
country: 'US' // If server-side geo is more accurate
};These dimensions appear as filterable attributes in Catchpoint's RUM dashboard, enabling powerful segmentation analysis.
Key RUM Metrics
Core Web Vitals
Google's Core Web Vitals are the most important user experience metrics from an SEO perspective. Catchpoint captures all three:
Largest Contentful Paint (LCP) Measures when the largest visible element finishes loading. Represents when the main content appears.
- Good: < 2.5 seconds
- Needs improvement: 2.5–4 seconds
- Poor: > 4 seconds
Interaction to Next Paint (INP) Measures responsiveness — how quickly the page responds to user interactions like clicks and taps.
- Good: < 200 milliseconds
- Needs improvement: 200–500 ms
- Poor: > 500 ms
Cumulative Layout Shift (CLS) Measures visual stability — how much content shifts unexpectedly during loading.
- Good: < 0.1
- Needs improvement: 0.1–0.25
- Poor: > 0.25
Navigation Timing Metrics
| Metric | Description |
|---|---|
| DNS Resolution | Time to resolve the domain name |
| TCP Connection | Time to establish connection |
| SSL Handshake | TLS negotiation time |
| Time to First Byte (TTFB) | Server response time |
| DOM Interactive | DOM parsing complete, scripts executing |
| DOM Complete | All resources loaded |
| Load Event | Page fully loaded |
Resource Timing
For each third-party and first-party resource on the page, RUM captures:
- Resource URL
- Initiator type (script, image, stylesheet, XHR)
- Load time
- Transfer size
This reveals which third-party scripts (analytics, chatbots, ad systems) are causing the most performance impact.
Building RUM Dashboards
Overview Dashboard
Your main RUM dashboard should display:
- p75 LCP trend — 75th percentile LCP over the past 30 days
- p75 INP — Interaction responsiveness
- CLS score — Visual stability
- Session volume — Total real user sessions (to contextualize percentages)
- Availability — Percentage of sessions with errors
Use p75 (75th percentile) rather than average — averages are pulled down by fast users and don't reflect the experience of slower users.
Page-Level Breakdown
Create a table view showing each page's:
- URL or page pattern
- Session count
- p50 and p75 LCP
- INP
- CLS
Sort by session count × (p75 LCP / 2.5). This prioritizes pages that are both high-traffic and slow — where optimization has the most user impact.
Segmentation Views
Build separate views for:
By Device Type Compare desktop vs. mobile vs. tablet performance. Mobile users typically experience 2–3x slower performance.
By Geographic Region Identify which countries have poor performance. If users in Southeast Asia see 6-second LCP while US users see 2 seconds, you need a CDN presence in that region.
By Browser Check if any specific browser version has abnormal performance or error rates.
By Connection Type 4G vs. WiFi vs. 3G shows the impact of network conditions on your real user base.
RUM vs. Synthetic: Reading the Data Together
RUM and synthetic monitoring measure the same thing from different angles. Understanding when they diverge tells you something important:
RUM faster than synthetic
- Your CDN is serving cached content to users efficiently
- Real users are geographically closer to your servers than synthetic nodes
- Users have faster devices than what synthetic emulates
RUM slower than synthetic
- Real users are on worse networks (mobile, congested ISPs)
- Third-party scripts are impacting real users but not synthetic tests (ad blockers on synthetic nodes)
- Real page loads have more user-generated content than the synthetic test URL
Same pattern in both
- The issue is server-side or in your core assets
- The geographic distribution of the problem is consistent
- CDN is not helping real users any more than synthetic
Synthetic catches issues RUM misses
- New deployments that only affect synthetic test URLs
- Incidents that resolve within minutes (RUM needs time to accumulate data)
- Low-traffic pages with insufficient real user data
Performance Optimization Workflow Using RUM Data
Step 1: Identify the Biggest Opportunity
Sort your pages by session count × (p75 LCP − 2.5s). Focus on pages where both traffic and slowness are highest. A checkout page with 50,000 sessions/day at 4.5s LCP is a bigger priority than a blog post with 200 sessions/day at 3s LCP.
Step 2: Segment by Dimension
For the identified page, filter by:
- Mobile users only (often reveals mobile-specific issues)
- Specific geographic regions (identifies CDN gaps)
- Slow connection users (3G, slow 4G)
This narrows the root cause before you start debugging.
Step 3: Check Resource Timing
Look at which resources on the slow-loading pages take the most time for real users. Common culprits:
- Large, unoptimized images
- Render-blocking JavaScript
- Third-party scripts loaded synchronously
Step 4: Make a Change
Implement one optimization at a time:
- Switch images to WebP/AVIF
- Add
deferorasyncto non-critical scripts - Enable HTTP/3 on your server
- Adjust CDN caching rules
Step 5: Measure in RUM
After deployment, watch your RUM dashboard for the target page over 48 hours. With sufficient traffic, you'll see a clear shift in p75 LCP distributions if the optimization worked.
Don't rely on synthetic alone to validate — synthetic tests might not reflect the conditions where real users were slow.
Alerting on RUM Data
RUM alerting is fundamentally different from synthetic alerting:
Synthetic: Alert when a test fails or exceeds a threshold (point-in-time) RUM: Alert when a percentile metric degrades over a rolling window
Configure RUM alerts for:
- p75 LCP exceeds 2.5s over a 1-hour rolling window
- Error rate exceeds 1% of sessions
- Any page's session volume drops more than 30% (could indicate availability issue)
Avoid alerting on individual sessions — every user occasionally experiences slowness. Only alert on statistical patterns across many sessions.
Privacy and Compliance Considerations
Catchpoint RUM captures browser timing data, not user content. However, the URL of each page view is collected. For compliance:
GDPR/CCPA considerations:
- RUM data is performance telemetry, not personal data — but URLs can sometimes contain personal identifiers
- Use URL masking to strip query parameters:
yoursite.com/user/[masked]/profile - Review your privacy policy to mention performance monitoring
- Respect Do Not Track if required by your policy
IP address handling: Catchpoint collects IP addresses for geo-location but (per their data processing agreement) anonymizes or discards them according to your data processing settings.
Cookie-free operation: Catchpoint RUM can operate without cookies, using local storage for session continuity. Verify this matches your cookie consent implementation.
Integrating RUM with Incident Response
The most underused capability of RUM is real-time incident detection. During a production incident:
- Open the RUM dashboard on your primary pages
- Set the time window to "Last 30 minutes"
- Watch error rates and availability — are real users being impacted?
- Filter by geography to identify blast radius
- Compare current p75 LCP to your baseline to quantify degradation
This gives your incident team real-time user impact data rather than relying solely on server-side metrics that may not reflect the full scope.
Conclusion
Catchpoint RUM transforms performance monitoring from an infrastructure concern into a user experience program. By capturing what real users on real networks actually experience, it reveals gaps that synthetic tests cannot detect and prioritizes optimization work by actual business impact.
The implementation is lightweight — a JavaScript snippet, optional SPA instrumentation, and custom dimensions for your business context. The payoff is visibility into your application's true performance landscape across the diversity of devices, networks, and geographies that make up your actual user base.
For complete application quality assurance, pair Catchpoint's performance monitoring with functional testing using tools like HelpMeTest to ensure that fast pages also do the right things.