# Similarweb Traffic and Rank Scraper (`dami_studio/similarweb-traffic-scraper`) Actor

Collect public Similarweb traffic, rank, engagement, geography, and category signals for domains without a Similarweb API key. Direct first with optional proxy retry.

- **URL**: https://apify.com/dami\_studio/similarweb-traffic-scraper.md
- **Developed by:** [Dami's Studio](https://apify.com/dami_studio) (community)
- **Categories:** SEO tools, Business, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Similarweb Traffic and Rank Scraper

Collect the public, unauthenticated Similarweb traffic snapshot for one or many domains. Each successful row can include global, country, and category ranks; estimated visits; bounce rate; pages per visit; visit duration; traffic sources; country shares; and the category label exposed by Similarweb's public data endpoint.

### Important endpoint limitation

This actor does not use a Similarweb API key. It first calls the legacy public endpoint at `data.similarweb.com/api/v1/data?domain=...`. Similarweb may return a CloudFront/WAF challenge, rate limit, empty response, or require credentials. Those cases become an uncharged diagnostic row with `errorCode`, HTTP status, and proxy-cost notes. The actor never invents traffic metrics from a blocked response.

### Input

| Field | Default | Description |
|---|---:|---|
| `domains` | `[]` | Up to 100 public domains or HTTP(S) URLs. |
| `domain` | empty | Single-domain shortcut. |
| `maxConcurrency` | `3` | Parallel requests, from 1 to 10. |
| `requestTimeoutSecs` | `15` | Per-request timeout, from 5 to 30 seconds. |
| `retryWithProxy` | `true` | When direct access is blocked, retry through the supplied proxy configuration. |
| `proxyConfiguration` | off | Optional Apify proxy. Residential is a reliability fallback, not the default. |

Example:

```json
{
  "domains": ["similarweb.com", "apify.com", "example.com"],
  "maxConcurrency": 3,
  "retryWithProxy": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "countryCode": "CA"
  }
}
```

### Output and billing

One row is written per accepted domain. Empty input returns one labeled `_sample` row and is not charged. Invalid domains, unsafe DNS answers, WAF blocks, rate limits, and no-metric responses are diagnostics and are not charged. A successful metric row emits the PPE event `domain`.

`proxyUsed` and `proxyCostRisk` are included in every row. Residential proxy traffic can cost more than the actor compute, especially when the endpoint challenges and retries requests. For profitable usage, test the user's real proxy group and country with a batch before setting a low per-domain price; do not assume a direct-only margin applies to residential traffic.

### Safety

Only DNS domain names and HTTP(S) URLs are accepted. IP literals, internal/special-use suffixes, credentials, malformed hostnames, and domains resolving to non-unicast addresses are rejected before the Similarweb request. The actor requests only the fixed Similarweb public endpoint; user input is encoded as a domain query value.

### Local verification

```bash
npm install
npm test
npm run test:live -- example.com
```

The live smoke reports endpoint status and returns exit code 2 when Similarweb is blocked or exposes no usable public metrics. That is an endpoint diagnostic, not a fabricated success.

# Actor input Schema

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

Public domains or HTTP(S) URLs. Up to 100 domains; duplicates are removed.

## `domain` (type: `string`):

Optional shortcut for one domain.

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

Parallel domain requests, 1-10.

## `requestTimeoutSecs` (type: `integer`):

Timeout for each Similarweb request, 5-30 seconds.

## `retryWithProxy` (type: `boolean`):

Retry a blocked or rate-limited direct request through the optional Apify proxy configuration.

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

Optional Apify proxy. Residential is recommended only after direct requests are blocked; it can materially increase cost.

## Actor input object example

```json
{
  "domains": [
    "apify.com"
  ],
  "maxConcurrency": 3,
  "requestTimeoutSecs": 15,
  "retryWithProxy": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

Results in the default dataset.

# 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"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("dami_studio/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"] }

# Run the Actor and wait for it to finish
run = client.actor("dami_studio/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"
  ]
}' |
apify call dami_studio/similarweb-traffic-scraper --silent --output-dataset

```

## MCP server setup

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