Similarweb Traffic and Rank Scraper
Get public Similarweb traffic, rank, engagement, geography and category data for any domain. No Similarweb API key needed.
How it works
- 1Open it on Apify
Hit Run on Apify — it opens the tool in the cloud, no install.
- 2Set the inputs
Adjust
domains,domain,maxConcurrency(sensible defaults are pre-filled). - 3Click Run
The tool runs on Apify’s cloud and collects the data for you.
- 4Export the results
Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.
Pricing
$0.0024 per domain = $2.4 per 1,000
| You are charged for | When | Price |
|---|---|---|
| Domain | One domain successfully resolved: global and country rank, visits, traffic sources and engagement. Domains that cannot be resolved are returned but never charged. | $0.0024 |
Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-22, and they are what you are actually charged.
Inputs
| Field | What it does | Type |
|---|---|---|
domains | Public domains or HTTP(S) URLs. Up to 100 domains; duplicates are removed. | array |
domain | Optional shortcut for one domain. | string |
maxConcurrency | Parallel domain requests, 1-10. | integer |
requestTimeoutSecs | Timeout for each Similarweb request, 5-30 seconds. | integer |
retryWithProxy | Retry a blocked or rate-limited direct request through the optional Apify proxy configuration. | boolean |
What you get
A structured dataset — each result includes fields like:
domainokglobalRankcountryRankcategoryRanktotalVisitsbounceRatepagesPerVisitvisitDurationtrafficSourcesproxyUsedretrievedAtExport every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.
Related tools in Developer & Research Tools
Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.
GitHub Scraper
Search GitHub repos and users: stars, forks, language, topics, licence, plus user bio, company and followers. No token needed. $0.90 per 1,000 rows.
Stack Overflow / Stack Exchange Scraper
Search Stack Overflow and Stack Exchange by keyword or tag. Score, answer count, views, reputation and body text. $2 per 1,000 questions.
Package Registry Scraper (npm + PyPI)
Get npm and PyPI package metadata as JSON. Version, license, author, repo, keywords and npm monthly downloads. $2 per 1,000 packages.
arXiv Scraper
Search arXiv papers by title, author, abstract or category. Get full abstracts, authors, categories, DOI, dates and PDF links. $2 per 1,000 papers.
OpenAlex Scholarly Works Scraper
Search 250M+ OpenAlex papers with no API key. Get titles, authors, venue, year, citations, DOI, OA links and full abstracts. $2.00 per 1,000 papers.
Crossref Scholarly Works Scraper
Search 150M+ papers on Crossref: DOI, title, authors, journal, publisher, date, citations and abstract. No API key. $1.00 per 1,000 works.
Where this tool sits
- Categories
- Developer & Research Tools
Similarweb Traffic and Rank Scraper: visits, ranks and traffic mix for any domain
Give it a list of domains and get back the public Similarweb snapshot for each one: global, country and category rank, monthly visits, bounce rate, pages per visit, time on site, where the traffic came from and which countries it came from. No Similarweb account and no API key.
This is the public snapshot, which means it is a monthly figure and it lags. The row tells you which month it describes in snapshotDate, so check that field before you treat a number as current.
| Input | Domains or URLs, up to 100 per run |
| Output | One row per domain |
| Ceiling | 100 domains per run |
| Account needed | None, and no Similarweb API key |
| Price | $2.40 per 1,000 domains on the free plan, down to $0.65 per 1,000 on Diamond |
🔍 What Similarweb Traffic and Rank Scraper does
You paste domains. It normalises each one, drops duplicates, and asks Similarweb's public data endpoint for the snapshot it publishes for that site. What comes back is the same set of numbers you see on a Similarweb site overview page: the three ranks, estimated visits, the four engagement figures, the traffic-source split and the top countries.
Domains are fetched in parallel, three at a time by default, and you can push that to ten. Every domain produces a row whether it worked or not, so a list of 100 gives you 100 rows and you never have to work out which ones silently vanished.
It does not invent numbers. When Similarweb answers with something that is not usable data, the row says so in errorCode and leaves the metrics out rather than filling them with zeros.
📥 What you give it
{
"domains": ["nasa.gov", "github.com", "apify.com"],
"maxConcurrency": 3,
"requestTimeoutSecs": 15
}
| Field | Default | What it is |
|---|---|---|
domains | empty | Domains or full URLs, up to 100. Duplicates are collapsed before anything is fetched, so you are not charged twice for the same site. The box starts with apify.com in it, which is a suggestion and not a default. |
domain | none | A shortcut when you only want one site. It is added to whatever is in domains. |
maxConcurrency | 3 | How many domains to fetch at once, 1 to 10. Higher finishes sooner and is more likely to get turned down. |
requestTimeoutSecs | 15 | How long to wait for each domain, 5 to 30 seconds. |
retryWithProxy | true | On. When a domain's first request comes back refused or rate limited, try that one domain again through the network settings below. It does nothing at all unless you fill those in. |
proxyConfiguration | {"useApifyProxy": false} | Optional and off. Your own servers are used exactly as given. |
IP addresses, localhost, internal suffixes and URLs with credentials in them are rejected before any request goes out, and come back as a BAD_INPUT row.
📤 What you get back
A real row for nasa.gov:
{
"ok": true,
"domain": "nasa.gov",
"globalRank": 1468,
"countryRank": 924,
"categoryRank": 3,
"totalVisits": 22443884,
"bounceRate": 51.85,
"pagesPerVisit": 8.18963223230699,
"visitDuration": 184.2251173400256,
"trafficSources": {
"SearchOrganic": 0.4413234435566554, "Direct": 0.3788197225214602,
"Referrals": 0.0688418871803049, "SocialOrganic": 0.0518356638534659,
"GenAi": 0.02246646486027501, "SocialPaid": 0.014864511434090441,
"Mail": 0.012841142217370817, "DisplayAds": 0.007721402798816594,
"SearchPaid": 0.0010906791330182425, "Affiliate": 0.0001950824445423099
},
"countryShares": [
{ "Country": 840, "CountryCode": "US", "Value": 0.477063909562973 },
{ "Country": 250, "CountryCode": "FR", "Value": 0.0532218179406331 },
{ "Country": 356, "CountryCode": "IN", "Value": 0.04886864781900952 }
],
"category": "science_and_education/science_and_education",
"snapshotDate": "2026-07-01T00:00:00+00:00",
"estimatedMonthlyVisits": { "2026-05-01": 25615117, "2026-06-01": 18046103, "2026-07-01": 22443884 },
"endpointStatus": 200,
"proxyUsed": false,
"retrievedAt": "2026-08-22T04:32:32.199Z"
}
The country list is cut short above; the row carries five.
| Field | What it is |
|---|---|
snapshotDate | The month the numbers describe. This is not the day you ran it, and the gap is usually weeks. |
totalVisits | Estimated visits for that snapshot month, across all devices Similarweb counts. |
bounceRate | A percentage, so 51.85 means 51.85%. |
visitDuration | Average time on site in seconds. |
trafficSources | Fractions of 1, not percentages, keyed the way Similarweb keys them. GenAi is its own channel. |
countryShares | Top countries as fractions of 1, with the ISO numeric code and the two-letter code. |
estimatedMonthlyVisits | The last three months of visit estimates, keyed by month. It is not a full history. |
category | Similarweb's own category path, like science_and_education/science_and_education. |
proxyUsed | Whether that row came from the first attempt or the retry. |
🧾 Reading the output
Every domain you sent produces exactly one row. ok tells you which kind it is.
| Row | How to spot it | Charged |
|---|---|---|
| A snapshot | ok: true and a snapshotDate | yes |
| The sample row | _sample: true | no |
| A failure | ok: false and an errorCode | no |
Run it with no domains at all and you get one labelled sample row, so you can see the shape before you commit a list.
errorCode | What it means |
|---|---|
BAD_INPUT | Not a usable public domain. An IP address, a localhost-style name, or credentials in the URL. |
REQUEST_FAILED | The domain has no DNS records, or the request could not be completed. Check the spelling. |
SIMILARWEB_NO_METRICS | Similarweb answered normally but published nothing usable for that site. Small and new domains do this. |
SIMILARWEB_ENDPOINT_BLOCKED | Similarweb turned the request down instead of answering. Try again later. |
CREDENTIALS_REQUIRED | Similarweb asked for a login for that request. |
Failure rows carry endpointStatus, contentType, bodyBytes and a 300-character bodySnippet, which is usually enough to tell "this site has no data" apart from "Similarweb said no today".
▶️ How to run it
1. Open Similarweb Traffic and Rank Scraper and click Try for free. 2. Put your sites into Domains, one per line. nasa.gov and https://nasa.gov/ both work. 3. Leave Concurrency and Request timeout alone unless a run came back short. 4. Click Start. 5. Download the dataset as JSON, CSV or Excel, or read it from the Apify API.
💰 How much does it cost?
$2.40 per 1,000 domains on the free plan, falling with your Apify plan to $0.65 per 1,000 on Diamond.
You pay per domain that came back with real numbers. Duplicates are removed before anything is fetched, the sample row is not charged, and a domain that came back ok: false is not charged either.
💡 What people use it for
- Sizing a list of prospects before anyone writes to them, so the 200-visit sites and the
20-million-visit sites get different treatment.
- Checking where a competitor's traffic actually comes from. A site living on
SearchOrganicand a
site living on DisplayAds are two different businesses.
- Watching the
GenAishare across a set of sites, which is the one channel that has moved fastest. - Pulling
countrySharesfor a shortlist before deciding which market to translate a page into. - A monthly scheduled run over the same domain list, joined on
domainandsnapshotDate, so you
build the history that the public snapshot does not give you.
🚧 What it does not do
- No live numbers. This is a monthly snapshot and
snapshotDateis often the month before last. - No history beyond three months.
estimatedMonthlyVisitsholds three points and that is all
that is published.
- No keyword data, no paid-search detail, no referring-site list, no audience demographics.
- Small sites often have nothing. Similarweb does not publish estimates for low-traffic domains,
and those come back SIMILARWEB_NO_METRICS rather than as zeros.
- Estimates, not analytics. These are Similarweb's modelled figures, not the site's own numbers,
and they can be well off for any single domain.
- Subdomains and paths are reduced to the domain.
blog.example.comis not looked up separately
from example.com.
- Similarweb can refuse. When it does you get a row saying so, with the status and a snippet of
what came back instead. Those rows are not charged.
- Rows are written at the end of the run, not one by one, so a run that hits its time limit
writes nothing. Keep big lists inside the limit rather than sending 100 slow domains at once.
🧭 Which research scraper do you need?
| If you want | Use |
|---|---|
| Traffic, ranks and engagement for a domain | This one |
| Who ranks for a query on Google | Google Search Results Scraper |
| The same, on Yandex | Yandex Search Engine Scraper |
| Search interest over time and by region | Google Trends Scraper |
| Image results for a query | Google Images Scraper |
❓ Questions people ask
Do I need a Similarweb subscription? No. This reads the public snapshot, so there is nothing to log into and no quota to manage.
Why is the data a month or two old? Because that is what Similarweb publishes publicly. The snapshotDate on every row tells you exactly which month you are looking at.
Why did my domain come back with no numbers? Most often the site is too small for Similarweb to publish an estimate. The errorCode says SIMILARWEB_NO_METRICS and you are not charged for it.
Are the visit numbers accurate? They are estimates from a model, not the site's own analytics. Good for comparing sites against each other, weaker as an absolute figure for any one site.
Can I track a domain over time? Yes. Schedule it monthly and keep domain plus snapshotDate as your key. That is the usual reason people run this on a schedule.
Is this legal? These are public figures on public pages. Apify's write-up on scraping and the law is a good starting point, and we are not lawyers.
🆘 If something breaks
Open the Issues tab on the actor page. Send the domain and the run ID. If you got an ok: false row, its errorCode and bodySnippet usually explain it without anyone digging.