# Similarweb Scraper - Website Traffic, Rank & Competitors (`scrapewise/similarweb-scraper`) Actor

Get Similarweb traffic data for any list of domains, no login: global, country and category rank, monthly visits with 3-month history, bounce rate, pages per visit, visit duration, top countries, traffic sources, keywords, competitors and similar sites. Error rows are free.

- **URL**: https://apify.com/scrapewise/similarweb-scraper.md
- **Developed by:** [Scrapewise Data](https://apify.com/scrapewise) (community)
- **Categories:** SEO tools, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.62 / 1,000 website delivereds

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

## Similarweb Scraper: website traffic, rank, engagement and competitors for any domain

Similarweb Scraper returns the **public Similarweb traffic profile of every domain you give it**, without a
Similarweb account, cookies or a browser. Each domain comes back as one clean row: global, country and category rank,
monthly visits with a 3-month history, bounce rate, pages per visit, average visit duration, top countries, traffic
sources, top keywords with CPC, social networks, competitors, similar sites, audience demographics, technologies and
the company behind the site.

It is used for competitor research, market sizing, lead qualification (score a list of company websites by traffic),
SEO and media planning, due diligence on websites and startups, and for tracking how a set of sites grows month after
month.

### At a glance

| What | Price |
|---|---|
| Website delivered | **US$ 1.90 per 1,000 domains** (US$ 0.0019 each) |
| Run start | US$ 0.005 per run |

- 100 domains = **US$ 0.195**. 1,000 domains = **US$ 1.905**.
- Domains Similarweb does not track, invalid inputs, blocked attempts and duplicates are free rows, never charged.
- The US residential proxy Similarweb needs is included in the price.
- `maxItems` is a hard cap, and a spending limit set on the run stops it cleanly with everything delivered so far.

### Quick start

```json
{
  "domains": ["openai.com", "notion.so", "canva.com"]
}
```

A list of company websites, any format, without the similar sites lookup:

```json
{
  "domains": [
    "https://www.shopify.com/pricing",
    "stripe.com",
    "www.figma.com",
    "https://www.similarweb.com/website/airbnb.com/"
  ],
  "includeSimilarSites": false,
  "maxItems": 500
}
```

Links are reduced to their main domain (`https://www.blog.example.co.uk/page` becomes `example.co.uk`), and the same
domain written twice is fetched and charged once.

### Input

| Field | What it does |
|---|---|
| `domains` | Domains or website links, one per line. Similarweb page links are accepted too. |
| `includeSimilarSites` | Adds the page `title` and a `similarSites` list (domain, similarity score, monthly visits, category, description) from a second free source. Default on, no extra charge. |
| `maxItems` | Cap on domains per run (default 50; 0 = no cap). Raise it for longer lists. |
| `proxyConfiguration` | US residential by default. Similarweb allows only a few requests per IP, so the Actor switches to a fresh IP every few domains. |

`startUrls`, `websites`, `urls`, `url` and `domain` are accepted too, so inputs written for other Similarweb tools
keep working.

### Output

One row per domain (`type: website`):

| Field | What it is |
|---|---|
| `domain`, `input` | The domain analyzed and what you typed for it |
| `title`, `description` | Page title and site description (title needs `includeSimilarSites`) |
| `companyName`, `companyFoundedYear`, `companyHeadquartersCountry`, `companyHeadquartersCity` | The company behind the site, when Similarweb knows it |
| `companyEmployeesMin`, `companyEmployeesMax`, `companyRevenue` | Headcount range and revenue range (`min`, `max`, `currency`) |
| `category`, `categoryId` | Similarweb category, readable and as an id |
| `globalRank`, `globalRankChange`, `globalRankHistory` | Worldwide rank, change from last month and the last 3 months |
| `countryRank`, `countryRankCountry`, `countryRankCountryName`, `countryRankChange` | Rank in the site's main country |
| `categoryRank`, `categoryRankChange` | Rank inside its category |
| `totalVisits`, `totalVisitsChange` | Visits in the last month (all devices) and change from the month before (0.0955 = +9.55%) |
| `visitsHistory` | The last 3 months: `month`, `visits`, `changePercent` |
| `bounceRate`, `pagesPerVisit` | Engagement for the last month (0.28 = 28%) |
| `avgVisitDuration`, `avgVisitDurationFormatted` | Average visit in seconds, and as Similarweb shows it (`00:05:40`) |
| `topCountries`, `countriesTotal` | Top 5 countries with `share` and `shareChange`, and how many countries send visits |
| `trafficSources` | Channels in Similarweb's order: `source`, `rank`, `share` (see the note below) |
| `organicSearchShare`, `paidSearchShare` | Split of search traffic between organic and paid |
| `keywordsTotal`, `topKeywords` | Number of keywords sending traffic, and the top 5 with `cpc` (`volume` and `estimatedValue` when present) |
| `socialNetworks`, `socialNetworksTotal` | Top social networks with their share of social traffic |
| `referralSitesTotal`, `topReferralCategories` | How many sites link visitors in, and the categories they belong to |
| `outgoingSitesTotal`, `adSitesTotal`, `adNetworksTotal` | Outgoing link and ad counts |
| `competitors` | Up to 10 most similar sites by audience: `domain`, `affinity`, `category`, `categoryRank` |
| `similarSites` | Similar sites with `similarityScore`, `totalVisits`, `category`, `description` (needs `includeSimilarSites`) |
| `audienceAlsoVisits`, `audienceTopics`, `audienceCategories` | What else this site's visitors browse |
| `demographics` | Age ranges with share, and `male` / `female` share, when Similarweb has them |
| `technologies`, `technologiesTotal` | Technology categories with the top tool in each and its count |
| `dataMonth`, `siteIcon`, `screenshotUrl`, `similarwebUrl`, `scrapedAt` | Month the data refers to, images, the Similarweb page and when the row was made |

**Traffic sources:** the free Similarweb page gives the exact share only for the first channel (usually `direct`).
The other channels come in Similarweb's order with `share: null`, so you still know which channels matter most.

**Visits history:** the last month is Similarweb's own number. The two months before are rebuilt from the monthly
change Similarweb reports, the same way its chart is drawn.

**Small sites:** sites with little traffic get a shorter profile (visits and engagement, often without rank, countries
or keywords). Empty parts come as `null` or `[]`, never as invented numbers.

One real row (lists shortened):

```json
{
  "type": "website",
  "domain": "canva.com",
  "title": "Amazingly Simple Graphic Design Software – Canva",
  "companyName": "Canva",
  "companyFoundedYear": 2012,
  "companyHeadquartersCountry": "AU",
  "companyEmployeesMin": 1001,
  "companyEmployeesMax": 5000,
  "category": "Computers Electronics and Technology > Graphics Multimedia and Web Design",
  "globalRank": 32,
  "countryRank": 53,
  "countryRankCountry": "US",
  "categoryRank": 1,
  "totalVisits": 946234786,
  "totalVisitsChange": 0.0955,
  "visitsHistory": [
    {"month": "2026-07", "visits": 822156490, "changePercent": -5.5},
    {"month": "2026-08", "visits": 863744963, "changePercent": 5.06},
    {"month": "2026-09", "visits": 946234786, "changePercent": 9.55}
  ],
  "bounceRate": 0.2805,
  "pagesPerVisit": 5.9,
  "avgVisitDuration": 340,
  "topCountries": [
    {"country": "US", "countryName": "United States", "share": 0.1961, "shareChange": 0.1063},
    {"country": "BR", "countryName": "Brazil", "share": 0.0715, "shareChange": -0.0331}
  ],
  "trafficSources": [
    {"source": "direct", "rank": 1, "share": 0.6292},
    {"source": "organic", "rank": 2, "share": null},
    {"source": "referrals", "rank": 3, "share": null}
  ],
  "keywordsTotal": 580696,
  "topKeywords": [{"keyword": "canva", "cpc": 0.72, "volume": null, "estimatedValue": null}],
  "socialNetworks": [{"name": "Youtube", "share": 0.3582}, {"name": "Facebook", "share": 0.2129}],
  "competitors": [{"domain": "adobe.com", "affinity": 1.0, "categoryRank": 4}],
  "similarSites": [{"domain": "remove.bg", "similarityScore": 0.6799, "totalVisits": 71184980}],
  "demographics": {"ageDistribution": [{"ageRange": "25-34", "share": 0.2798}], "male": 0.3989, "female": 0.6011},
  "technologies": [{"category": "advertising", "topTechnology": "DoubleClick", "count": 13}],
  "dataMonth": "2026-09",
  "similarwebUrl": "https://www.similarweb.com/website/canva.com/",
  "scrapedAt": "2026-10-17T20:10:00Z"
}
```

### Errors you may see

Every error is a row with `errorCode` and is never charged:

| errorCode | Meaning |
|---|---|
| `INVALID_INPUT` | Not a domain or website link, or a number field with a wrong value |
| `NOT_FOUND` | Similarweb has no data for this domain (too small or not tracked) |
| `BLOCKED` | Similarweb refused every attempt for this domain; run it again in a few minutes |
| `NOT_REACHED` | The run timeout, the spending limit or the cost guard arrived before this domain |

### Integrations, scheduling and AI agents

- **Schedule** the same list monthly in [Apify schedules](https://docs.apify.com/platform/schedules) to build your
  own traffic history for competitors or portfolio companies (Similarweb updates its public data once a month).
- **Export** as JSON, CSV, Excel or XML, or read the dataset from the [Apify API](https://docs.apify.com/api/v2).
- **Connect** it to Make, n8n, Zapier, Google Sheets or your CRM through
  [Apify integrations](https://docs.apify.com/platform/integrations) to enrich a lead list with traffic and rank.
- **AI agents:** call it as a tool through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp)
  in Claude, ChatGPT, Cursor or any MCP client, for example "compare monthly visits, bounce rate and top countries of
  these 10 competitors and tell me who is growing fastest".

### FAQ

**Do I need a Similarweb account?** No. The Actor reads the same public data a logged-out visitor sees on a
Similarweb website page, without login or cookies.

**How fresh is the data?** Similarweb publishes the previous month's numbers early each month. `dataMonth` tells you
which month a row refers to.

**Can I send subdomains or full links?** Yes. Every input is reduced to the main domain before the lookup, so
`https://www.blog.example.com/post` and `example.com` count as the same domain and are charged once.

**Why is the share empty for most traffic sources?** The free page only gives the exact share of the top channel.
The rest come ranked, so the order still shows which channels drive the site.

**How many domains can I send?** Thousands. Raise `maxItems` (or set 0) and the Actor works through the list in
parallel, about 1 to 3 seconds per domain.

**Is it legal?** The Actor reads public, aggregated website statistics and returns no personal data. You are
responsible for how you use the data under the laws that apply to you.

**Something broke or a field is missing?** Open an issue on the Actor page; issues are answered within a day.

### Limitations

- These are Similarweb's public estimates, not the site's own analytics. Use them to compare sites and follow trends.
- The public profile covers the last 3 months; longer history, keyword lists beyond the top 5 and referral domain
  names are behind Similarweb's paid plans and are not returned.
- Very small sites may have no data (free `NOT_FOUND` row) or a shorter profile.
- Similarweb limits how many requests one IP can make, so the residential proxy is needed; with a datacenter proxy
  most domains end as free `BLOCKED` rows.

### Changelog

- **17 Oct 2026:** first version: ranks, monthly visits with 3-month history, engagement, countries, traffic sources,
  keywords, social, competitors, similar sites, demographics, technologies and company data, one row per domain.

# Actor input Schema

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

One per line: a domain like openai.com, a link like https://www.canva.com/pricing, or a Similarweb page link. Each one is reduced to its main domain (www.blog.example.co.uk becomes example.co.uk) and duplicates are removed.

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

Also fill the page title and a list of similar sites with their monthly visits and category, from a second free source. No extra charge.

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

Hard cap on domains per run. Raise it for longer lists; 0 = no cap. Each domain is one row.

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

US residential proxy by default, included in the price. Similarweb allows only a few requests per IP, so the Actor uses a fresh IP every few domains. Change it only if you know you need to.

## Actor input object example

```json
{
  "domains": [
    "openai.com",
    "notion.so",
    "canva.com"
  ],
  "includeSimilarSites": true,
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

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

No description

## `resultsCsv` (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": [
        "openai.com",
        "notion.so",
        "canva.com"
    ],
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapewise/similarweb-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": [
        "openai.com",
        "notion.so",
        "canva.com",
    ],
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapewise/similarweb-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": [
    "openai.com",
    "notion.so",
    "canva.com"
  ],
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call scrapewise/similarweb-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapewise/similarweb-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/48KwYPRt7A3m9qMeZ/builds/aKhaiVtlC3rqi1Sdi/openapi.json
