WEB ANALYTICS & PERFORMANCE

Analytics built for developers

  • Traffic, performance, and errors in a single tool.
  • Cookie-free and designed for privacy.
  • Alert on traffic, load time, and error rate.
cronitor.io/llms.txt — agent quick start
analytics / acme.comlast 24h
LOAD TIME BACKENDNETWORKFRONTEND
2.50s ALERT RULE
deploy 7c41ab
SESSIONS BY PATH3 OVER RULE
BY COUNTRYASIA-PACIFIC
NO SAMPLING · COOKIE-FREE8.1 KB SCRIPT
Disney
Johnson & Johnson
Reddit
Shutterstock
Genentech
Yelp
GOV.UK
Razer
Rakuten
AB InBev
Chime
Monzo
monday.com
GoodRx
Zendesk
Meesho
analytics / yourwebsite.com · last 2h 312 on site now
AT CROSSHAIR14:05
PAGEVIEWS / 5MIN438
SESSION ERROR RATE0.02%
CONVERSION3.40%
pageviews −1%  flat
error rate ×94
conversion −81%
ERRORS & CONVERSION

Traffic held. Revenue didn't.

JavaScript error tracking is on by default and shares a dataset with traffic. Errors are grouped by type, message, file, and line, with browser-extension noise filtered out. Track a conversion with one line, cronitor('track', 'Checkout'). Both rates are measured per session, so you can see whether errors and lost conversions move together — without a goal builder, second SDK, or tag manager.

  • Put a rule on it — site.error_rate > 0.5% over 5 minutes — routed to the same on-call as a failed check.
  • Then break the damage down by browser, OS, device type, country, city or path.
FIELD DATA

The average is a number nobody experienced.

A lab test measures one machine, on one connection, at one moment. Cronitor measures the browsers that actually loaded your page — Largest Contentful Paint, Cumulative Layout Shift and the full page-load timing — and reports them at the median, the 95th and the 99th percentile. Every pageview is recorded unless you turn sampling down yourself.

  • Google's good / needs-improvement / poor bands, applied per session rather than to an average.
  • Sixteen dimensions to split any of it by, down to city and connection type.
analytics / performance · yourwebsite.com 73,412 sessions · 24h
every pageview · no sampling desktop 41%  ·  mobile 52%  ·  tablet 7%
◤ LCP · SECOND MODE 1,204 sessions · p95 5.2s android · 4g · /pricing
analytics / page load · /checkout 18,904 samples · 24h
0ms elapsed p95 ▸ —
PAGE LOAD BREAKDOWN

Slow is not a diagnosis.

Cronitor records eight timings for every page load and groups them into three stages. Backend covers your origin, network covers the trip to the visitor, and frontend covers the browser and your JavaScript. The breakdown shows where to start instead of handing you one total load time.

  • The percentile you read here is the one you can alert on: site.loadtime.p95 > 2.5s over 1 hour.
  • Filter to one path before you read it — /checkout behaves nothing like /.
PRIVACY

No cookies, and no stored IP addresses.

The script sets no cookies, and Cronitor does not store visitor IP addresses. Sessions cannot be traced back to individual visitors, including by us. Filters run before data is stored: crawlers and localhost are dropped by default, and you can also exclude IP ranges, countries, or path prefixes.

  • The browser client is open source, and installs from npm or a single script tag.
  • Sampling is a dial from 100% down, when volume rather than privacy is the constraint.
analytics / data collected rum.cronitor.io/script.js
WHAT THE SCRIPT SENDS16 DIMENSIONS
+pathhostname
+countrycity
+browseroperating system
+device typedesktop · mobile · tablet
+connection type4g · 3g · wifi
+referrer hostname
+utm_*source medium campaign content term
+page load timings8 phases
+web vitalslcp · cls
+javascript errorstype message file line
+custom eventsevent name · event group
DISCARDED BEFORE STORAGEDEFAULT ON
cookiesnone set, none read
ip addressesnot stored
known crawlersdefault
localhost · 127.0.0.1 · ::1default
browser-extension errorsdefault
ip ranges you listcidr
countries you list
path prefixes you list
cookie-free · de-personalised events are billed, not pageviews
BACKGROUND* * * * *

Field data and lab data answer different questions

A lab test runs your page on one controlled device and connection. That makes the result repeatable and useful, but it does not show what happened to a visitor on a mid-range phone and a congested mobile network far from your origin.

Real user monitoring reports what visitors' browsers measured — when the main content appeared, how much the layout moved, where time was spent, and whether JavaScript failed. The results describe your actual traffic rather than a reference device.

Field data also has a limit: it exists only after real people have loaded the change. A low-traffic site takes longer to build a useful distribution, and visitors experience a regression before it appears in the data. Synthetic monitoring covers that gap, which is why the two approaches work best together.

WHAT REAL USER MONITORING ISONE SCRIPT TAG · ANY FRAMEWORK

One async script in your <head>. It reports a pageview, the page-load timings, the web vitals and any JavaScript error, from every browser that loads the page. Client-side route changes are tracked automatically, so a single-page app needs no additional wiring.

<script async src="https://rum.cronitor.io/script.js" data-client-key="YOUR_CLIENT_KEY"></script>
CLIENT4.6 kB gzipped
SPA ROUTINGautomatic
DIMENSIONS16
BILLED INevents
FIELD DATA OR LAB DATAWHO IS HOLDING THE STOPWATCH
LAB DATA — A CHECK

Cronitor loads the page itself, on a schedule, from the regions you pick, and asserts against the response. Identical conditions every run, so a change in the number is a change in your site.

It can run before the release reaches anybody. It cannot tell you what your visitors got. → Checks

FIELD DATA — ANALYTICS

Real browsers report what real visitors measured, on the devices, networks and geographies they actually have. The distribution is your audience, not a reference machine.

It cannot run before release, and it needs traffic to mean anything. → Analytics

The two failure modes are different too. A check catches the page that stopped answering; analytics catches the page that still answers, still returns 200, and has quietly stopped converting.

WHAT YOU GET* * * * *
WHAT IS HAPPENING RIGHT NOW

Traffic

Sessions, pageviews, bounce rate, average session duration and events per session, in real time. Referrers by hostname and the complete UTM set — source, medium, campaign, content and term — so paid and organic acquisition are separable. Every query can carry compare: previous_time_range, which returns the prior period's value and the change rate alongside the current one.

WHAT YOUR VISITORS ACTUALLY GOT

Performance

Largest Contentful Paint and Cumulative Layout Shift at p50, p95 and p99, and page load time at seven percentiles from p10 to p99. Read any of them per path, per country, per device type or per connection type — the numbers for /checkout on mobile 4G are the ones that matter, and they are not the numbers on your laptop.

ANY SLICE, ANY QUESTION

Segments

Group or filter by any of the sixteen dimensions, with eq, ne, gt, gte, lt, lte, startsWith, endsWith or contains — ten filters at a time, combined with AND or OR. Aggregations, breakdowns, time series and error groups all come out of one query endpoint, bucketed by minute, hour, day, week or month, in the timezone you asked for.

WHEN A NUMBER MOVES

Alerts

Five things you can assert on: pageviews, sessions, page load time at a percentile, error count and session error rate — each against a threshold over a window you choose. A site alert is a monitor like any other, so it shares the dashboard, the escalation rules and the ten-plus notification integrations with your checks, jobs and heartbeats.

CAPABILITIES* * * * *

Everything you need to understand your website, out of the box

Track traffic, performance, conversions, and JavaScript errors without tracking cookies or adding a tag manager.

Real-time traffic

Sessions, pageviews, bounce rate and session duration, updated as visitors arrive.

Core Web Vitals

Largest Contentful Paint and Cumulative Layout Shift, measured in your visitors' browsers.

Page load breakdown

Eight timings per load, rolled up into backend, network and frontend stages.

JavaScript errors

On by default. Grouped by type, message, file and line, with extension noise filtered out.

Custom events

One call, cronitor('track', 'Signup'), and conversion rate updates in real time.

Segment by anything

Sixteen dimensions, nine filter operators, combined with AND or OR.

Multiple domains

One snippet across several domains, with sessions stitched instead of double-counted.

Environments

Tag traffic as production, staging or anything else, and switch the whole dashboard.

Inbound filters

Drop bots, localhost, IP ranges, countries or path prefixes before anything is stored.

Site alerts

Assert on traffic, load time or error rate, and route it like every other monitor.

Query API

Aggregations, breakdowns, time series and error groups, with period-over-period built in.

99.997%UPTIME LAST 12 MONTHS
100M+EVENTS PER DAY
10M+CHECKS PER DAY
100K+JOBS PER DAY
10K+ALERTS PER DAY
2014FOUNDED IN CALIFORNIA
ONE PLATFORM* * * * *

Cronitor is a monitoring platform, not just a traffic dashboard

Analytics shows when a page gets slow for real visitors. Checks watch the endpoint behind it, jobs watch the scheduled work that refreshes its data, and heartbeats watch the worker. They all share one account, dashboard, and alert pipeline.

FROM THE FIELD* * * * *
* * * * *

Monitoring for Developers