# Similarweb Website Traffic Scraper (`nice_dev/similarweb-traffic-scraper`) Actor

Scrape Similarweb traffic for any domain or Top Websites list: monthly visits, global, country and category rank, traffic sources, top countries, bounce rate. Export to JSON, CSV or Excel.

- **URL**: https://apify.com/nice_dev/similarweb-traffic-scraper.md
- **Developed by:** [Nice Dev](https://apify.com/nice_dev) (community)
- **Categories:** SEO tools, Marketing, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.61 / 1,000 site with traffic data

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

### 📈 What is Similarweb Traffic Scraper?

**Similarweb Traffic Scraper** extracts **website traffic data from [Similarweb](https://www.similarweb.com)** for any list of domains: **monthly visits and their trend, global, country and category rank, bounce rate, pages per visit, visit duration, traffic sources, top countries, top keywords and AI chatbot traffic**. It works as a **Similarweb API alternative**: no Similarweb account, no API key, no quota to request. Run it on a schedule, call it from your code, or plug it into Make, Zapier or n8n.

Type or paste your **domains** (`apify.com`, any URL of the site, or a file of thousands of them), or let the Actor **discover sites** from the Similarweb **Top Websites** lists of a country or a category, click **Start**, and download one row per site in JSON, CSV or Excel. No login, nothing to set up.

### 📋 What data can you extract from Similarweb?

One row per website, 64 fields:

| Category | What you get |
| --- | --- |
| 🌐 **Website** | domain, title, description, category, favicon and screenshots (desktop and mobile) |
| 📊 **Traffic** | estimated visits of the latest month, the previous months and the change in percent — 3,990,936 visits, −5.01 % |
| 🏆 **Rank** | global rank, rank in its main country, rank in its category — #9,800 worldwide |
| ⏱️ **Engagement** | bounce rate, pages per visit, average visit duration — 7.61 pages, 00:05:17 |
| 🚦 **Traffic sources** | share of direct, organic search, paid search, social, referrals, e-mail, display ads and AI visits, and the main channel |
| 🌍 **Countries and keywords** | countries sending the most visits with their share, organic keywords with search volume and cost per click |
| 🤖 **AI traffic** | visits referred by ChatGPT, Claude, Gemini and other AI assistants, month by month |
| 🗂️ **Top Websites lists** | position of the site in a country or category list, its move since last month, new entries |
| 🔗 **Similar sites** (add-on) | 20 most similar websites with their visits and similarity score, topic tags, mobile apps |
| 📇 **WHOIS and keywords** (add-on) | domain creation and expiry dates, age, registrar, owner when public; most frequent words of the home page |
| 🏢 **Full Similarweb page** (add-on) | company (employees, revenue range, headquarters), top 10 competitors, audience age and gender, referring sites, social networks, ads, technologies |
| ✉️ **Contacts** (add-on) | e-mail addresses, phone numbers and social profiles found on the website itself |

Every field, with an example, is listed in the **Output** section below. The add-on fields stay empty (`null`) unless their checkbox is ticked.

### ✅ Why use Similarweb Traffic Scraper?

- 🧾 **One clean, typed row per site**: shares from 0 to 1, visits as whole numbers, months as dates — ready for a spreadsheet or a database, no nested Similarweb format to decode.
- 🔭 **Discover sites, not only look them up**: the Top Websites list of any country or category (50 sites each, with position and move), or all main categories at once.
- 🗺️ **A whole market from a few seeds**: **Add the similar sites as rows** turns each domain into its 20 closest competitors, each with its full traffic data.
- 🎯 **Filters before you pay**: monthly visits, global rank, visits change, bounce rate, category, main country and excluded words — a site a filter drops is not saved and costs nothing.
- 🔔 **Monthly monitoring built in**: tick **Only new monthly data** and schedule the Actor: a site is returned again only when Similarweb publishes a new month for it.
- 🧩 **Add-ons only when you need them**: similar sites, WHOIS, the full Similarweb page, website contacts and a market comparison, each one unticked by default and charged only when it finds something.
- 🔌 API, scheduling, integrations (Make, Zapier, n8n, Google Sheets…) and JSON/CSV/Excel export via the Apify platform.

### 🚀 How to scrape Similarweb

1. Create a free Apify account.
2. Open **Similarweb Traffic Scraper** and type your websites in **Domains**, one per line (e.g. `apify.com`).
3. Or paste website URLs, Similarweb pages or a link to a text / CSV file of domains into **URLs or a file of domains**, or pick **Top Websites lists by country** or **by category** to discover sites.
4. Set **Max sites** (1,000 by default, 0 = no limit), tick the add-ons you want, then click **Start**.
5. Download the dataset in JSON, CSV, Excel or via API.

### 💰 How much does it cost to scrape Similarweb?

This Actor uses **pay per event** pricing (the same amounts are in the **Pricing** tab). You pay for the rows saved with data, and for each add-on only on the sites where it found something. Every add-on is **unticked by default**.

| What you pay for | Event | Price per 1,000 (Free plan) |
| --- | --- | --- |
| Site row with traffic data (from your list, a Top Websites list or the similar sites added as rows) | `result` | $0.72 |
| 20 similar sites, tags and apps of a site (**20 similar sites**) | `similar-sites` | $1.39 |
| WHOIS record and home page keywords of a domain (**WHOIS and home page keywords**) | `whois` | $1.79 |
| Contacts found on the website (**Contacts from the website**): charged only when at least one e-mail address or phone number is found, never for social profiles alone | `website-contact` | $4.49 |
| Full Similarweb page of a site (**Full Similarweb page**) | `in-depth` | $2.29 |
| Market comparison sheet (**Market comparison of the run**) | `market-stats` | $3.59 |
| Run start | `apify-actor-start` | $0.01 per run |

Higher Apify plans pay less per 1,000 (Bronze / Silver / Gold): `result` $0.68 / $0.65 / $0.61, `similar-sites` $1.38 / $1.37 / $1.36, `whois` $1.78 / $1.77 / $1.76, `website-contact` $4.29 / $3.69 / $3.09, `in-depth` $2.28 / $2.27 / $2.26, `market-stats` $3.19 / $2.89 / $2.69. The run start stays $0.01 per run on every plan.

A site Similarweb has no estimate for (`hasData: false`) is free, and so is a site a filter drops. The WHOIS and Contacts add-ons still look such a site up, and are charged only if they find something. Platform usage (compute, proxy) is included in the price.

Examples (Free plan): 1,000 sites with traffic data and no add-on ≈ $0.73 ($0.72 + $0.01 run start); 100 sites tracked every month with their 20 similar sites ≈ $0.22 a month ($0.072 + $0.139 + $0.01 run start).

### ⚙️ Input

Look up a few websites:

```json
{
    "domains": ["apify.com", "github.com", "similarweb.com"],
    "maxItems": 20
}
```

Discover the most visited sites of two countries and a category, keep the big and growing ones, with their similar sites:

```json
{
    "countries": ["France", "de"],
    "categories": ["ecommerce-and-shopping/marketplace"],
    "minMonthlyVisits": 1000000,
    "minTrafficChangePercent": 0,
    "excludeCategories": ["adult", "gambling"],
    "includeSimilarSites": true,
    "maxItemsPerQuery": 20
}
```

A monthly monitor of your competitors and of their own similar sites:

```json
{
    "domains": ["notion.so", "clickup.com"],
    "expandSimilarSites": true,
    "onlyNew": true,
    "stateKey": "productivity-competitors"
}
```

| Field | Notes |
| --- | --- |
| `domains` | Websites to look up, one per line: a domain (`apify.com`) or any URL of the site (`https://www.apify.com/store` is read as `apify.com`). Similarweb measures whole websites: a sub-domain (`docs.apify.com`) is looked up as written and usually comes back without figures. Duplicates are looked up once. Up to 10,000 per run. |
| `startUrls` | Website URLs, Similarweb pages (`https://www.similarweb.com/website/apify.com/`, `https://www.similarweb.com/top-websites/france/`) or a linked text / CSV file with one domain per line (up to 100,000 domains). |
| `countries` | Top Websites list of a country (name `France`, code `fr`, `united-states` or `world`): its 50 most visited sites. |
| `categories` | Top Websites list of a category or sub-category (`arts-and-entertainment`, `ecommerce-and-shopping/marketplace`): its 50 most visited sites worldwide. |
| `allCategories` | Add the list of every main Similarweb category (up to 1,700 lists per run in all). |
| `expandSimilarSites` | Add the 20 most similar sites of each domain of your list as rows of their own, with `similarToDomain`. |
| `maxItems` | Stop after this many site rows for the whole run (`0` = unlimited). |
| `maxItemsPerQuery` | Cap for EACH Top Websites list and for the similar sites of EACH seed domain (`0` = no cap). |
| `includeNotFound` | Keep a free `hasData: false` row for each site Similarweb has no estimate for (default on). |
| `includeSimilarSites`, `includeWhois`, `includeInDepth`, `includeWebsiteContacts`, `includeMarketStats` | Paid add-ons, all off by default (see What data and Pricing). |
| `minMonthlyVisits`, `maxMonthlyVisits`, `maxGlobalRank` | Only sites within this traffic or rank range (`0` = no limit). A site Similarweb has no estimate for has no figure, category or country: these filters keep it, as a free row, while **Keep sites without data** is on. |
| `minTrafficChangePercent`, `maxTrafficChangePercent`, `maxBounceRatePercent` | Only sites whose visits changed within this range between the last two months, or whose bounce rate is at most this (`10` = 10 %). A site with a single month of data has no change to compare and is left out when a change bound is set. |
| `includeCategories`, `excludeCategories` | Only, or never, the sites whose category contains one of these words (`ecommerce`, `news`, `adult`). |
| `topCountries` | Only sites whose first country by visits is one of these (`us`, `fr`). |
| `excludeKeywords` | Drop the sites whose domain, title or description contains one of these words (`casino`). |
| `onlyNew`, `stateKey`, `resetState` | Monitoring: only the sites whose month of data was never delivered under this memory key; `resetState` forgets the memory. |
| Advanced | `proxyConfiguration` (Apify proxy by default, included in the price; the residential Apify proxy is not available), `maxConcurrency`, `maxRequestsPerMinute`, `minRequestIntervalMs`, `maxRequestRetries`, `debugLog`. |

### 📦 Output

One row, shortened (only the first items of each list, no add-on):

```json
{
    "id": "apify.com",
    "url": "https://www.similarweb.com/website/apify.com/",
    "domain": "apify.com",
    "inputValue": "apify.com",
    "source": "input",
    "listName": null,
    "listPosition": null,
    "hasData": true,
    "title": "Apify: Full-stack web scraping and data extraction platform",
    "category": "Computers Electronics and Technology",
    "globalRank": 9800,
    "countryRank": 9730,
    "countryRankCountryCode": "US",
    "categoryRank": 272,
    "snapshotDate": "2026-09-01",
    "totalVisits": 3990936,
    "visitsChangePercent": -5.01,
    "monthlyVisits": [
        { "month": "2026-08", "visits": 4201537 },
        { "month": "2026-09", "visits": 3990936 }
    ],
    "bounceRate": 0.3595,
    "pagesPerVisit": 7.61,
    "avgVisitDurationSeconds": 317.5,
    "avgVisitDuration": "00:05:17",
    "trafficSources": {
        "direct": 0.4396,
        "organicSearch": 0.341,
        "paidSearch": 0.0556,
        "organicSocial": 0.0484,
        "paidSocial": 0.0021,
        "referrals": 0.0581,
        "mail": 0.0153,
        "displayAds": 0.0056,
        "affiliate": 0.0001,
        "genAi": 0.0341
    },
    "topChannel": "direct",
    "topCountries": [{ "countryCode": "US", "countryName": "United States", "share": 0.2211, "shareChange": null }],
    "topCountryCode": "US",
    "topKeywords": [{ "keyword": "apify", "searchVolume": 798490, "estimatedValue": 888360, "cpc": 1.56 }],
    "aiTraffic": {
        "visits": 123428,
        "share": 0.0341,
        "referralShare": 0.0309,
        "volumeBand": "<1M",
        "chatbots": [{ "name": "chatgpt.com", "share": 66.94 }]
    },
    "isSmallSite": false,
    "isDataFromGoogleAnalytics": false,
    "similarSites": null,
    "whois": null,
    "company": null,
    "websiteEmails": null,
    "scrapedAt": "2026-10-15T09:00:00.000Z"
}
```

You can download the dataset in various formats such as JSON, HTML, CSV or Excel. Shares are from 0 to 1 (`0.3595` = 35.95 %), except the chatbot shares of `aiTraffic`, in percent of the AI visits.

#### All 64 fields

| Fields | What you get |
| --- | --- |
| `id`, `url`, `domain`, `inputValue` | `apify.com`, its Similarweb page, the domain, what you typed |
| `source`, `listName`, `listPosition`, `listRankChange`, `isNewInList` | **Origin**: `input`, `topList` or `similarSite`; the Top Websites list, the position in it and its move, new entry |
| `similarToDomain` | the seed domain of a row added by **Add the similar sites as rows** |
| `hasData`, `isSmallSite`, `isDataFromGoogleAnalytics` | `false` when Similarweb has no estimate; small site; data measured by Google Analytics |
| `title`, `description`, `category`, `categoryId` | **Website**: home page title, meta description, `Computers Electronics and Technology` |
| `globalRank`, `countryRank`, `countryRankCountryCode`, `categoryRank`, `globalCategoryRank` | **Rank**: `9800`, `9730`, `US`, `272` |
| `snapshotDate`, `totalVisits`, `visitsChangePercent`, `monthlyVisits` | **Traffic**: `2026-09-01`, `3990936`, `-5.01`, visits of each recent month |
| `bounceRate`, `pagesPerVisit`, `avgVisitDurationSeconds`, `avgVisitDuration` | **Engagement**: `0.3595`, `7.61`, `317.5`, `00:05:17` |
| `trafficSources`, `topChannel` | **Traffic sources**: share per channel, `direct` |
| `topCountries`, `topCountryCode`, `countriesCount` | **Countries**: code, name, share (and its change with the full page); `US`; number of countries (full page) |
| `topKeywords` | organic keywords: search volume, estimated value, cost per click |
| `aiTraffic`, `aiTopPrompts` | **AI traffic**: visits, share, chatbots and their history; prompts typed in AI assistants when Similarweb shows them |
| `screenshotUrl`, `previewMobileUrl`, `faviconUrl` | desktop and mobile screenshots, icon |
| `similarSites`, `tags`, `relatedApps` | **Similar sites** add-on: 20 sites with similarity score and visits, topic tags, mobile apps |
| `whois`, `keywordDensity` | **WHOIS and keywords** add-on: creation, update and expiry dates, age in days, registrar, name servers, status, owner when public; top words and 2- to 5-word phrases of the home page |
| `company`, `competitors`, `demographics`, `audienceInterests` | **Full page** add-on: company, 10 competitors with affinity and category rank, age and gender, other sites and topics of the audience |
| `rankHistory`, `rankNeighbours`, `rankChange` | **Full page** add-on: rank of the last months, sites ranked just above and below, rank change |
| `searchSplit`, `referrals`, `socialNetworks`, `advertising`, `technologies` | **Full page** add-on: organic / paid search, referring and outgoing sites, social networks, ads, technology stack |
| `isInvalidTrafficData`, `isGoogleAnalyticsDiscrepant` | **Full page** add-on: traffic flagged as invalid by Similarweb, Google Analytics far from the estimate |
| `websiteEmails`, `websitePhones`, `socialLinks` | **Contacts** add-on: e-mail addresses of the site's own domain or company (not a web agency's or a font's credit), phone numbers and social profiles found on the website |
| `scrapedAt` | ISO timestamp of the row |

With **Market comparison of the run**, the `MARKET_STATS` record of the run's key-value store (Output tab) compares the sites of the run: share of visits of each site, leader of each metric, totals and medians, per seed domain and per Top Websites list.

### 💡 Tips

#### How to get more results

Combine the sources: your **Domains**, several **Top Websites lists by country** and **by category**, **All main categories**, and **Add the similar sites as rows** to grow each seed into its market. A site found by several sources is saved — and charged — once. Set `maxItems` to `0` for no limit.

#### How to reduce costs

The price is per site row, so the levers are `maxItems`, `maxItemsPerQuery`, the filters (a site a filter drops is free) and **Only new monthly data** for recurring runs (you never pay twice for the same month of a site). Tick an add-on only when you need its data: each one is charged per site where it found something.

#### Several sources in one run

Each Top Websites list and each seed domain of **Add the similar sites as rows** is a list of its own. Set `maxItemsPerQuery` to give every list its own cap: without it the first lists can use up the whole `maxItems` budget.

#### Monitoring: only the new months

Similarweb publishes one estimate per site per month (`snapshotDate`). Tick **Only new monthly data** (`onlyNew`) and schedule the Actor, monthly or weekly: the first run returns everything; each later run skips the sites whose current month was already delivered — they are not saved and not charged — and returns them again once Similarweb publishes the next month. The memory lives in a named key-value store of your account (`similarweb-traffic-scraper-seen`, up to 150,000 sites per key) and is only updated with sites that really reached the dataset, so a failed run never hides anything. Give each schedule its own `stateKey`, and tick `resetState` once to start over. A site without data (`hasData: false`) is returned once per memory key.

### 🔌 Integrations and API

Call the Actor via the Apify API, the JavaScript or Python clients, or connect it with integrations and webhooks (Make, Zapier, n8n, Google Sheets, Slack, Airtable…). The dataset can be fetched as JSON or CSV from any tool.

### 🤖 Use with AI agents (MCP)

AI agents (Claude, ChatGPT, Cursor…) can find and run this Actor through the [Apify MCP server](https://mcp.apify.com), billed to their Apify account like any run. It returns one row of Similarweb traffic data per website. Actor id: `nice_dev/similarweb-traffic-scraper`; MCP server with this Actor only: `https://mcp.apify.com/?tools=fetch-actor-details,nice_dev/similarweb-traffic-scraper`.

Smallest input, for a cheap first call:

```json
{
    "domains": ["apify.com"],
    "maxItems": 1
}
```

Key output fields: `domain`, `totalVisits`, `visitsChangePercent`, `globalRank`, `category`, `trafficSources`, `topCountries` and `aiTraffic`.

Cost: see the pricing section above (one `result` per site row, add-ons apart). Cap each call with `maxItems` and, through the API, with the run option `maxTotalChargeUsd`.

### ❓ FAQ

#### Is it legal to scrape Similarweb?

The Actor only reads what Similarweb, the domain registries and the websites themselves show publicly to any anonymous visitor. It logs in to nothing. Traffic figures are Similarweb's estimates, not the sites' own numbers. The WHOIS owner and the contacts found on a website can be personal data, which is protected by GDPR: do not store them without a legitimate reason. You are responsible for using the data in compliance with Similarweb's Terms of Use and applicable law. This Actor is not affiliated with Similarweb.

#### Does it need a login or a proxy?

No login, no Similarweb account. The proxy is included in the price: leave the default setting (the residential Apify proxy is not available). A request Similarweb turns away is retried at once on a new proxy session, up to 10 times on top of the retries (without a proxy, after a pause of 5 seconds, doubled at each retry up to 300 seconds).

#### Why does a site have no data?

Similarweb only estimates sites with enough visits. A small, new or unknown domain comes back as a free row with `hasData: false` (untick **Keep sites without data** to leave them out). A domain Similarweb refuses (not a real domain) is listed in the `FAILED_REQUESTS` record of the run.

#### Is the data safe to open in Excel or to show on a web page?

Titles and descriptions are the sites' own words, copied as they are. A text can begin with `-`, `+`, `=` or `@`: Excel and Google Sheets may read such a cell of a CSV file as a formula. The Actor leaves the text as it is, so that the JSON and the API give the real value: when you open a CSV, import these columns as text. On a web page, escape every field like any text written by a stranger.

#### Known limitations

- Traffic figures are Similarweb's monthly estimates: the same for every run of a month, updated when Similarweb publishes the next one.
- A Top Websites list holds 50 sites; Similarweb shows only 5 for a country and a category together, so the two are kept apart.
- `onlyNew` remembers each site's month, not its figures: a site whose figures Similarweb revises within the same month is not returned again.
- Two runs sharing the same `stateKey` at the same time may both return the same site.
- Similarweb sometimes puts its Top Websites lists behind a short browser check: the run then opens a browser by itself and goes on. For such runs, set the run's memory to 2,048 MB or more (Run options > Memory); with less, some lists may fail and are listed in the `FAILED_REQUESTS` record.
- Rows are saved as they arrive, not in list order: sort by `listPosition` to get the order of a Top Websites list. A list asked twice (by its name and by its URL) is read once.
- **Full Similarweb page** opens a browser about once for every 15 sites, so expect the run to be slower than without the add-on. The run's memory is set to 2,048 MB by itself when this option is ticked; if you lower the memory to less than 2,048 MB by hand (Run options > Memory), some pages may come back empty.
- Some domain extensions (`.so`, for example) have no public registry: `whois` is then `null`, and the home page keywords are still given. The add-on is charged only when one of the two is found.

**A run that reaches its timeout** stops itself about 45 seconds before it: no new page is asked, what it read is saved and, with `onlyNew`, remembered, and the run ends *Succeeded* with "Stopped before the run's timeout". Resurrect it to go on from there, or give the next run a longer timeout (Run options).

**A run the platform stops without warning** (out of memory)

- Resurrect it: it goes on from where it stood at most a minute before the stop. What it had read since is read again, and the sites already saved are skipped: none is delivered or charged twice, and `maxItems` still counts them.
- With `onlyNew`, the memory is saved after each write (at most once every 2 seconds): resurrect the stopped run and the sites it had saved meanwhile join the memory; leave it stopped for good, and the next run may return the sites of its last 2 seconds once more.

#### Something doesn't work?

The last line of the log counts the sites saved, filtered out and refused by Similarweb, and the requests that failed after every retry. Those requests are listed, with the reason, in the `FAILED_REQUESTS` record of the run's key-value store. A run that saved nothing and had failed requests fails, and its last message gives the cause.

If Similarweb changes its data, you are told instead of paying for blank rows. If the first 20 sites read from one source (your domains, the Top Websites lists or the similar sites) all lack the same figure (visits, monthly history, traffic sources, month of data, bounce rate, pages per visit, time on site, global rank, top country or rank change), the run saves nothing more, stops and fails, and its last message names the missing field: at most the first 20 sites of each source are charged. Sites Similarweb has no estimate for are free and not counted: the check waits for sites that have one. A smaller run is checked at its end, from 5 sites: its sites are already saved, and the run fails with the missing field instead of ending green. A Top Websites list whose page no longer holds its sites gives no row, costs nothing and is listed in the `FAILED_REQUESTS` record.

### 🛟 Support

Open an issue in the **Issues** tab with a link to your run: the run log and the `FAILED_REQUESTS` record of the key-value store show exactly which domains failed and why.

# Actor input Schema

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

Websites to look up, one per line: a domain (`apify.com`) or any URL of the site (`https://www.apify.com/store` is read as `apify.com`). Similarweb measures whole websites: a sub-domain (`docs.apify.com`) is looked up as written and usually comes back without figures. Duplicates are looked up once. Up to 10 000 per run.

## `startUrls` (type: `array`):

Added to **Domains**. Paste website URLs, Similarweb pages (`https://www.similarweb.com/website/apify.com/` = that site; `https://www.similarweb.com/top-websites/france/` = that Top Websites list) or link a text / CSV file with one domain or URL per line (for long lists).

## `categories` (type: `array`):

Discover sites: each line is a Similarweb category or sub-category (`arts-and-entertainment`, `Computers Electronics and Technology > Programming and Developer Software`, `ecommerce-and-shopping/marketplace`). Each one adds the 50 most visited sites of that category worldwide, with their position in the list and its change, then the traffic data of each site. Kept apart from **Countries**: Similarweb only shows 5 sites for a country and a category together.

## `countries` (type: `array`):

Discover sites: each line is a country (name `France`, code `fr` or `united-states`) or `world`. Each one adds the 50 most visited sites of that country, all categories, with their position in the list and its change, then the traffic data of each site.

## `allCategories` (type: `boolean`):

Add the Top Websites list of every main Similarweb category (about 25 lists of 50 sites) to **Categories**.

## `expandSimilarSites` (type: `boolean`):

For each domain of your list, also add its 20 most similar sites as rows of their own, with their full traffic data and `similarToDomain` = the domain they come from: a whole market from a few seed sites. Each added row is a result (see Pricing). Sites already in the run are not repeated.

## `maxItems` (type: `integer`):

Maximum number of site rows to save for the whole run (after deduplication and filters). 0 = no limit.

## `maxItemsPerQuery` (type: `integer`):

Cap for EACH Top Websites list (up to 50 sites) and for the similar sites added from EACH seed domain (up to 20), so that one list cannot use up the whole **Max sites** budget. 0 = no cap per list.

## `includeNotFound` (type: `boolean`):

Save a row with `hasData: false` for each site Similarweb has no estimate for (too small, too new or unknown), so the output keeps one row per site you gave. These rows are free.

## `includeSimilarSites` (type: `boolean`):

Add to each row its 20 most similar websites (`similarSites`: domain, similarity score, monthly visits, category, top country), a ready-made competitor list, plus the site's topic `tags` and its mobile apps (`relatedApps`). Charged per site that has similar sites, tags or apps (see Pricing). Only for sites Similarweb has figures for.

## `includeWhois` (type: `boolean`):

Add the public registration record of each domain (`whois`): creation, update and expiry dates, domain age in days, days until expiry, registrar, name servers, status; and the most frequent words and 2- to 5-word phrases of its home page (`keywordDensity`). Charged per domain for which one of them is found (see Pricing). Also done for small sites Similarweb has no figures for. Some domain extensions have no public registry: `whois` is then empty and only the keywords are given.

## `includeInDepth` (type: `boolean`):

Read the public Similarweb page of each site and add: company (name, year founded, headquarters, employees, revenue range), top 10 competitors with their affinity and category rank, 3-month rank history and rank neighbours, audience age and gender, interests, number of countries, organic / paid search split, incoming and outgoing referral totals, top social networks, ads totals and recent ad creatives, technology categories. Slower (a browser opens the page). Charged per site whose page is read (see Pricing). Only for sites Similarweb has figures for.

## `includeWebsiteContacts` (type: `boolean`):

Open the home page of each site and up to two of its contact, about or legal pages, and add the e-mail addresses, phone numbers and social links found there, in `websiteEmails`, `websitePhones` and `socialLinks`. Charged once per site for which at least one e-mail address or phone number is found; a site that cannot be opened or gives nothing costs nothing. Also done for small sites Similarweb has no figures for.

## `includeMarketStats` (type: `boolean`):

Adds one record, `MARKET_STATS`, to the run's key-value store (Output tab), worked out from the sites of this run: share of visits of each site, leader of each metric (visits, growth, engagement, AI traffic, each traffic source), totals and medians, then the same per seed domain (with **Add the similar sites as rows**) and per Top Websites list. Charged per sheet (see Pricing).

## `minMonthlyVisits` (type: `integer`):

Only sites with at least this many visits in the latest month. 0 = no minimum.

## `maxMonthlyVisits` (type: `integer`):

Only sites with at most this many visits in the latest month (find small and mid-size sites). 0 = no maximum.

## `maxGlobalRank` (type: `integer`):

Only sites ranked at this position or better worldwide (e.g. 100000 = top 100 000). Sites without a global rank are dropped when this is set. 0 = no limit.

## `minTrafficChangePercent` (type: `integer`):

Only sites whose visits changed by at least this many percent between the last two months (`10` = growing by 10 % or more; `-20` = not falling by more than 20 %). A site without a change to compare (a single month of data) is left out. Empty = no filter.

## `maxTrafficChangePercent` (type: `integer`):

Only sites whose visits changed by at most this many percent between the last two months (`-10` = falling by 10 % or more; `20` = not growing by more than 20 %). A site without a change to compare (a single month of data) is left out. Empty = no filter.

## `maxBounceRatePercent` (type: `integer`):

Only sites whose bounce rate is at most this, in percent (0-100). 0 = no maximum.

## `includeCategories` (type: `array`):

Only sites whose Similarweb category or sub-category contains one of these words (case ignored), e.g. `ecommerce`, `news`, `programming`.

## `excludeCategories` (type: `array`):

Drop the sites whose Similarweb category or sub-category contains one of these words, e.g. `adult`, `gambling`.

## `topCountries` (type: `array`):

Only sites whose first country by visits is one of these (2-letter codes `us`, `fr` or names).

## `excludeKeywords` (type: `array`):

Drop the sites whose domain, title or description contains one of these words (case and accents ignored), e.g. `casino`, `porn`.

## `onlyNew` (type: `boolean`):

Skip the sites whose estimate for the same month (`snapshotDate`) a previous run with the same **Memory key** already delivered: they are not saved and not charged. First run = everything is new.

## `stateKey` (type: `string`):

Name of the memory used by **Only new monthly data**. Give each schedule / task its own key (e.g. `competitors-fr`) so that they do not share their memory. Letters, digits, `-` and `_`.

## `resetState` (type: `boolean`):

Forget everything remembered under this **Memory key** before the run: this run returns (and charges) every site again. Untick it afterwards.

## `proxyConfiguration` (type: `object`):

Apify Proxy or your own proxies. Keep the default: the Actor changes IP address by itself when Similarweb limits one, and that is included in the price. The residential Apify proxy is not available in this Actor.

## `maxConcurrency` (type: `integer`):

Maximum number of requests processed in parallel.

## `maxRequestsPerMinute` (type: `integer`):

Most requests in any 60 seconds, all of them counted. A budget, not an even pace: up to this many can leave at once when the minute starts (spread them with the minimum delay below). Lower it if the log shows HTTP 429 / 403.

## `minRequestIntervalMs` (type: `integer`):

Smallest gap between two requests, in milliseconds. Unlike the per-minute rate, this spreads the requests evenly instead of letting them go out in a burst. 0 = no gap.

## `maxRequestRetries` (type: `integer`):

Retries per request before it is marked as failed. A request that Similarweb turns away is also retried on a new IP address up to 10 times without using up these retries.

## `debugLog` (type: `boolean`):

Include debug messages in the run log.

## Actor input object example

```json
{
  "domains": [
    "apify.com",
    "github.com",
    "similarweb.com"
  ],
  "startUrls": [],
  "categories": [],
  "countries": [],
  "allCategories": false,
  "expandSimilarSites": false,
  "maxItems": 1000,
  "maxItemsPerQuery": 0,
  "includeNotFound": true,
  "includeSimilarSites": false,
  "includeWhois": false,
  "includeInDepth": false,
  "includeWebsiteContacts": false,
  "includeMarketStats": false,
  "minMonthlyVisits": 0,
  "maxMonthlyVisits": 0,
  "maxGlobalRank": 0,
  "maxBounceRatePercent": 0,
  "includeCategories": [],
  "excludeCategories": [],
  "topCountries": [],
  "excludeKeywords": [],
  "onlyNew": false,
  "stateKey": "default",
  "resetState": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "maxConcurrency": 10,
  "maxRequestsPerMinute": 600,
  "minRequestIntervalMs": 0,
  "maxRequestRetries": 5,
  "debugLog": false
}
```

# Actor output Schema

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

No description

## `marketStats` (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",
        "similarweb.com"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("nice_dev/similarweb-traffic-scraper").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",
        "similarweb.com",
    ],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("nice_dev/similarweb-traffic-scraper").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",
    "similarweb.com"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call nice_dev/similarweb-traffic-scraper --silent --output-dataset

```

## MCP server setup

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

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/vNOxUYai2O3SqVhKG/builds/ONXepU9YtyhHyvXff/openapi.json
