Similarweb Traffic and Rank Scraper avatar

Similarweb Traffic and Rank Scraper

Pricing

from $0.75 / 1,000 domains

Go to Apify Store
Similarweb Traffic and Rank Scraper

Similarweb Traffic and Rank Scraper

Get public Similarweb data for any domain. You get traffic, rank, engagement, geography and category signals. No Similarweb API key is needed. It tries a direct request first, then a proxy retry if you turn it on.

Pricing

from $0.75 / 1,000 domains

Rating

0.0

(0)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

2

Monthly active users

14 hours ago

Last modified

Share

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.

InputDomains or URLs, up to 100 per run
OutputOne row per domain
Ceiling100 domains per run
Account neededNone, 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
}
FieldDefaultWhat it is
domainsemptyDomains 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.
domainnoneA shortcut when you only want one site. It is added to whatever is in domains.
maxConcurrency3How many domains to fetch at once, 1 to 10. Higher finishes sooner and is more likely to get turned down.
requestTimeoutSecs15How long to wait for each domain, 5 to 30 seconds.
retryWithProxytrueOn. 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.

FieldWhat it is
snapshotDateThe month the numbers describe. This is not the day you ran it, and the gap is usually weeks.
totalVisitsEstimated visits for that snapshot month, across all devices Similarweb counts.
bounceRateA percentage, so 51.85 means 51.85%.
visitDurationAverage time on site in seconds.
trafficSourcesFractions of 1, not percentages, keyed the way Similarweb keys them. GenAi is its own channel.
countrySharesTop countries as fractions of 1, with the ISO numeric code and the two-letter code.
estimatedMonthlyVisitsThe last three months of visit estimates, keyed by month. It is not a full history.
categorySimilarweb's own category path, like science_and_education/science_and_education.
proxyUsedWhether 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.

RowHow to spot itCharged
A snapshotok: true and a snapshotDateyes
The sample row_sample: trueno
A failureok: false and an errorCodeno

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.

errorCodeWhat it means
BAD_INPUTNot a usable public domain. An IP address, a localhost-style name, or credentials in the URL.
REQUEST_FAILEDThe domain has no DNS records, or the request could not be completed. Check the spelling.
SIMILARWEB_NO_METRICSSimilarweb answered normally but published nothing usable for that site. Small and new domains do this.
SIMILARWEB_ENDPOINT_BLOCKEDSimilarweb turned the request down instead of answering. Try again later.
CREDENTIALS_REQUIREDSimilarweb 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 SearchOrganic and a site living on DisplayAds are two different businesses.
  • Watching the GenAi share across a set of sites, which is the one channel that has moved fastest.
  • Pulling countryShares for a shortlist before deciding which market to translate a page into.
  • A monthly scheduled run over the same domain list, joined on domain and snapshotDate, 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 snapshotDate is often the month before last.
  • No history beyond three months. estimatedMonthlyVisits holds 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.com is 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 wantUse
Traffic, ranks and engagement for a domainThis one
Who ranks for a query on GoogleGoogle Search Results Scraper
The same, on YandexYandex Search Engine Scraper
Search interest over time and by regionGoogle Trends Scraper
Image results for a queryGoogle 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.