Real-Time Web Analytics: What It Is and When You Actually Need It
Real-time web analytics is the tracking and reporting of visitor activity on your site as it happens, usually within a window of a few seconds to a few minutes, rather than in the batched daily or hourly reports that standard analytics produce. It answers "who is on my site right now, what page are they on, where did they come from, and what are they doing" instead of "what happened yesterday." Google Analytics 4 has a Realtime report covering the last 30 minutes. Plausible, Fathom, Matomo, Umami and PostHog all ship a live view. Cloudflare Web Analytics shows near-live request data at the edge. Most of these are free or under $15 a month for small sites, and setup is one script tag or one DNS-level toggle.
The short answer for most people: turn it on, because it comes bundled with the analytics you already have, but do not build your week around it. Real-time is genuinely useful for exactly three things: confirming that tracking works after you deploy a change, watching a launch or campaign in its first hour so you can catch a broken link or a wrong price before it costs you, and spotting a traffic spike or outage while you can still respond. For everything else, including conversion rate, channel performance and content decisions, the numbers you want are the settled ones from 24 hours later, because real-time data is unsampled in some tools, sampled in others, and always too small a sample to draw a conclusion from.
What "real time" actually means in each tool
The phrase covers a wide range of latencies and a wide range of what you get to see. Reports differ in freshness and in how much you can slice them.
| Tool | Live window | Typical latency | What you can segment by |
|---|---|---|---|
| Google Analytics 4 Realtime | Last 30 minutes | Seconds to ~1 minute | Source, campaign, page, country, device, audience, one custom event parameter |
| GA4 standard reports | Full history | 4 to 48 hours to settle | Everything, once processed |
| Plausible / Fathom | Last 30 minutes (live visitor count) | Seconds | Source, page, country, device |
| Matomo (self-hosted) | Visits log, live widget | Seconds, depends on archiving config | Full visitor log including individual sessions |
| PostHog | Live events feed | Seconds | Any event property, plus session replay |
| Cloudflare Web Analytics | Rolling last 30 minutes | Under a minute | Path, referrer, country, browser |
| Server logs / Vercel or Railway logs | Continuous | Immediate | Anything you log, but no sessionization |
Two distinctions matter more than the vendor name. First, live visitor count versus live event stream. A count tells you how many people are on the site; an event stream tells you what each of them just did. Debugging a checkout needs the stream. Watching a Product Hunt launch needs the count. Second, client-side versus server-side collection. Client-side scripts miss anyone with an ad blocker, which on a developer-audience site can be 25 to 40 percent of visitors, and they miss anything that happens after the browser closes. Server-side or edge collection sees every request but cannot see scroll depth, rage clicks or anything that never hits your server.
The three cases where real-time earns its keep
Verifying a deploy. You shipped a new pricing page, a new event name or a consent banner change. Standard reports will not confirm it worked until tomorrow. The realtime view confirms it in 30 seconds: open the page yourself, watch the event appear, check the parameters are populated. If you only use real-time analytics for this, it has paid for itself, because the alternative is discovering on Monday that a week of conversion tracking was silently broken.
The first hour of a launch. When you post to Hacker News, send a 50,000-person email or turn on a new ad campaign, the first hour is when fixable mistakes are still fixable. The failure modes you catch are mundane and expensive: a UTM parameter that redirects and strips itself, a landing page that 404s on mobile because of a trailing slash, a signup form that throws on a field you renamed, a coupon code that does not exist. All of these show up as an obvious shape in the live view, traffic arriving and nothing converting, minutes after they start.
Anomaly response. Traffic dropping to zero usually means a deploy broke the tag, a CDN rule went wrong or the site is down. Traffic multiplying by 20 usually means either something good happened or you are being scraped. Both are worth knowing about within minutes rather than the next morning.
Where the simple answer breaks
Real-time numbers will not match your settled reports, and this is not a bug. GA4's Realtime report and its standard reports use different processing paths. Realtime skips some of the identity stitching, bot filtering and late-arriving-hit reconciliation that the daily tables apply. Expect the realtime count to run higher, because bot traffic has not been filtered yet, and expect sessions to be counted differently because a session that spans the 30-minute boundary is handled differently in each. Never reconcile the two. Never screenshot a realtime number for a report.
Small samples produce loud, meaningless swings. With 40 visitors in the last 30 minutes and 2 conversions, your conversion rate is 5 percent with a 95 percent confidence interval running roughly from 0.6 percent to 17 percent. That range covers "catastrophe" and "best campaign ever." People make real decisions off this, pausing a campaign at 11am because the first 30 visitors did not convert, and it is the single most common way real-time analytics causes harm rather than preventing it. A rule of thumb: do not act on a rate until you have at least 100 conversions, whatever the time window.
The 30-minute window hides everything slow. Your buying cycle is probably days or weeks. A visitor who reads a comparison page today and signs up on Thursday appears in the live view as a bounce. Content that works on a two-week lag looks dead in real time. Judge blog posts on 28-day windows, never on live sessions.
Ad blockers and consent skew who you see, not just how many. If a third of your technical audience blocks the script, your live view is a sample biased toward less technical visitors, on mobile, on default browsers. That changes what "our users are mostly on mobile" means. Cross-check against server logs or edge analytics before you draw a conclusion about your audience from live data.
Latency is not zero even when the vendor says "real time." Streaming pipelines buffer. A hit fired from a page that unloads immediately may never arrive at all. If you are debugging and an event does not show, wait 90 seconds before you conclude it is broken.
A worked example: a launch email that looked like a disaster
A team sends a 30,000-person announcement at 09:00. By 09:12 the live view shows 480 concurrent visitors and 0 signups. The instinct is that the offer failed.
What actually helps is a sequence of checks, in this order, all doable inside the live view:
- Are visitors landing on the page you sent them to? In the realtime page report, check the top landing path. If it is
/pricing/and you sent/pricing, a redirect is in play and may be stripping query parameters. - Is the source attributed correctly? If 480 visitors show as
(direct)rather than your email campaign, your UTMs are being lost, which also means attribution for the whole campaign is gone. Fix the link in the not-yet-sent follow-up. - Do intermediate events fire? If
page_viewfires 480 times andbegin_checkoutfires 0 times, the problem is upstream of payment. Ifbegin_checkoutfires 60 times andpurchasefires 0, the problem is payment, and that is an incident, not a marketing result. - Only then, look at the rate. Twelve minutes into an email send, most recipients have not opened yet, and buyers who did open are still reading. A 0 percent conversion rate at 09:12 is normal noise, not a signal.
In that example, steps 1 through 3 are the ones worth doing live. Step 4 belongs to tomorrow. That is the discipline: use real time to check for breakage, use settled data to check for performance.
A sane setup, in order
- Turn on whatever live view your existing analytics includes. Do not buy a second tool for this.
- Make one deploy checklist item: after any change touching tracking, forms or checkout, load the page and confirm the event appears live.
- Set threshold alerts, not dashboards. An alert when hourly traffic drops below a floor, or when checkout errors exceed a count, beats a screen nobody watches.
- Keep server-side or edge data as your cross-check for volume, since it is immune to blockers.
- Write down which numbers are allowed to come from real time. In practice: presence, event firing, error counts. Not rates, not revenue, not channel comparisons.
Where the useful signal lives outside the analytics tool
The limitation of every real-time analytics view is that it only sees the website. During the launch above, the deciding evidence was scattered elsewhere: the Stripe error rate, the support tickets landing in Zendesk, the message in Slack where someone mentions the coupon does not work, the deploy timestamp in GitHub. Those sources are what turn "conversions are zero" into "the coupon expired at midnight." BI tools connect to databases and modelled sources, so evidence that is a sentence in Slack or an email is outside what they can see.
That cross-tool view is what Skopx is for: you ask a question in chat and it answers across nearly 1,000 connected tools plus your own database, with citations back to the source. If you want a standing console for launch day, one that reads live signups from your database next to Stripe payments and recent support tickets, you can describe it in a sentence and get it. See Internal Apps for how that works.
Skopx Team
The Skopx engineering and product team