# Similarweb Scraper: Website Traffic Checker & Competitors (`vant47/similarweb-traffic-scraper`) Actor

Check website traffic for github.com or shopify.com: monthly visits, category rank and up to 20 similar sites from Similarweb-powered SimilarSites. Partial data: no reporting month, history or engagement metrics. About $0.0018 per domain; 100 cost $0.18. No login.

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

## Pricing

from $1.44 / 1,000 domains

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 Checker & Competitors

For marketers, SEO agencies and analysts checking lists of domains. Get estimated monthly visits, category rank and up to 20 similar websites from **Similarweb-powered SimilarSites**, without an account.

About **$0.0018 per useful domain**. Checking 100 websites costs about **$0.18**, plus a $0.00005 start charge at the default memory. The three-domain example costs about $0.00545 at list price. Eligible plan discounts reduce the domain price. Competitor suggestions are included in that same price.

**This is a partial-coverage scraper.** It uses Similarweb's public SimilarSites surface. It does not currently retrieve the full Similarweb profile, global or country rank, engagement statistics, visit history, traffic-channel shares, country audience shares or keyword metrics. Those output fields are `null`. The source labels its traffic figure Monthly Visits but does not supply a reporting month, so `dataMonth` is also `null`. Read the source coverage before using this for a dated report.

### What you get

| Field | Meaning |
| --- | --- |
| `verdict` | A readable traffic summary, rounded to two significant figures |
| `recordType` | `DOMAIN`, a free `NOTE`, or the free `SUMMARY` |
| `domain` | The source's canonical website domain when it supplies a redirect |
| `requestedDomain` | The cleaned input domain that produced the result |
| `title`, `description` | The website metadata supplied by the public source |
| `category` | The source's category identifier |
| `monthlyVisits` | Estimated monthly visits, rounded to the nearest whole visit |
| `categoryRank` | The category-rank number shown by SimilarSites |
| `similarSites` | Up to 20 alternative domains, when requested |
| `similarSites[].monthlyVisits` | Each alternative's estimated monthly visits |
| `similarSites[].similarityRank` | Its order in the source's similar-site suggestions |
| `similarSites[].similarityScore` | The raw source Grade value, not the page's rescaled similarity percentage |
| `similarSites[].category` | The alternative's source category |
| `similarSites[].topCountryRank` | A country-rank number when supplied; the country is not identified |
| `dataMonth` | `null`: the reporting month is not supplied |
| `scrapedAt` | The UTC time this result was observed, not its reporting period |
| `coverage` | Always `partial` for this route |
| `source`, `sourceUrl` | The named source and its live SimilarSites page |
| `url` | The corresponding Similarweb website profile link |
| `notes` | Coverage information, including unavailable requested features |

The following fields are retained for a consistent website-traffic schema but are unavailable on this source: `globalRank`, `countryRank`, `country`, `visitsHistory`, `visitsChangePercent`, `bounceRate`, `pagesPerVisit`, `avgVisitDurationSeconds`, `topCountries` and `topKeywords`. `trafficSources` contains `direct`, `search`, `social`, `referrals`, `mail` and `paid`, all with `null` values. A missing value is never replaced with zero or estimated from another metric.

### Use with AI agents (MCP)

Connect an MCP client to `https://mcp.apify.com` and request this Actor by its full name, `vant47/similarweb-traffic-scraper`. A suitable request is: "Check the monthly visit estimates, category rank and similar websites for github.com, shopify.com and apify.com. Tell me which requested metrics are unavailable."

Send the input below and read the `DOMAIN` rows and `SUMMARY`. Preserve the source and coverage notes; do not infer a reporting month or missing engagement statistics.

```json
{
  "domains": ["github.com", "shopify.com", "apify.com"],
  "includeCompetitors": true,
  "includeKeywords": false,
  "maxItems": 3
}
```

### How to use it

1. Add the domains you want to monitor. A full website URL or Similarweb website profile also works; the Actor cleans it to a domain.
2. Choose whether to include similar sites and set the maximum number of useful domain rows. Set an Apify spending limit if you want a firm run budget.
3. Start the run, open the Website traffic dataset view and export JSON, CSV, Excel or another Apify-supported format. Nested competitor lists are easiest to use in JSON.

The default example checks three domains. Larger lists run serially, with about three seconds between source requests. Source delays and retries can increase the duration.

### Inputs

| Input | Default | How to use it |
| --- | --- | --- |
| `domains` | Empty in an API call; three domains in the Console example | Array of domains, website URLs or Similarweb profile URLs |
| `includeCompetitors` | `true` | Return up to 20 similar sites in each useful domain row |
| `includeKeywords` | `false` | Include keywords only when exposed by the free source; currently remains `null` |
| `maxItems` | `100` | Maximum distinct useful domains, from 1 to 10,000 |
| `proxyConfiguration` | Automatic | Datacenter public page first, JSON as an alternative, then residential only if needed |

`github.com`, `https://www.github.com/features` and its Similarweb profile are equivalent inputs. Paths and query strings do not select page-level traffic.

The Console uses a string-list editor for `domains`. Use arrays in API requests. The optional `urls` and `startUrls` array aliases are accepted when `domains` is absent. These aliases do not add separate output units. Duplicate normalized domains are delivered and charged once in a run. Canonical redirects returned by the source are also deduplicated.

```json
{
  "domains": [
    "https://www.amazon.co.uk/",
    "amazon.de",
    "lemonde.fr",
    "abc.net.au",
    "takealot.com"
  ],
  "includeCompetitors": false,
  "maxItems": 5
}
```

Regional domains are separate websites. Estimates are website-wide; this is not a country audience filter.

### Example output from the live source

This shortened example uses values read on 29 October 2026. The live GitHub page displayed 513M monthly visits and category rank 4. The source JSON provided the more precise estimate shown below. Similar-site suggestions may change between runs.

```json
{
  "verdict": "About 510M monthly visits; category rank #4; 20 similar sites. Reporting month unavailable.",
  "recordType": "DOMAIN",
  "domain": "github.com",
  "requestedDomain": "github.com",
  "title": "GitHub · Build and ship software on a single, collaborative platform",
  "category": "Computers_Electronics_and_Technology/Programming_and_Developer_Software",
  "monthlyVisits": 513197610,
  "categoryRank": 4,
  "globalRank": null,
  "countryRank": null,
  "country": null,
  "dataMonth": null,
  "visitsHistory": null,
  "bounceRate": null,
  "pagesPerVisit": null,
  "avgVisitDurationSeconds": null,
  "topCountries": null,
  "topKeywords": null,
  "similarSites": [
    {
      "domain": "stackoverflow.com",
      "monthlyVisits": 69124392,
      "similarityRank": 1,
      "similarityScore": 0.9368279293465819,
      "topCountryRank": 968
    }
  ],
  "coverage": "partial",
  "source": "Similarweb-powered SimilarSites",
  "sourceUrl": "https://www.similarsites.com/site/github.com",
  "url": "https://www.similarweb.com/website/github.com/"
}
```

Use `monthlyVisits` for calculations and retain its undated, estimated status. A competitor's `topCountryRank` has no country code and is not necessarily for your country.

### What is charged

One **Domain** charge covers a distinct useful website result. A result is useful when the source supplies a monthly visit estimate, category rank or requested competitor data. Website metadata alone does not trigger a domain fee. Competitor rows are nested in the same result and have no separate charge. Turning competitors off does not change the domain price.

| Job | Domain charges at list price |
| --- | --- |
| Three-domain example | $0.0054 |
| 100 useful domains | $0.18 |
| 1,000 useful domains | $1.80 |
| Repeated copies of one normalized domain | One domain charge |
| A domain with no useful public data | No domain charge |

Add the small platform start charge to those examples. At default memory it is $0.00005. Bronze has a 5% domain discount, Silver 10%, and Gold and higher 20%. The user does not separately pay the Actor's platform usage. No outside API subscription, API key, account cookies or paid unblocking service is required.

`maxItems` limits useful domain rows. The Apify maximum charge is a separate money limit. The Actor checks the remaining allowance before fetching another domain and stops cleanly when there is no room for another domain charge. A source failure, invalid input or missing record produces a free note. A run that cannot afford a domain may still have the platform start charge.

### Monitor website traffic over time

Save a task with the domain list and create a weekly or monthly Apify schedule from it. Keep the `scrapedAt`, `domain`, `monthlyVisits`, `categoryRank` and `sourceUrl` fields in your destination table. One result per domain per scheduled run gives you a history of observations.

Because the source does not reveal the underlying traffic month, two runs on different dates may contain the same monthly estimate. Do not call collection dates traffic months, sum repeated observations as separate months, or calculate a month-over-month growth rate from them. This Actor returns no historical visit series. It is useful for checking the currently displayed estimate and discovering related websites.

Use a webhook to send the dataset to a spreadsheet, warehouse, Make, Zapier or n8n. Filter numerical reports to `DOMAIN` rows. Keep notes and the `SUMMARY`, which reports delivered domains, duplicates, missing data, invalid inputs, failures and the stopping reason.

### API examples

Keep your Apify API token in an environment variable. The source requires no credentials.

```bash
curl --request POST \
  --header "Authorization: Bearer $APIFY_TOKEN" \
  --header 'Content-Type: application/json' \
  --data '{"domains":["github.com","shopify.com"],"maxItems":2}' \
  'https://api.apify.com/v2/acts/vant47~similarweb-traffic-scraper/run-sync-get-dataset-items'
```

```python
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("vant47/similarweb-traffic-scraper").call(
    run_input={"domains": ["github.com", "shopify.com"], "maxItems": 2}
)
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    if row.get("recordType") == "DOMAIN":
        print(row["domain"], row["monthlyVisits"], row["dataMonth"])
```

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('vant47/similarweb-traffic-scraper').call({
  domains: ['github.com', 'shopify.com'], maxItems: 2,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
const domains = items.filter(row => row.recordType === 'DOMAIN');
console.log(domains);
```

For large lists, start an asynchronous run and read its dataset when finished. Rebooted runs recover completed rows and acknowledged charges without delivering or charging those rows again.

### Reliability and limits

The route is public and signed out. It does not visit the supplied business websites, use account sessions, solve CAPTCHAs or collect individual visitors. A plain HTTPS call reads the JSON embedded in the source's public page. Its own public JSON endpoint is an alternative surface, with fresh-session retries and request pacing. No full browser is needed for the delivered product.

Cloud acceptance on 29 October 2026 returned useful traffic for 35 of 35 domains, across retail, news, software, travel and regional websites. Ten live-page checks matched visits, category rank and competitor order. Money-limit checks delivered one paid domain under a one-domain cap and none below it. A real reboot recovered three unique domains without a second charge. These checks cover the available subset.

Small or new domains may have no data. Metadata can lag website changes. Check canonical redirects using `requestedDomain` and `domain`. Similarity does not verify a business relationship. Country-rank numbers without country labels are not a common-country leaderboard.

### FAQ

#### Is this the full Similarweb profile?

No. It is a working partial route through Similarweb-powered SimilarSites. The output contains monthly visit estimates, category ranks, website metadata and similar-site suggestions when available. The missing profile fields stay null.

#### Why is the reporting month null?

The source does not publish it in this payload or label it on the profile. The observation date is recorded separately. A precise data month must not be inferred from today's date.

#### Does includeKeywords unlock keyword data?

No. It requests keywords only when exposed by the free source. On the current route, `topKeywords` remains null, a coverage note explains why, and there is no extra charge.

#### Are monthly visits unique people or page views?

The source calls the metric Monthly Visits. It is not a unique-visitor count or page-view count. Do not rename the field to either of those measures.

#### Can I request country-specific traffic?

No country filter or audience breakdown is available here. A regional domain such as amazon.co.uk is a separate website input, not a country filter for amazon.com.

#### What happens if the source blocks a request?

The Actor tries the alternative public surface and fresh sessions with ordinary pacing. If no useful record is returned, it writes an uncharged note and continues. Invalid input also becomes a note rather than a failed run.

#### Are duplicates or failed domains charged?

There is no domain fee for either. Duplicate normalized or canonical domains count once in a run. The small platform start charge remains. Separate scheduled runs each deliver a new observation and can each incur a domain fee.

Similarweb scraper, website traffic checker, monthly traffic estimates and competitor websites from a public, signed-out source.

# Actor input Schema

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

Domains or website URLs, such as github.com, shopify.com or https://www.similarweb.com/website/apify.com/. Returns the monthly visit estimate, category rank and similar sites shown by Similarweb-powered SimilarSites. Other metrics stay null. No account or cookies.

## `includeCompetitors` (type: `boolean`):

Include up to 20 similar domains with monthly visit estimates, similarity order and score, category and the country-rank number when shown. Included in the same domain price. No country name is inferred.

## `includeKeywords` (type: `boolean`):

Include keyword metrics only if the free source supplies them. The current SimilarSites route supplies no keyword metrics, so topKeywords stays null and no extra fee is charged.

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

Maximum distinct useful domain rows. Duplicates, no-data domains, errors, notes and the summary have no domain fee. About $0.0018 per useful domain; 100 cost $0.18 plus the small start charge.

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

Optional proxy settings. Default: datacenter public page first, a fresh-session JSON alternative, then US residential page only if needed. Turning Apify proxy off uses direct requests. No unblocking service or CAPTCHA solver.

## `urls` (type: `array`):

Optional API alias for domains, used only when domains is absent. Supply an array of domain or URL strings. Prefer the domains field in the Console.

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

Optional API alias for domains, used only when domains is absent. Supply an array of domain or URL strings. Prefer the domains field in the Console.

## Actor input object example

```json
{
  "domains": [
    "github.com",
    "shopify.com",
    "apify.com"
  ],
  "includeCompetitors": true,
  "includeKeywords": false,
  "maxItems": 3
}
```

# Actor output Schema

## `traffic` (type: `string`):

No description

## `competitors` (type: `string`):

No description

## `summary` (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": [
        "github.com",
        "shopify.com",
        "apify.com"
    ],
    "includeCompetitors": true,
    "maxItems": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("vant47/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": [
        "github.com",
        "shopify.com",
        "apify.com",
    ],
    "includeCompetitors": True,
    "maxItems": 3,
}

# Run the Actor and wait for it to finish
run = client.actor("vant47/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": [
    "github.com",
    "shopify.com",
    "apify.com"
  ],
  "includeCompetitors": true,
  "maxItems": 3
}' |
apify call vant47/similarweb-traffic-scraper --silent --output-dataset

```

## MCP server setup

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