# Website Traffic Rank Checker - Open Data Similarweb Alternative (`kantolabs/website-traffic-rank`) Actor

Bulk website popularity from real Chrome user data: global rank tier (top 1K to 1M), rank in 40 countries, top countries, month-over-month trend, plus Majestic rank and referring subnets. No Similarweb account, no scraping, $2 per 1,000 domains.

- **URL**: https://apify.com/kantolabs/website-traffic-rank.md
- **Developed by:** [Kanto Labs](https://apify.com/kantolabs) (community)
- **Categories:** SEO tools, Lead generation
- **Stats:** 2 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 domain rankeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Website Traffic Rank Checker - Open-Data Similarweb Alternative

Check **how popular any website is** - worldwide and in **40 countries** - for thousands of domains
at once, from **real Chrome user data**. For each domain you get its **global popularity tier** (top
1K, 5K, 10K, 50K, 100K, 500K or 1M websites), the **countries where it is most visited**, its
**month-over-month trend**, and its **Majestic Million rank with referring subnets and IPs** (a
backlink-strength signal).

No Similarweb or Semrush account, no scraping of paid SEO tools, no browser, no blocked runs:
every lookup is answered from published open data in milliseconds. **$2 per 1,000 domains.**

### What you can use it for

- **Lead scoring and prospect lists** - sort thousands of company domains by real traffic tier before sales outreach.
- **Competitor and market research** - which competitors are big, where their audience is, who grew last month.
- **Link building and PR** - pick sites with real readers (Chrome rank) and real links (referring subnets).
- **Affiliate, ad and partnership vetting** - check that a publisher is actually visited, and in the country you target.
- **Market sizing by country** - which e-commerce or news sites matter in Germany, Brazil, Indonesia, Japan...
- **Data enrichment for AI agents** - one call through the Apify MCP server answers "how big is this website, and where?"

### Where the data comes from

1. **Chrome UX Report (CrUX) popularity ranks** - Google measures which websites Chrome users actually
   load (opt-in usage statistics) and publishes the top sites every month, worldwide and per country,
   as rank buckets. Research has found it the most accurate public top-sites list
   ([Ruth et al., 2022](https://zakird.com/papers/toplists.pdf)). License: CC BY 4.0.
2. **Majestic Million** - the top 1M root domains ranked by the number of distinct IP subnets linking
   to them, updated daily. License: CC BY 3.0.

Honest limits: CrUX gives **tiers, not exact positions or visit counts** (a site is "in the top 10K",
not "#8,412"), and sites below the top 1M are not listed. This Actor does **not** invent visit
estimates; if you need a number of monthly visits, a paid panel such as Similarweb is the only source.

### Input

| Field | What it does | Default |
|---|---|---|
| `domains` | One per line (commas and spaces also split): `example.com`, a full URL, or a subdomain like `shop.example.com`. Up to 100,000 per run. | `apify.com`, `github.com`, `bbc.co.uk`, `shopify.com` |
| `includeCountries` | Add the full `countryRanks` list (tier in each country where the site is in the top 1M) | `true` |

A subdomain is judged on its own; if Chrome has no data for it, the main site is used and
`matchedLevel` says `domain (subdomain not ranked)`.

```json
{
    "domains": ["notion.so", "canva.com", "https://www.zalando.de/", "tokopedia.com", "mercadolibre.com.ar",
                "shop.lego.com", "rakuten.co.jp", "allegro.pl", "hubspot.com", "semrush.com", "similarweb.com"]
}
```

### Output

Real results of that input (cloud run, 2026-09-23; Chrome data for August 2026):

| Domain | Tier | Chrome rank (world) | Trend | Top countries | Countries in top 1M (of 40) | Majestic rank | Referring subnets |
|---|---|---|---|---|---|---|---|
| canva.com | very high | Top 1K | same | US, IN, BR, ID, JP | 40 | 159 | 46,517 |
| mercadolibre.com.ar | very high | Top 1K | same | AR, ES, CO, CL, MX | 40 | 10,644 | 3,355 |
| allegro.pl | very high | Top 1K | same | PL, DE, GB, NL, UA | 40 | 3,339 | 6,934 |
| www.zalando.de | very high | Top 5K | down | DE, CH, AT, IT, ES | 33 | 13,713 | 2,846 |
| tokopedia.com | very high | Top 5K | same | ID, SG, MY, JP, AU | 40 | 4,634 | 5,566 |
| shop.lego.com | very high | Top 5K | same | US, DE, GB, FR, MX | 40 | 925 | 16,100 |
| rakuten.co.jp | very high | Top 5K | same | JP, KR, TW, SG, CA | 39 | 604 | 20,984 |
| semrush.com | very high | Top 10K | same | US, IN, ID, GB, CA | 40 | 625 | 20,524 |
| hubspot.com | high | Top 50K | up | NG, US, IN, GB, CA | 40 | 187 | 41,317 |
| similarweb.com | high | Top 100K | same | IN, FR, RU, MX, ES | 40 | 1,824 | 10,285 |
| notion.so | medium | Top 1M | down | KR, US, BR, ID, JP | 40 | 754 | 18,230 |

(`notion.so` shows how the data behaves after a move: Notion's main site is now notion.com, so the old
domain has dropped to the top-1M tier while its backlinks - Majestic rank 754 - remain.)

One full item (the `countryRanks` list is shortened here):

```json
{
    "input": "mercadolibre.com.ar",
    "domain": "mercadolibre.com.ar",
    "host": null,
    "ranked": true,
    "popularityTier": "very high",
    "chromeRank": 1000,
    "chromeRankLabel": "Top 1K",
    "chromeOrigin": "https://www.mercadolibre.com.ar",
    "matchedLevel": "domain",
    "chromePreviousRank": 1000,
    "chromeTrend": "same",
    "topCountries": ["AR", "ES", "CO", "CL", "MX"],
    "countriesRankedIn": 40,
    "countryRanks": [
        { "country": "AR", "countryName": "Argentina", "rank": 1000, "label": "Top 1K" },
        { "country": "ES", "countryName": "Spain", "rank": 5000, "label": "Top 5K" },
        { "country": "CO", "countryName": "Colombia", "rank": 5000, "label": "Top 5K" },
        { "country": "CL", "countryName": "Chile", "rank": 5000, "label": "Top 5K" }
    ],
    "majesticRank": 10644,
    "majesticTldRank": 9,
    "referringSubnets": 3355,
    "referringIps": 7269,
    "majesticPreviousRank": 10733,
    "majesticRankChange": 89,
    "chromeDataMonth": "2026-08",
    "majesticDate": "2026-09-23"
}
```

| Field | Meaning |
|---|---|
| `chromeRank` / `chromeRankLabel` | Global Chrome popularity bucket: 1000 = among the 1,000 most visited websites in the world |
| `chromeTrend` | vs. the previous month: `up`, `down`, `same`, `new` (entered the top 1M), `dropped` (left it) |
| `popularityTier` | `very high` (top 10K), `high` (top 100K), `medium` (top 1M), `niche` (top 1M only in some countries), `low` (only linked: Majestic), `unranked` |
| `topCountries` / `countryRanks` | Countries where the site ranks best; same tier = the site's own country TLD first, then larger markets |
| `referringSubnets` / `referringIps` | Distinct /24 subnets and IPs linking to the domain (Majestic) |
| `majesticRankChange` | Positive = moved up since Majestic's previous list |

Countries covered: US, IN, BR, ID, JP, DE, GB, FR, RU, MX, IT, ES, CA, AU, KR, TR, PL, NL, VN, PH, TH, AR,
CO, SA, AE, EG, NG, PK, BD, ZA, UA, SE, CH, BE, AT, TW, MY, SG, IL, CL.

### Pricing

Pay per event: **$0.002 per domain ranked** (plus a $0.00005 start fee).

| Domains | You pay |
|---|---|
| 100 | $0.20 |
| 1,000 | $2.00 |
| 50,000 | $100.00 |

Domains that are in none of the lists come back with `ranked: false` and are **not charged**; invalid
inputs are free too. Set "Maximum cost per run" and the run stops cleanly when it is reached. Runs
are fast: 12 domains took 9 seconds including start-up.

### How it compares

| | This Actor | Similarweb / Semrush scrapers on the Store |
|---|---|---|
| Source | Published open data (CrUX, Majestic) | Scraping paid tools' pages |
| Breaks when the tool changes its site | No | Often |
| Terms of service | Data licensed for reuse (CC BY) | Scraping usually violates the tool's terms |
| Monthly visits number | No (tiers only) | Yes, modelled estimates |
| Countries | Tier in 40 countries | Top 5 countries by share |
| Link signal | Referring subnets / IPs | Varies |
| Price per 1,000 domains | $2 | $2-13 |

### FAQ

**How often is the data updated?** Chrome ranks monthly (published on the second Tuesday for the
previous month), Majestic daily. The date of each source is in every row (`chromeDataMonth`,
`majesticDate`); the Actor is rebuilt with each new Chrome release.

**Why is a well-known site "unranked"?** Because it is below the top 1M in Chrome worldwide and in all 40
countries, and not in the Majestic Million. Very new sites and most small businesses land here - which
is also useful information when you score leads.

**Why is `www.example.com` shown as the origin?** Chrome ranks origins; the Actor checks `www.` and the
bare domain and reports the better one.

**Does it visit the websites?** No. Nothing is fetched from the domains you enter.

### Data licenses

Chrome UX Report data (c) Google, CC BY 4.0, via the monthly CSV mirror
[zakird/crux-top-lists](https://github.com/zakird/crux-top-lists). Majestic Million (c) Majestic-12
Ltd, CC BY 3.0. This Actor is not affiliated with Google, Majestic or Similarweb.

### Related Actors by Kanto Labs

- [Domain Authority Checker](https://apify.com/kantolabs/domain-authority-checker) - 0-100 authority score from the Common Crawl web graph
- [Website Tech Stack Detector](https://apify.com/kantolabs/website-tech-stack-detector) - what the site is built with
- [Company Enrichment - Logo, Socials, Industry & Size](https://apify.com/kantolabs/company-enrichment)
- [Domain Lookup - WHOIS/RDAP, DNS, SSL & Email Security](https://apify.com/kantolabs/domain-whois-dns-ssl-lookup)
- [Topic Trends - Google Trends Alternative](https://apify.com/kantolabs/wikipedia-trends)

# Actor input Schema

## `domains` (type: `array`):

One per line (commas and spaces also split): `example.com`, `https://www.example.com/page` or `shop.example.com`. A subdomain is checked as given, then as www. and bare domain. Up to 100,000 per run; duplicates are removed.

## `includeCountries` (type: `boolean`):

Add `countryRanks`: the domain's popularity tier in each of 40 countries where it is in the top 1M. `topCountries` and `countriesRankedIn` are always included.

## Actor input object example

```json
{
  "domains": [
    "apify.com",
    "github.com",
    "bbc.co.uk",
    "shopify.com"
  ],
  "includeCountries": true
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "domains": [
        "apify.com",
        "github.com",
        "bbc.co.uk",
        "shopify.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("kantolabs/website-traffic-rank").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "domains": [
        "apify.com",
        "github.com",
        "bbc.co.uk",
        "shopify.com",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("kantolabs/website-traffic-rank").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "domains": [
    "apify.com",
    "github.com",
    "bbc.co.uk",
    "shopify.com"
  ]
}' |
apify call kantolabs/website-traffic-rank --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,kantolabs/website-traffic-rank"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/JKf1BZ4zAW8deHndw/builds/OqcE5JXwuvivtDPfW/openapi.json
