If you run a web application in production, you have probably encountered two broad categories of monitoring: synthetic monitoring and real user monitoring (RUM). They sound like they solve the same problem -- "is my site working?" -- but they measure fundamentally different things. Understanding the distinction is the first step toward building a monitoring stack that actually covers your blind spots.

This guide breaks down what each approach does, when one is enough, and why most production teams end up needing both.

What is synthetic monitoring?

Synthetic monitoring runs automated checks against your endpoints from external locations on a fixed schedule. No real users are involved. A monitoring service -- like CronAlert -- sends HTTP requests to your URLs at regular intervals and records whether the response came back healthy. If something goes wrong, you get an alert.

The "synthetic" part means the traffic is artificial. The checks happen whether you have zero visitors or ten thousand. They run at 3 AM on a Sunday just the same as noon on a Tuesday. This makes synthetic monitoring the foundation of uptime monitoring -- it answers the question: is my service available right now?

A typical synthetic monitor checks:

  • HTTP status code -- did the server return 200, or something else?
  • Response time -- how long did the server take to respond?
  • Response body -- does the response contain (or not contain) a specific keyword?
  • SSL certificate -- is the certificate valid and not expiring soon?
  • Regional availability -- is the service reachable from multiple geographic locations?

CronAlert is a synthetic monitoring tool. It checks your URLs on a schedule from external locations and alerts you via email, Slack, Discord, webhooks, or other channels when something fails. The checks are independent of your application code -- you do not need to install anything in your app to use it.

What is real user monitoring?

Real user monitoring (RUM) takes the opposite approach. Instead of sending artificial requests from outside, RUM embeds a JavaScript agent in your web pages that collects performance and error data from actual user sessions. Every real page load, every click, every network request from a real browser gets recorded and sent to the RUM service for analysis.

RUM tools -- Datadog RUM, New Relic Browser, Sentry, SpeedCurve, and others -- capture metrics that synthetic checks cannot:

  • Core Web Vitals -- Largest Contentful Paint (LCP), Cumulative Layout Shift (CLS), Interaction to Next Paint (INP) as experienced by real users on real devices.
  • Client-side JavaScript errors -- uncaught exceptions, failed API calls from the browser, broken third-party scripts.
  • Actual page load times -- not just server response time, but the full experience including DNS lookup, TLS negotiation, resource loading, rendering, and JavaScript execution.
  • User session context -- which browser, device, OS, screen size, and geographic location each user has.
  • User behavior flow -- which pages users visit, where they drop off, and how they interact with your UI.

RUM answers a different question than synthetic monitoring: what is the actual experience like for my users?

Head-to-head comparison

The differences become clearer when you compare the two approaches directly.

Capability Synthetic monitoring Real user monitoring
Detects downtime Yes -- checks run on schedule regardless of traffic Indirectly -- no data means either no users or site is down
Measures real user experience No -- measures server response, not browser rendering Yes -- captures what users actually see and feel
Works with zero traffic Yes -- synthetic checks are independent of real users No -- requires real user sessions to generate data
Catches regional issues Yes -- with multi-region checks from known locations Yes -- if you have users in the affected region
Requires code changes No -- fully external, no agent or SDK to install Yes -- JavaScript snippet must be added to pages
Catches client-side JS errors No -- only sees the server response Yes -- captures uncaught exceptions in the browser
Measures Core Web Vitals No -- these are browser rendering metrics Yes -- LCP, CLS, INP from real sessions
Cost model Per monitor -- predictable, traffic-independent Per session/pageview -- scales with traffic

The two approaches are complementary, not competing. Synthetic monitoring is your early warning system for availability. RUM is your lens into the user experience. Gaps in either one leave blind spots that the other fills.

When synthetic monitoring is enough

Not every project needs both approaches from day one. Synthetic monitoring on its own covers a lot of ground, and for certain use cases it is all you need.

Early-stage products with low traffic

If your product is pre-launch or has a handful of users, RUM will not generate meaningful data. Synthetic monitoring gives you coverage from the start -- you will know the moment your site goes down, even if nobody happens to be visiting. When you are still building and iterating, knowing "it is up and responding correctly" is the critical baseline.

API-only services

If your service is a REST or GraphQL API consumed by other backends or mobile apps, there is no browser to instrument with a RUM agent. Synthetic monitoring can verify your API endpoints are returning the right status codes and response bodies on a schedule. That covers availability and basic correctness.

Monitoring third-party dependencies

You cannot install a RUM agent on a third-party service. But you can point a synthetic monitor at any public URL -- a payment provider's status endpoint, a SaaS API you depend on, a CDN origin. Synthetic monitoring is the only option for external dependencies you do not control.

Off-hours and low-traffic coverage

RUM only generates data when users are active. If your traffic drops to near zero overnight or on weekends, RUM goes blind. Synthetic checks keep running 24/7 regardless of traffic patterns. If your database goes down at 4 AM, synthetic monitoring catches it immediately. RUM catches it when the first user shows up -- possibly hours later. Understanding the cost of downtime makes it clear why those overnight hours matter.

When you need RUM

RUM becomes essential when you need to understand what is happening inside the browser -- the gap between "the server responded" and "the user had a good experience."

Performance optimization

If you are trying to make your site faster, you need to measure real performance, not just server response times. A page might return from the server in 200ms but take 4 seconds to become interactive because of heavy JavaScript, render-blocking resources, or slow third-party scripts. Only RUM captures the full picture.

Core Web Vitals and SEO

Google uses Core Web Vitals as a ranking signal. These metrics -- LCP, CLS, INP -- are measured in real browsers with real users. Synthetic tools cannot replicate the variety of devices, network conditions, and browser configurations that your actual users have. If your Search Console is flagging Core Web Vitals issues, RUM is how you diagnose and fix them.

Client-side error tracking

A JavaScript exception in the browser will not show up in any server-side log or synthetic check. If a deployment breaks the checkout flow for users on Safari, or a third-party ad script throws errors on mobile, RUM is the only way to catch it. Your server sees a successful 200 response -- the problem is entirely in the browser.

Understanding user experience across segments

RUM lets you slice performance data by browser, device type, geographic location, connection speed, and page. This reveals problems that a single synthetic check from a fixed location cannot: your site might be fast in the US but slow in Southeast Asia, fine on desktop Chrome but broken on mobile Firefox. These patterns only emerge from real traffic.

When you need both

Most production web applications reach a point where synthetic monitoring and RUM each cover gaps the other cannot. Here is how they complement each other in practice.

Synthetic catches what RUM misses: Your site goes down at 2 AM. No users are online, so RUM generates no data. Synthetic monitoring detects the outage within minutes, alerts your on-call engineer, and the issue gets fixed before morning traffic arrives. Without synthetic monitoring, the first signal would be user complaints or a spike in RUM errors -- hours later.

RUM catches what synthetic misses: Your latest deployment passes all synthetic checks -- the server returns 200, the response body contains the expected content, response times are normal. But users on older Android devices see a blank white screen because a JavaScript polyfill is missing. RUM captures the error and the affected user segment. Synthetic monitoring, hitting the endpoint from a server with no browser rendering, sees nothing wrong.

Think of it this way -- synthetic monitoring is your smoke detector. It alerts you when something is clearly wrong. RUM is your thermostat. It tells you whether conditions are comfortable for the people actually in the building.

The combination gives you complete coverage:

  • Availability -- synthetic monitoring confirms your endpoints are reachable and returning correct responses, 24/7.
  • Performance -- RUM measures how fast pages load and how responsive they feel for real users.
  • Correctness -- synthetic keyword checks verify response content; RUM catches client-side rendering failures.
  • Coverage -- synthetic works during zero-traffic periods; RUM works across the full diversity of user environments.

Setting up the synthetic side with CronAlert

If you are building out your monitoring stack, synthetic monitoring is the right starting point. It requires no code changes, gives you immediate coverage, and works from day one. Here is how to set it up with CronAlert.

Monitor your critical endpoints

Start with the pages and APIs that matter most. Your homepage, login page, API health endpoint, and any page that drives revenue. Create a monitor for each one in the CronAlert dashboard. For a step-by-step walkthrough, follow the 5-minute setup guide.

Enable multi-region checks

If you serve users in multiple geographies, multi-region monitoring checks your endpoints from five locations simultaneously -- US East, US West, EU West, EU Central, and AP Southeast. This catches regional outages that a single-location check would miss, like a CDN edge node going down in Europe or a DNS routing issue affecting Asia-Pacific users.

Add keyword monitoring for response validation

Status codes alone do not tell the full story. A server can return 200 while serving a maintenance page, a login redirect, or an empty body. Keyword monitoring checks the response body for a specific string -- like your company name, a JSON key, or the absence of an error message. This catches the silent failures that status codes miss.

Configure alerts for your team

Set up alert channels so the right people get notified immediately. CronAlert supports email, Slack, Discord, Microsoft Teams, Telegram, PagerDuty, and webhooks. Route critical endpoint alerts to your on-call rotation and lower-priority monitors to a shared channel.

Once your synthetic monitoring is running, you have the availability layer covered. When you are ready to add RUM for the performance and user-experience layer, you can layer in a tool like Datadog, New Relic, or Sentry alongside CronAlert. The two do not conflict -- they run independently and give you different views of the same system.

Frequently asked questions

Can synthetic monitoring replace real user monitoring?

No. Synthetic monitoring tells you whether your service is available and responding from external locations, but it cannot measure what real users experience in their browsers -- page render times, JavaScript errors, layout shifts, and other client-side performance issues. Synthetic monitoring answers "is it up?" while RUM answers "is it fast and working for actual users?" Most teams need both to get complete visibility.

Is synthetic monitoring enough for an API-only service?

For API-only services with no browser-based frontend, synthetic monitoring is usually sufficient. Since there is no browser rendering involved, there are no Core Web Vitals or client-side JavaScript errors to capture. Synthetic checks can verify availability, response times, status codes, and response body content on a schedule. CronAlert's API monitoring covers this well.

How much does real user monitoring cost compared to synthetic monitoring?

RUM tools typically charge based on the number of sessions or page views tracked, which scales with your traffic. Costs can range from free tiers for small sites to hundreds or thousands of dollars per month for high-traffic applications. Synthetic monitoring costs are based on the number of monitors and check frequency, making costs predictable regardless of traffic volume. CronAlert offers synthetic monitoring starting with a free plan for up to 25 monitors.

Do I need real user monitoring if I already track Core Web Vitals in Google Search Console?

Google Search Console provides Core Web Vitals data from Chrome users, but it is aggregated and delayed by days or weeks. A dedicated RUM tool gives you real-time data broken down by page, browser, device, geography, and user segment. If you only need a high-level view of Core Web Vitals for SEO purposes, Search Console may be enough. If you need to debug performance issues or track the impact of deployments, a RUM tool is worth the investment.

Start with synthetic, add RUM when you need it

You do not need to build a complete observability stack on day one. Start with synthetic monitoring to cover availability -- it is the highest-leverage monitoring you can add, requires no code changes, and catches the problems that hurt users most (complete downtime). As your product matures and you need to optimize performance or debug client-side issues, layer in RUM alongside it.

CronAlert's free plan gives you up to 25 synthetic monitors with 3-minute check intervals, email and Slack alerts, and a public status page -- everything you need to cover the availability side. Paid plans add multi-region checks, keyword monitoring, 1-minute intervals, and more. See the pricing page for the full comparison.