Google Already Publishes Which Sites People Visit. Similarweb Charges You to Guess.

Reach reads Google's public Chrome data to size any domain. A free Similarweb alternative, built by the guy behind usearchfrom.com.

10 min read

Every month, Google drops a dataset that says which websites real Chrome users actually loaded. It is page loads from browsers, on desktop and Android, not a panel, an extension sample, or a model. It has been public since 2017 and it is free.

Similarweb sells you a weather forecast, while Google publishes the rain gauge for free.

Its official job is Core Web Vitals. You look up your origin, you get your LCP and INP percentiles, you go fix your images. Google never pitched it as a traffic tool (and to be fair, it does not contain a single "visits" number).

So the question worth asking: can a dataset built to measure page speed tell you whether a site has a real audience, and at what scale?

On 8 September 2026, Kevin Richard, the person behind usearchfrom.com (the Google location simulator half the SEO world has used at least once), launched a free tool called Reach on nicheobserver.com that answers exactly that. It positions itself as a free alternative to Similarweb. After reading the methodology and the API docs, I think the pitch holds, with 1 big caveat I will get to.

Two panels: worker, expensive analytics dashboard; pro, free Google Chrome UX Report API data; robotic cat tangled in cables.
Pay $500/month to guess what Google gives you free.

Google Ships the Numbers Every Month

The dataset is the Chrome UX Report, CrUX for short. Chrome users who opted into usage statistics reporting feed it. Google aggregates their page loads per origin and per month, then publishes the result on BigQuery and through a public API.

2 conditions for a site to appear:

  • It has to be publicly discoverable: indexable, returning HTTP 200, no noindex.
  • It has to clear a minimum popularity threshold, which Google does not disclose.

Coverage is Chrome on Windows, macOS, ChromeOS, Linux, and Chrome on Android (including Custom Tabs and WebAPKs). Chrome on iOS is out, because on iOS "Chrome" is Safari in a Chrome costume (Apple's rules, not Google's). Android WebView is out. Every other Chromium browser is out. Safari is out.

Keep that list in your head, because it is the whole limit of the method. Everything Reach tells you is "as seen by Chrome desktop and Chrome Android, on public pages, above Google's threshold". Nothing more, and Kevin's own methodology page says so in plain words.

What CrUX does contain, alongside the performance metrics, is a popularity signal: a coarse rank bucket per origin, such as "this site is somewhere in the top 50,000", rather than an exact position like "this site is number 12,487". That coarse bucket is the raw material Reach turns into a score.

Google never labeled it as a traffic signal. It just never labeled it as anything else either.

What the 0 to 100 Score Actually Means

\

Reach maps the CrUX popularity buckets onto a score. On the August 2026 snapshot, the ladder looks like this, with the number of domains observed at each level:

  • 100: Top 1K, 822 domains
  • 90: Top 5K, 3,365 domains
  • 80: Top 10K, 4,204 domains
  • 70: Top 50K, 32,450 domains
  • 60: Top 100K, 39,801 domains
  • 50: Top 500K, 308,560 domains
  • 40: Top 1M, 376,735 domains
  • 30: Top 5M, 3,011,993 domains
  • 20: Top 10M, 3,887,581 domains
  • 10: Top 50M, 6,232,101 domains
  • 0: not observed that month

Read the ladder from the bottom. Around 13.9 million domains were observed in August 2026, and more than 13 million of them sit in the 3 lowest rungs. The top 3 rungs together hold fewer than 8,500 domains. That is the actual shape of the web, and it is the part Similarweb-style tools handle worst, because a panel of a few million users simply does not see a site that gets 3,000 Chrome loads a month. A panel hunting for a 3,000-load site is a telescope pointed at a firefly.

Think of the score as a character level, not an XP counter. Level 70 tells you which tier of the game you are in, not how many goblins you killed to get there.

2 scores show up in the API for each domain:

  • reach_score is the direct score of the domain's best origin, straight from the bucket.
  • adjusted_reach_score is the headline "Domain reach" number. It is a proprietary adjustment calibrated against external audience indicators, so a domain with 31 active origins does not get scored like a domain with 1.

A score of 0 has 4 possible causes, and the tool cannot tell you which one applies: too small for Google's threshold, traffic that is not Chrome desktop or Android, a page that fails the discoverability rule, or you typed the wrong hostname. That last one is more common than it sounds, and the next section is about it.

Reading a Profile in 10 Seconds

You type a domain, a hostname, an origin or a full URL. The tool resolves it to the domain and gives you 5 things.

The documented example is Stripe, abridged from the API response:

{
  "domain": "stripe.com",
  "found": true,
  "snapshot_month": 202608,
  "best_market": { "country": "US", "confidence": "high" },
  "reach_score": 80,
  "adjusted_reach_score": 83.25,
  "popularity_rank_bucket": 10000,
  "best_origin": {
    "origin": "https://checkout.stripe.com",
    "reach_score": 80,
    "popularity_rank_bucket": 10000
  },
  "origins_total": 31
}
  • Domain reach: 83.25 here, the number to compare between sites.
  • Rank bucket: Top 10K. Not a position, a bucket.
  • Best origin: checkout.stripe.com, not www. The audience of Stripe is on the checkout pages of other people's shops, which is exactly what you would expect from a payment processor and exactly what a www-only lookup would hide.
  • Best market: US, high confidence. The country classification is computed offline, per domain, and comes back as resolved, ambiguous or not_observed. Reach does not pretend to know the market when the data is split.
  • History: 24 months of monthly scores, so you see the trend, not a single frame.

The best origin field is the one I would look at first on any unknown domain. A SaaS whose reach lives on app. has users. A SaaS whose reach lives on www. has visitors. A company whose reach lives on docs. has developers reading manuals (some of them do, apparently), which is a third thing entirely.

Users live on app., visitors live on www., and a valuation is the gap between the 2.

The corpus behind this includes: 48,147,806 domains you can look up, 54,101,338 origins, 238 countries and territories, 47 months of history since October 2022, refreshed monthly.

When the Panels Are Blind

Similarweb, Semrush Traffic Analytics and the others estimate. They combine browser extension panels, ISP and DSP partnerships, shared analytics data from sites that opted in, and a model that extrapolates from all of it. On a site with 5 million visits a month, the extrapolation is decent. On a site with 20,000, the panel might contain 3 people, and the number you read is a model's guess dressed up as a measurement. 3 people is a focus group, and a focus group with a decimal point is still a focus group.

CrUX does not extrapolate. It counts loads from a very large share of the Chrome install base and reports a bucket. If a site is in the Top 50K bucket, Chrome users loaded it a lot, whatever the panel says.

That gives you a comparison rule that is useful precisely because the 2 tools fail in different ways:

  • Similarweb says a few hundred visits, Reach says Top 50K and climbing: trust Reach, the panel is blind. Typical causes are traffic from social apps on Android, no ads to detect, no shared analytics.
  • Semrush shows a big organic footprint, Reach stays flat for 12 months: the rankings are not turning into Chrome page loads. Zero-click SERPs, inflated volume estimates, the wrong country, or an audience on iPhones.
  • Both agree: fine, move on.

Rankings are impressions, page loads are people, and only 1 of the 2 pays rent.

A hypothetical to make it concrete, and I mean hypothetical, I have not verified a specific case. Picture a small French Shopify store with no Meta or Google ads detectable, Similarweb reporting under 1,000 visits, and a Reach profile in the Top 50K for 3 consecutive months. The most plausible story is short video traffic from TikTok or Reels opened in Chrome on Android, which panels built around desktop extensions never see. Whether that store is worth 10x the panel's valuation is a different question, but at least you are now asking it with a real signal.

The use cases fall out of that rule on their own:

  • Qualifying a prospect or a site you might buy: observed or not, since when, on which market, rising or falling. A site that a panel calls dead and CrUX calls alive changes the price.
  • Checking a competitor who "exploded in SEO": more impressions is not more customers. Reach flat means the growth is on a dashboard, not in browsers.
  • Sorting a list of 5,000 domains: you do not open them one by one. The API batches 1,000 resources per call. Filter above a score, look at the market, cross with your other signals (links, CMS, affiliate footprint).
  • Sanity-checking your own site: if you rank and Reach does not move, the problem stopped being "am I ranking" and became "why does ranking not turn into visits". Green in Search Console and flat in Chrome is the SEO version of "works on my machine".

Plug It Into Your Agent

The lookup form is the demo, the MCP server is the actual product.

NicheObserver ships an npm package, @nicheobserver/mcp, with 3 tools: lookup_domain, lookup_domains (batch, up to 1,000), and get_corpus_stats. It needs Node 22 and an API key. Registering it in Claude Code is 1 command:

claude mcp add \
  --env NICHEOBSERVER_API_KEY=YOUR_API_KEY \
  --env NICHEOBSERVER_BASE_URL=https://api.nicheobserver.com \
  --transport stdio --scope user \
  nicheobserver -- npx --yes --prefer-online @nicheobserver/mcp@latest

Codex has the equivalent codex mcp add. Once it is loaded, a prompt like "compare seobserver.com and deepseek.com: Domain reach, leading origins and monthly history" gets you the comparison without a browser tab.

If you would rather script it, the REST API is 1 GET with a Bearer token:

curl --get 'https://api.nicheobserver.com/v1/domain' \
  --data-urlencode 'resource=stripe.com' \
  -H 'Authorization: Bearer ro_live_<public_id>_<secret>'

The endpoints are /v1/domain, /v1/domains:lookup for batch, /v1/domain/{resource}/origins for the sub-domain breakdown, and /v1/stats for the corpus numbers. Rate-limited, no documented daily cap on free keys. I could not find a written pricing page for the API, so treat "free" as "free today, check the terms before you build a product on it".

I have been saying for a while that a custom SEO tool beats a $200/month subscription when the data underneath is public. This is the cleanest example of that argument I have seen: the audience-size primitive that used to live inside a SaaS is now a JSON field your agent can call in a loop.

A $200 dashboard is a JSON field with a login page.

Small practical warning from the same docs: the MCP checks for new versions at every startup, so restart your AI client after installing and after each update. Turning it off and on again is still a valid deployment strategy in 2026.

What It Can't Tell You

Kevin's methodology page is unusually direct about the limits, so I will be too. Reach is not:

  • A visit count. Buckets, never volumes. Do not convert "Top 50K" into a number of sessions, the methodology explicitly refuses to.
  • A source breakdown. No SEO versus paid versus direct. A page load is a page load.
  • A unique visitor count. Same reason.
  • A census of the web. Chrome desktop and Android only, public pages only, above an undisclosed threshold. A B2B tool whose users all sit on MacBooks with Safari can be big and score low. To CrUX, an iPhone audience is a parallel dimension: real, crowded, and invisible from this side.

2 subtler traps:

A month-to-month change in reach can mean traffic changed, or that CrUX coverage changed. Google adjusts thresholds and eligibility. When a domain jumps a rung, look at the origins and at the neighboring months before you write "up 40%" in a report.

Sub-domains count, and the aggregation can surprise you. A lookup on example.com may show a Domain reach driven entirely by cdn.example.com or a white-label sub-domain. Always open the origins list before you decide what the score means.

And yes, a determined person can still pollute an audience signal with cheap traffic dumps. It is harder than gaming a panel, because Chrome has to actually load the page for real users, but "harder" is not "impossible". Harder to fake than a panel is a compliment, not a guarantee.

What I like is that none of this is hidden. The score is a reading of a public dataset, the reading is documented, and the dataset itself is CC BY 4.0 if you want to go check the BigQuery tables yourself.


Kevin built usearchfrom.com on a Google parameter that already existed and that people were reading wrong. Reach is the same move on a bigger dataset: nothing new was collected, a public table was read for a question it was never labeled for.

On the "is there a real audience here, and at what order of magnitude" question, this is now the best free signal I know of. What it still cannot do is tell you why the audience is there, or how much of it is on an iPhone. Those 2 blanks are the price of reading a dataset built for page speed.

Sources

This post may contain affiliate links. If you click them, I might earn a small commission — costs you nothing, and helps me keep shipping quality articles every day for your reading pleasure.


Google publishes Chrome traffic data for free every month, but most people do not know how to read it. The demo-vs-product checklist in the welcome kit shows how to validate audience scale without paying for panels or guesses.

Get the welcome kit