# Similarweb Alternative — Website Traffic & Rank Analytics (`khadinakbar/similarweb-alternative`) Actor

Return a Similarweb-style traffic report per domain: Google search traffic, rank, top keywords, SEO competitors, and tech stack via DataForSEO. Use for competitor research and lead scoring. Visits stay empty when the Similarweb feed is unavailable. One row per domain at $0.20.

- **URL**: https://apify.com/khadinakbar/similarweb-alternative.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** SEO tools, Lead generation, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $200.00 / 1,000 domain traffic reports

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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 Alternative — Website Traffic & Rank Analytics

Turn a domain or website URL into one dataset row with estimated Google search traffic, ranking distribution, top keywords, SEO competitors, and a public site card. Built for SEO teams, agencies, and agents that need a Similarweb-style report without a Similarweb login. Powered by owner DataForSEO credentials on Apify, with API, schedule, and MCP access. No BYOK.

### Best fit for this Actor

- Score competitor websites on organic traffic, keyword coverage, and overlapping domains, then export JSON or CSV.
- Enrich a lead list with domain rank, public emails, and detected technologies before outreach.
- Feed `organicEtv` and `topKeywords` into a research workflow that later checks live SERPs.

When you need the live Google results those keywords rank on, then use [Google SERP Scraper](https://apify.com/khadinakbar/scrape-google-serp). After you compare interest over time for a brand or category, continue with [Google Trends Scraper](https://apify.com/khadinakbar/google-trends-scraper).

### Practical scenario

A competitive-intel lead pastes `apify.com`. The run returns one row with `organicEtv`, `organicKeywordCount`, `domainRank`, `topKeywords`, and `competitors` for United States English. The lead keeps domains with enough search traffic, then schedules the same input monthly. If DataForSEO's Similarweb feed is offline, `visits` and `globalRank` stay empty and Labs search-traffic fields still populate the report.

### Quick start input

```json
{
  "domains": ["apify.com"],
  "mode": "free_tier",
  "countryName": "United States",
  "languageCode": "en"
}
```

`mode: "free_tier"` processes up to 3 unique domains. `mode: "bulk_paid"` processes up to 25 unique domains per run. Hostnames and full URLs both work; `www.` is stripped.

### Input reference

| Field | Type | What it controls |
|---|---|---|
| `domains` | array | Required websites. Duplicates collapse to one row. |
| `mode` | enum | `free_tier` (3) or `bulk_paid` (25). Default `free_tier`. |
| `countryName` | string | DataForSEO location name. Default United States. |
| `languageCode` | string | DataForSEO language code. Default `en`. |
| `includeCompetitors` | boolean | Include overlapping SEO competitors. Default true. |
| `includeKeywords` | boolean | Include highest-ETV ranked keywords. Default true. |
| `includeTechnologies` | boolean | Include title, domain rank, emails, and tech stack. Default true. |
| `includeSimilarweb` | boolean | Try the DataForSEO Similarweb feed. Default true. |

Owner DataForSEO secrets stay in environment variables. This Actor does not accept a user API key.

### What data you receive

One dataset item is one input domain.

```json
{
  "domain": "apify.com",
  "inputValue": "apify.com",
  "countryName": "United States",
  "languageCode": "en",
  "title": "Apify: The largest marketplace of trusted tools for AI",
  "domainRank": 571,
  "organicEtv": 333243.31,
  "organicKeywordCount": 20415,
  "organicPos1": 189,
  "paidEtv": 0,
  "visits": null,
  "globalRank": null,
  "topKeywords": [{ "keyword": "apify", "searchVolume": 5400, "rank": 1, "etv": 1200 }],
  "competitors": [{ "domain": "github.com", "intersections": 13010, "avgPosition": 11.57 }],
  "technologies": ["Next.js", "React"],
  "similarwebAvailable": false,
  "status": "OK",
  "fetchedAt": "2026-08-21T19:30:00.000Z"
}
```

| Field | Meaning |
|---|---|
| `organicEtv` | Estimated Google organic traffic volume from DataForSEO Labs. |
| `domainRank` | DataForSEO technologies domain rank when the site card is available. |
| `visits` | Similarweb visits when that DataForSEO feed is available; otherwise empty. |
| `status` | `OK` when any useful metric was found; `NO_DATA` when the domain is unmatched. |

`OUTPUT` and `RUN_SUMMARY` in the default key-value store hold `outcome`, `itemsPushed`, `chargedEventCounts`, and `providerCostUsd`. Download the dataset as JSON, CSV, Excel, or HTML.

### Use through the API

```bash
curl -X POST "https://api.apify.com/v2/acts/khadinakbar~similarweb-alternative/runs" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"domains":["apify.com"],"mode":"free_tier","countryName":"United States","languageCode":"en"}'
```

### Use with AI agents through Apify MCP

> Look up a Similarweb-style traffic report for apify.com in the United States. Return domain, organicEtv, organicKeywordCount, domainRank, topKeywords, competitors, similarwebAvailable, status, and fetchedAt. Read OUTPUT.outcome, itemsPushed, and RUN\_SUMMARY.providerCostUsd for cost, scope, and provenance.

Connect via <https://mcp.apify.com>. Start with `free_tier` so agents can confirm the output shape before a bulk\_paid list.

### Connect the workflow

- When you need the live SERP those keywords rank on, then search with [Google SERP Scraper](https://apify.com/khadinakbar/scrape-google-serp).
- After you pick a brand or category to watch, continue with [Google Trends Scraper](https://apify.com/khadinakbar/google-trends-scraper).

### Pricing

Pay per event plus platform usage. Confirm current event prices on the live Pricing tab; that tab is the source of truth if this page ever lags.

- `apify-actor-start`: $0.00005 per run
- `domain-report`: **$0.25** per persisted domain row (`OK` or `NO_DATA`)

A one-domain prefill is about $0.25 in events plus a few seconds of Apify platform usage. Provider cost is recorded in `RUN_SUMMARY.providerCostUsd`. DataForSEO credentials are owner-managed; users are not asked for a key.

### How it works

1. Normalize hostnames and URLs, then cap the list for the selected mode.
2. Optionally POST DataForSEO `/domain_analytics/similarweb/live`. If that feed is unavailable, continue.
3. POST Labs rank overview, optional competitors, optional ranked keywords, and optional technologies.
4. Charge `domain-report` and write one validated row per input domain.

### Best results

- Provide a focused list of public websites you are authorized to research; start with `free_tier` to confirm the output shape.
- Use exact DataForSEO country names such as United Kingdom and language codes such as `en`.
- Treat `organicEtv` as a Google search-traffic estimate. `visits` and bounce rate appear only when the Similarweb feed is available.
- Keep keyword and competitor limits at the defaults unless you have a specific reporting reason.

### Builder's note

I built this as a Similarweb alternative that does not scrape similarweb.com. I found that DataForSEO's Similarweb live feed can return temporarily unavailable while Labs rank overview, competitors, ranked keywords, and technologies still produce a complete report for a live domain in a few seconds. I designed the $0.25 row event around that stack so a one-domain check covers the provider bill, and I left Similarweb visits nullable instead of inventing them.

### Legal and responsible use

Use this Actor on public websites you are authorized to research, follow applicable law plus DataForSEO and Google terms, and keep the output in your own compliance workflow. Search-traffic figures are DataForSEO Labs estimates, not official Similarweb subscription metrics and not Google Analytics.

Issues and feature requests: use the Actor Issues tab on Apify.

# Actor input Schema

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

Websites to score for traffic, rank, keywords, and competitors. Accepts hostnames or URLs such as apify.com or https://www.nytimes.com/section/world. Free tier keeps the first 3 unique domains; bulk\_paid keeps 25. This is not a keyword list — use Keyword Search Volume API for phrases.

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

How many unique domains this run may process. free\_tier is the evaluation cap of 3 domains. bulk\_paid raises the cap to 25 domains per run. Default is free\_tier. This does not switch DataForSEO products — both modes use the same report shape.

## `countryName` (type: `string`):

DataForSEO location name used for search-traffic and keyword context. Use full country names such as United States or United Kingdom. Defaults to United States. This is not a Similarweb country-rank filter when the Similarweb feed is offline.

## `languageCode` (type: `string`):

DataForSEO language code for Labs endpoints, such as en, de, or es. Defaults to en. Keep it aligned with the selected country. This is not a UI locale and does not translate the report.

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

Return overlapping Google organic competitors for each domain. Uses DataForSEO competitors\_domain and skips the target itself. Defaults to true. Turn off to save a DataForSEO call when you only need traffic totals.

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

Return the highest-ETV Google keywords the domain ranks for. Uses DataForSEO ranked\_keywords. Defaults to true. Turn off when you only need traffic and competitor domains.

## `includeTechnologies` (type: `boolean`):

Return title, description, DataForSEO domain rank, public emails, social URLs, and detected technologies. Defaults to true. This is a Domain Analytics technologies lookup, not a full BuiltWith export.

## `includeSimilarweb` (type: `boolean`):

Attempt DataForSEO domain\_analytics/similarweb/live for visits, bounce rate, and global rank. Defaults to true. If that feed is unavailable, the run continues with Labs search-traffic fields and leaves visits empty.

## `keywordLimit` (type: `integer`):

Maximum top keywords stored on each domain row. Default 10, minimum 1, maximum 20. Applies only when includeKeywords is true. This is not a full keyword inventory dump.

## `competitorLimit` (type: `integer`):

Maximum SEO competitor domains stored on each row. Default 8, minimum 1, maximum 20. Applies only when includeCompetitors is true. The target domain is removed before this cap.

## `onPartialFailure` (type: `string`):

return\_partial writes every successful domain and marks the run PARTIAL if others fail. fail\_if\_any\_batch\_fails stops on the first DataForSEO domain error. Default is return\_partial. Invalid hostnames are rejected before this setting applies.

## Actor input object example

```json
{
  "domains": [
    "apify.com",
    "https://www.nytimes.com"
  ],
  "mode": "free_tier",
  "countryName": "United Kingdom",
  "languageCode": "en",
  "includeCompetitors": true,
  "includeKeywords": true,
  "includeTechnologies": true,
  "includeSimilarweb": true,
  "keywordLimit": 10,
  "competitorLimit": 8,
  "onPartialFailure": "return_partial"
}
```

# Actor output Schema

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

Dataset items with domain, organicEtv, keywords, competitors, tech stack, and status.

## `summary` (type: `string`):

Compact OUTPUT record with outcome, itemsPushed, charges, and warnings.

## `runSummary` (type: `string`):

Detailed RUN\_SUMMARY including providerCostUsd and similarwebUnavailable.

# 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("khadinakbar/similarweb-alternative").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("khadinakbar/similarweb-alternative").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 khadinakbar/similarweb-alternative --silent --output-dataset

```

## MCP server setup

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

```

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/me5BfzNdGDwrH5Jbd/builds/MDag2g1FGSXoQglKr/openapi.json
