# Similarweb Scraper — Website Traffic, Rankings & Analytics (`crawloop/similarweb-scraper`) Actor

Scrape Similarweb website traffic into JSON: monthly visits, ranks, bounce rate, traffic sources, keywords, and AI referrals. Pull Top Websites lists by country or category. A Similarweb API alternative for Python, Node.js, and MCP.

- **URL**: https://apify.com/crawloop/similarweb-scraper.md
- **Developed by:** [Andrej Kiva](https://apify.com/crawloop) (community)
- **Categories:** SEO tools, Lead generation, Automation
- **Features:** Limited permissions
- **Stats:** 28 total users, 15 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.29 / 1,000 website snapshots

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, Rankings & Analytics

> **Disclaimer:** Unofficial tool — not affiliated with, sponsored by, or endorsed by Similarweb Ltd or its affiliates. Data is read from publicly accessible pages only. No login. You are responsible for complying with applicable law (including GDPR where personal data appears) and the site’s terms. No warranty on accuracy or availability. Provided for informational and research use.

**Similarweb Scraper** ◄── you are here

Scrape **Similarweb website traffic** into structured JSON: **monthly visits**, **visit trend**, **global / country / category rank**, **bounce rate**, **pages per visit**, **visit duration**, **traffic sources** (including **GenAI**), **top countries**, **top keywords**, **AI chatbot referrals**, and public **Top Websites** ranking lists. Paste **domains**, **URLs**, or **Similarweb website URLs**. A practical **Similarweb API alternative** — call from **Python**, **Node.js**, **cURL**, or **Apify MCP**.

**Best for:** Similarweb scraper jobs, website traffic checks, SEO channel mix, competitor ranking, lead scoring, Top Websites market maps, and JSON/CSV datasets for BI or AI assistants.

> **Crawloop digital intelligence** — website traffic here, then app / review siblings.

| Similarweb (website traffic) | Capterra (software reviews) | Google Play (ASO) | Trustpilot (reviews) |
| :--- | :--- | :--- | :--- |
| **Similarweb Scraper** ◄── you are here | [Capterra Scraper](https://apify.com/crawloop/capterra-scraper) | [Google Play Scraper](https://apify.com/crawloop/google-play-scraper) | [Trustpilot Scraper](https://apify.com/crawloop/trustpilot-scraper) |

### When to use this Actor

- You need a **Similarweb scraper** / **website traffic scraper** for one or many domains as JSON
- You want **visits, ranks, sources, keywords, and AI traffic** in a **single website row** (no extra run per data type)
- You pull **Top Websites rankings** by **category** or **country** (50 public sites per list) for market mapping
- You want a **Similarweb API alternative** from Python, Node.js, or an MCP / AI assistant
- You enrich CRM / SEO sheets without a Similarweb login or official API key

### When not to use this Actor

- **Official Similarweb REST / Batch API** multi-year enterprise exports — this Actor reads the **public monthly snapshot**
- **Paywalled Pro-only HTML** (some referral hostnames, company firmographics, demographics)
- **App store ASO** — use [Google Play Scraper](https://apify.com/crawloop/google-play-scraper) or [App Stores Scraper](https://apify.com/crawloop/app-stores-scraper)
- **Consumer reviews** — use [Trustpilot Scraper](https://apify.com/crawloop/trustpilot-scraper)

### Modes

| Mode | What it does |
| :--- | :--- |
| `website` | One Similarweb traffic snapshot per domain (**default**) |
| `ranking` | Public **Top Websites** lists (global / country / category) |
| `both` | Website rows and ranking rows in the same run |

### Key features

- **Full public website snapshot in one row** — visits, 3-month history, ranks, granular traffic sources, keywords, AI traffic split (ChatGPT / Claude / Gemini / Perplexity / Copilot)
- **Top Websites ranking mode** — 50 sites per list with rank change, bounce, pages/visit, duration
- **No Similarweb login or API key** — public website-data snapshot + public ranking pages
- **Bulk parallel domains** — no small per-run domain cap
- **Typed dataset rows** — `website`, `ranking`, `error`
- **Visit trend on every website row** — month-over-month change, 3-month change, and `growing` / `stable` / `declining`
- **Monitor mode** — schedule a monthly run and save only new or changed websites
- **Lead filters** — visits, global rank, top country, and 3-month trend
- **HTTP (no browser)** for the core snapshot — fast enough for bulk SEO and lead-gen lists
- **Export-ready** — download the default dataset as JSON, CSV, Excel, or JSONL

### Input

| Parameter | Description |
| :--- | :--- |
| `mode` | `website` / `ranking` / `both` |
| `websites` | Domains, website URLs, or Similarweb website URLs |
| `categories` / `countries` | Ranking list slugs (`finance`, `united-states`) |
| `includeGlobal` | Worldwide Top 50 |
| `scrapeAllCategories` | Discover and scrape every public category list |
| `maxItems` / `concurrency` | Caps and parallelism |
| `monitorMode` / `monitorStoreName` / `monitorVisitsChangePercent` | Scheduled delta runs (see Monitor mode) |
| `minMonthlyVisits` / `maxMonthlyVisits` / `maxGlobalRank` / `topCountries` / `minVisitsChange3MPct` | Optional lead filters |
| `proxyConfiguration` | Residential recommended for high volume |

#### Website input example

```json
{
  "mode": "website",
  "websites": ["amazon.com", "apify.com", "https://www.similarweb.com/website/shopify.com/"],
  "concurrency": 8
}
```

#### Ranking input example

```json
{
  "mode": "ranking",
  "categories": ["e-commerce-and-shopping", "ai-chatbots-and-tools"],
  "countries": ["united-states"],
  "includeGlobal": true
}
```

### Monitor mode (scheduled runs)

`monitorMode` pushes and charges a website only when it is new or changed since the last run. State lives in a named key-value store (`monitorStoreName`, default `similarweb-monitor`): snapshot date, visits, global / country / category rank, and bounce rate.

The first run is a **baseline**. Every website row is saved with `monitorStatus: "baseline"`. Later runs save a row when:

- the domain is new (`new`)
- `snapshotDate` is a new month (`newSnapshot`)
- monthly visits moved by at least `monitorVisitsChangePercent` (default 5), or `globalRank` changed (`changed`)

Each saved website row includes `previousVisits`, `previousGlobalRank`, `previousSnapshotDate`, `visitsChangeSinceLastRunPct`, and `globalRankChangeSinceLastRun` (positive when the rank improved). A later run that finds nothing to save finishes successfully.

The public snapshot updates monthly. Schedule the Actor for the **3rd day of the month**.

Cron: `0 6 3 * *` (06:00 UTC on day 3).

```json
{
  "mode": "website",
  "websites": ["shopify.com", "notion.so", "apify.com"],
  "monitorMode": true,
  "monitorStoreName": "similarweb-monitor",
  "monitorVisitsChangePercent": 5
}
```

### Lead filters

Filters apply to **website** rows. Leave a field empty to skip that filter. A row is dropped when a set filter's value is missing or outside the range. Dropped rows are omitted from the dataset.

| Filter | Keep the row when |
| :--- | :--- |
| `minMonthlyVisits` / `maxMonthlyVisits` | `visits` is inside the range |
| `maxGlobalRank` | `globalRank` is this number or better (lower) |
| `topCountries` | the site's #1 country code is in the list (`US`, `DE`) |
| `minVisitsChange3MPct` | `visitsChange3MPct` is at least this percent (negative values allowed) |

```json
{
  "mode": "website",
  "websites": ["shopify.com", "notion.so"],
  "minMonthlyVisits": 100000,
  "maxGlobalRank": 50000,
  "topCountries": ["US", "GB", "DE"],
  "minVisitsChange3MPct": 5
}
```

### Output

#### Website traffic fields

| Field | Description |
| :--- | :--- |
| `domain` / `title` / `description` / `category` | Site identity |
| `globalRank` / `countryRank` / `categoryRank` | Popularity ranks |
| `visits` / `bounceRate` / `pagesPerVisit` / `avgVisitDuration` | Engagement |
| `visitsChangeMoMPct` | Latest month vs the previous month, percent (2 decimals; empty when unknown) |
| `visitsChange3MPct` | Latest month vs the earliest month in the series, percent |
| `visitsTrend` | `growing` (≥ +5% over 3 months), `declining` (≤ −5%), or `stable` |
| `estimatedMonthlyVisits` | Last three snapshot months |
| `trafficSources` | Direct, organic/paid search, organic/paid social, referrals, mail, display, affiliate, **genAi** |
| `topCountries` | Traffic share with country names |
| `topKeywords` | Keyword, volume, CPC, estimated value |
| `aiTraffic` | Chatbot split, GenAI visit estimate, referral share |
| `competitors` | Similar sites when the public payload includes them |
| `snapshotDate` / `scrapedAt` | Similarweb month vs scrape time |

#### Website output example

```json
{
  "type": "website",
  "domain": "apify.com",
  "title": "Apify: Full-stack web scraping and data extraction platform",
  "category": "computers_electronics_and_technology/computers_electronics_and_technology",
  "globalRank": 9105,
  "countryRank": 3547,
  "countryRankCountryCode": "IN",
  "categoryRank": 117,
  "visits": 4490242,
  "visitsChangeMoMPct": 1.72,
  "visitsChange3MPct": 1.61,
  "visitsTrend": "stable",
  "bounceRate": 0.3587,
  "pagesPerVisit": 7.47,
  "avgVisitDurationFormatted": "00:05:10",
  "trafficSources": {
    "direct": 0.4288,
    "searchOrganic": 0.3495,
    "searchPaid": 0.0563,
    "genAi": 0.0316
  },
  "topCountries": [
    { "countryCode": "US", "countryName": "United States", "visitsShare": 0.2063 }
  ],
  "topKeywords": [
    { "name": "apify", "volume": 955500, "cpc": 0.98 }
  ],
  "aiTraffic": {
    "totalVisits": 125827,
    "referralShare": 0.028,
    "chatbots": [{ "name": "chatgpt.com", "share": 59.03 }]
  },
  "snapshotDate": "2026-07-01T00:00:00+00:00",
  "hasData": true
}
```

#### Top Websites ranking fields

| Field | Description |
| :--- | :--- |
| `rank` / `rankChange` / `isNewRank` | Position in the public list |
| `domain` / `categoryId` | Ranked site |
| `pagesPerVisit` / `bounceRate` / `avgVisitDurationFormatted` | Engagement on the list |
| `listCountry` / `listCategory` / `listUrl` | Which Top Websites list was scraped |

```json
{
  "type": "ranking",
  "rank": 1,
  "domain": "google.com",
  "categoryId": "computers_electronics_and_technology/search_engines",
  "rankChange": 0,
  "pagesPerVisit": 8.68,
  "bounceRate": 0.285,
  "avgVisitDurationFormatted": "00:09:58",
  "listUrl": "https://www.similarweb.com/top-websites/"
}
```

### Use cases

- **Competitor traffic analysis** — compare visits, sources, and ranks across a domain list
- **SEO channel mix** — organic vs paid vs social vs GenAI referral share
- **Website traffic checker** — bulk-enrich domains before outreach
- **Lead scoring** — attach global rank, monthly visits, and the 3-month trend to CRM accounts
- **Scheduled traffic monitor** — monthly run that returns new snapshots and visit or rank moves
- **Market mapping** — scrape Top Websites for a category or country, then re-run `website` mode on the shortlist
- **AI search monitoring** — track ChatGPT / Claude / Perplexity share in `aiTraffic`

### Integration examples

#### Node.js

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('crawloop/similarweb-scraper').call({
  mode: 'website',
  websites: ['amazon.com', 'apify.com'],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("crawloop/similarweb-scraper").call(
    run_input={"mode": "website", "websites": ["amazon.com", "apify.com"]}
)
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item["domain"], item.get("visits"), item.get("globalRank"))
```

#### cURL

```bash
curl "https://api.apify.com/v2/acts/crawloop~similarweb-scraper/runs?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d "{\"mode\":\"website\",\"websites\":[\"amazon.com\",\"apify.com\"]}"
```

### MCP and AI assistants

Use this Actor from AI tools via [Apify MCP](https://docs.apify.com/platform/integrations/mcp).
Connect your Apify account, then call this Actor by its Store ID / name.

Example prompts:

- "Run Similarweb Scraper for amazon.com and apify.com and return visits, global rank, traffic sources, and AI referrals as JSON"
- "Scrape Similarweb Top Websites for e-commerce-and-shopping in the United States and list the top 20 domains"
- "Chain Similarweb Scraper then [Google Play Scraper](https://apify.com/crawloop/google-play-scraper) for the same brand's web vs app traffic"

### Suite next step

After website traffic, run [Google Play Scraper](https://apify.com/crawloop/google-play-scraper) or [App Stores Scraper](https://apify.com/crawloop/app-stores-scraper) for mobile ASO, or [Capterra Scraper](https://apify.com/crawloop/capterra-scraper) for software-review positioning.

### FAQ

**Is this a Similarweb API alternative?**
Yes for the public monthly snapshot — visits, ranks, sources, keywords, AI traffic, and Top Websites lists — without a Similarweb API key. It is not a replacement for paid multi-year REST/Batch exports.

**How do I scrape Similarweb with Python or Node.js?**
Call `crawloop/similarweb-scraper` with the Apify client (examples above) or from an MCP assistant. Results land in the default dataset; export JSON, CSV, or Excel from the run.

**Website mode vs ranking mode?**
`website` enriches the domains you pass. `ranking` scrapes public Top Websites lists (50 sites each). Use `both` to map a market, then enrich the shortlist.

**Do I need a Similarweb login?**
No.

**Why are some competitor / referral hostnames empty?**
Part of the HTML overview is paywalled. The public snapshot still returns visits, ranks, sources, keywords, and AI traffic.

**Does a zero-traffic domain fail the run?**
No. Other domains continue. Empty snapshots are marked `hasData: false`.

**Can I pass Similarweb URLs?**
Yes — `https://www.similarweb.com/website/example.com/` is normalized to `example.com`.

**How current is the data?**
Public snapshots are monthly. See `snapshotDate` on each website row. `visitsTrend`, `visitsChangeMoMPct`, and `visitsChange3MPct` are computed from that series.

**How do I monitor Similarweb traffic on a schedule?**
Enable `monitorMode` and run on the 3rd of each month (`0 6 3 * *`). The first run stores a baseline. Later runs return new domains, a new monthly snapshot, or visits / global rank moves.

### Related Actors

- [Capterra Scraper](https://apify.com/crawloop/capterra-scraper)
- [Google Play Scraper](https://apify.com/crawloop/google-play-scraper)
- [App Stores Scraper](https://apify.com/crawloop/app-stores-scraper)
- [Trustpilot Scraper](https://apify.com/crawloop/trustpilot-scraper)

# Actor input Schema

## `mode` (type: `string`):

website = per-domain traffic snapshot (visits, ranks, sources, keywords, AI traffic). ranking = public Top Websites lists. both = run both in one job.

## `websites` (type: `array`):

Domains, website URLs, or Similarweb website URLs. Protocol and www are stripped. Used in website and both modes.

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

Category slugs for ranking mode (e-commerce-and-shopping, finance, news-and-media, ai-chatbots-and-tools). 50 sites per list.

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

Country slugs for ranking mode (united-states, germany, united-kingdom, japan). 50 sites per list. Combined with categories when both are set.

## `includeGlobal` (type: `boolean`):

Also scrape the worldwide Top Websites list. Default on when ranking mode has no categories or countries.

## `scrapeAllCategories` (type: `boolean`):

Ranking mode: discover all public category slugs from the Top Websites catalog and scrape each list (~50 sites each).

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

Hard cap on successful website + ranking rows. 0 = unlimited. Failed lookups do not count.

## `concurrency` (type: `integer`):

Parallel domain / list-page fetches.

## `monitorMode` (type: `boolean`):

Scheduled runs push and charge website rows only when the domain is new, the monthly snapshot changed, visits moved by the threshold, or global rank changed. The first run stores a baseline and still returns every website row. Ranking lists are unchanged.

## `monitorStoreName` (type: `string`):

Named key-value store that remembers each domain between scheduled runs. Use a distinct name per watch list.

## `monitorVisitsChangePercent` (type: `integer`):

A website counts as changed when monthly visits moved by at least this percent. Global rank changes always count. 0 counts any non-zero visit move.

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

Keep website rows with at least this many monthly visits. Empty = no minimum. A row with no visit count is dropped when this is set.

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

Keep website rows with at most this many monthly visits. Empty = no maximum. A row with no visit count is dropped when this is set.

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

Keep websites ranked this number or better (a lower rank number). Empty = no cap. A row with no global rank is dropped when this is set.

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

ISO-2 codes. Keep the website when its #1 country in topCountries is in this list. Empty = no country filter.

## `minVisitsChange3MPct` (type: `integer`):

Keep websites whose 3-month visit change is at least this percent. Negative values are allowed, for example -10. Empty = no trend filter. A row with no 3-month change is dropped when this is set.

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

Residential proxies recommended for high-volume runs. Datacenter often works for the public data API.

## Actor input object example

```json
{
  "mode": "website",
  "websites": [
    "amazon.com",
    "apify.com",
    "https://www.similarweb.com/website/shopify.com/"
  ],
  "includeGlobal": false,
  "scrapeAllCategories": false,
  "maxItems": 0,
  "concurrency": 8,
  "monitorMode": false,
  "monitorStoreName": "similarweb-monitor",
  "monitorVisitsChangePercent": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

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

Default dataset items.

# 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 = {
    "websites": [
        "amazon.com",
        "apify.com",
        "https://www.similarweb.com/website/shopify.com/"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawloop/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 = { "websites": [
        "amazon.com",
        "apify.com",
        "https://www.similarweb.com/website/shopify.com/",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("crawloop/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 '{
  "websites": [
    "amazon.com",
    "apify.com",
    "https://www.similarweb.com/website/shopify.com/"
  ]
}' |
apify call crawloop/similarweb-scraper --silent --output-dataset

```

## MCP server setup

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