# Similarweb Pro Scraper (`agentx/similarweb-pro-scraper`) Actor

Export Similarweb website traffic, SEO, audience, advertising and backlink data for competitor research and agency reporting. Choose from 27 report pages and get period-labelled records with JSON files for large reports.

- **URL**: https://apify.com/agentx/similarweb-pro-scraper.md
- **Developed by:** [AgentX](https://apify.com/agentx) (community)
- **Categories:** SEO tools, Lead generation, Automation
- **Features:** Limited permissions
- **Stats:** 117 total users, 43 monthly users, 70.6% runs succeeded, 2 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.015 / website result

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 Pro Scraper

Export Similarweb website traffic, SEO, audience, advertising and backlink data for competitor research and agency reporting. Choose from 27 report pages and get one website result with period-labelled records, item counts and JSON files for large reports.

[Open input](https://console.apify.com/actors/E4aGcMycvf3cTbkgm/input) | [Pricing](https://apify.com/agentx/similarweb-pro-scraper/pricing)

### Why Choose Similarweb Pro Scraper

- **Research a domain in one place.** Combine selected traffic, SEO, audience and advertising reports under one website identity.
- **Choose the reports for your job.** Start with traffic engagement and social sources, then add keywords, landing pages or backlinks for deeper research.
- **Keep reporting periods attached.** Section records carry `period_start` and `period_end` for comparable reporting.
- **Use the data in your workflow.** Export nested JSON and retrieve large-report files through `report_context[report_key].file_url`.

### Quick Start Guide

Use the prefilled website and report selection for a first run.

#### 1. Configure

Enter `apify.com` in Website and select `traffic_engagement`, `social`, and `display_campaigns` in Reports. A website URL is normalized to its domain with a leading `www.` removed, so `https://www.apify.com/store` requests `apify.com`. The result's `website` field uses that normalized domain.

Use these two inputs for your first run:

```json
{"website":"apify.com","reports":["traffic_engagement","social","display_campaigns"]}
```

#### 2. Run

Start the Actor and wait for the run to finish. Collection time depends on the selected reports, available history and volume of source data. For a broader analysis, add further report pages in a subsequent run after reviewing the first result.

#### 3. Collect

Open the Dataset and export the website result as JSON. Inspect the selected top-level report fields and their entries in `report_context`. Retrieve each non-null `report_context[report_key].file_url` and save it with the Dataset export.

### Input Configuration

The input parameters are `website` and `reports`, both required and shown in that order. The form prefills the example below; supply both values in automated runs.

| Parameter | Type | Required | Description                                                                               | Example                                                 |
| --------- | ---------------- | -------- | ----------------------------------------------------------------------------------------- | ------------------------------------------------------- |
| `website` | string | Yes      | One public domain or website URL; a leading `www.` is removed from the normalized domain. | `apify.com`                                             |
| `reports` | array of strings | Yes      | One or more of the 27 report-page selections. Duplicate selections are combined.          | `["traffic_engagement", "social", "display_campaigns"]` |

```json
{
  "website": "apify.com",
  "reports": ["traffic_engagement", "social", "display_campaigns"]
}
```

#### Report pages

The report keys match the Reports selector exactly. Available items vary by website, source coverage and reporting period.

| Report key             | Content |
| ---------------------- | ------------------------------------------------------------------------------------------------ |
| `website_performance`  | Profile, engagement, devices, rankings, traffic trend, visits, geography and channels. |
| `similar_sites`        | Similar-site candidates. |
| `traffic_engagement`   | Engagement, device metrics, rankings, traffic trends, new and returning users, and visit totals. |
| `marketing_channels`   | Marketing sources, channel shares, trends and changes. |
| `audience`             | Geography, demographics, interests and age/gender audience sections. |
| `search_overview`      | Search traffic, volume, brand split and keyword distribution. |
| `referral`             | Referring and outgoing websites, plus referral trends. |
| `advertiser_overview`  | Advertising metrics, counts and graph observations. |
| `publisher_overview`   | Publisher metrics, advertisers and totals. |
| `social`               | Social sources and trends. |
| `seo_overview`         | Search summaries, trends, SERP features and ranking trends. |
| `keywords`             | Organic keywords and keyword summary selections. |
| `keyword_clusters`     | Keyword topic clusters. |
| `landing_pages`        | Organic landing-page snapshots by available month. |
| `search_competitors`   | Search competitors and overlap measures. |
| `ranking_distribution` | Ranking trends and US keyword/position tables. |
| `ai_traffic`           | AI assistant contributions and AI landing pages. |
| `paid_keywords`        | Paid keywords and paid-search summary selections. |
| `paid_landing_pages`   | Paid landing-page snapshots and summary measures. |
| `search_ads`           | Text search ads and search campaigns. |
| `display_campaigns`    | Display campaign records. |
| `display_ads`          | Display creative records. |
| `display_publishers`   | Display publishers and reach. |
| `advertiser_activity`  | Advertising channels, trends and geography. |
| `backlinks_overview`   | Backlink summary, trend and changes. |
| `referring_domains`    | Referring-domain records. |
| `backlinks`            | Individual backlink records. |

#### Reporting periods and coverage

Reporting windows are selected from the source's available history. Similar-site and search-competitor sections use up to the latest three available months. Organic and paid landing pages, US ranking keywords and position tables are collected as individual available monthly snapshots. Backlink trends use their own source reporting window.

Available history can move between runs. Compare the saved period labels as well as item counts when reviewing a website over time.

Marketing comparison sections use the complete month before the available reporting window's end month. A comparison outside that calendar is reported unavailable.

Each paginated list returns at most the first 1,000 distinct source entries per section and reporting period, in source order. This applies to keywords, landing pages, referring domains, backlinks, paid lists, marketing sources and the other paginated sections. The limit applies to each underlying section, so a report with several sections or monthly snapshots can contain more than 1,000 items in total. Reaching this limit completes the selected list scope; billing follows the items actually delivered.

General traffic analysis uses worldwide coverage; the US keyword and position sections use US data. Read each section and period in its own context when comparing measures. An undated section carries `null` period boundaries.

### Output Data Schema

One Dataset row represents one website and its selected report pages. Selected report keys appear directly on the row; unselected report fields are omitted.

| Root field                                                                           | Type | Description                                                                                                                                                   |
| ------------------------------------------------------------------------------------ | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `website`                                                                            | string | Website identified by the source, or the requested domain for a definitive `not_found` result.                                                                |
| Selected report keys, such as `traffic_engagement`, `social` and `display_campaigns` | object | Each inline object maps section names to record arrays. A null report may be file-backed or unavailable; inspect its context.                                 |
| `report_context`                                                                     | object | Per-report storage, file link, item count, and section statuses, counts and periods.                                                                          |
| `item_count`                                                                         | integer | Distinct delivered source-section items, counted once when reports overlap; used for report-item billing. It can differ from the number of displayed records. |
| `status`                                                                             | string, when present | `not_found` identifies definitive source absence; this row has no Website Result or Report Items charge.                                                      |
| `processor`                                                                          | string | Apify actor URL that processed this record.                                                                                                                   |
| `processed_at`                                                                       | string | UTC timestamp when this record was processed.                                                                                                                 |

An identified website whose selected reports are conclusively empty also returns one free `not_found` row, with no report data. If the requested website data cannot be obtained, no answer row is returned. File-backed profile records retain the same title, description, category, employees, founding year and tags as inline records.

An empty response alone does not confirm absence. When the source's empty or zero-data answer cannot be confirmed, no answer row is saved.

Each inline report section is a record array, with `period_start` and `period_end` on each record. An empty array means no mapped records for that section; a null section means its data is unavailable. For a file-backed report, the top-level report value is null, `report_context[report_key].storage` is `file`, and `file_url` links to the report's full section object. A null report without a file link is unavailable.

`report_context[report_key].sections` lists each section's period, item count and collection status: `complete`, `empty`, `unavailable`, `not_started`, or a partial outcome such as `source_window`, `rate_limited` or `partial`. `complete` means collection finished for that section within its declared selection limit; `empty` means no items were returned for that section, although source summary metrics can remain. Partial outcomes retain the records read before collection stopped. These statuses do not establish exhaustive source coverage. Context counts describe displayed records; the root `item_count` counts distinct source items and can differ. Check the saved data and run status message together, including when the platform run succeeds.

Unfinished sections retain partial status and the records collected. Check the saved website row and `report_context` before using a report in downstream analysis. An unidentified website with only zero, missing or provider-placeholder data has no paid row or report-item charge.

#### Business fields

Report records contain the business fields relevant to their section: keywords include search measures; campaign records include advertising measures; numeric observations use `metric`, `dimensions` and `value` or `series_values`. Missing fields may be absent or `null`; genuine zero and false values remain intact.

| Example item field | Description |
| ------------------ | ------------------------------------------------------------------------------------------------ |
| `monthly_visits`   | Source estimated monthly website visits; profile and engagement may use different source models. |
| `visit_duration`   | Average visit duration in seconds. |
| `visit_pages`      | Average pages per visit. |
| `spend`            | Source estimated advertising spend; interpret the source unit without assuming a currency. |
| `cpc`              | Source estimated cost per click; interpret the source unit without assuming a currency. |
| `parent_entity`    | Source parent domain or advertising entity of a group member. |
| `site_metrics`     | Source per-website keyword clicks, shares, SERP features and top destinations. |

The Dataset schema declares 33 top-level fields and 28 views; individual report objects have section-specific business fields. Shares retain their source scale. Evaluate a measure together with its section, dimensions and period; group aggregates and group members describe different levels of the same population.

#### Complete record field reference

Fields apply to the sections that supply them; a report does not populate every field. Missing facts remain null or absent. Counts and measures are source estimates where applicable. Shares and changes retain the source scale: their names alone do not establish a denominator or comparison period.

In a profile, `country_id` identifies the traffic-ranking scope, rather than the company's location. `top_country` is the source identifier of the highest-traffic country.

| Record field | Type | Meaning |
| --- | --- | --- |
| `active_days` | number | Active day count. |
| `active_months` | array | Active months. |
| `ad_count` | number | Advertisement count. |
| `ad_id` | number / string | Source record identifier. |
| `ad_type` | string | Advertisement type. |
| `affinity` | JSON value / number | Website affinity score. |
| `anchor_text` | string | Source backlink anchor text. |
| `assistant_shares` | array / boolean / number / object / string | Source traffic shares by AI assistant. |
| `assistant_split` | array / boolean / number / object / string | AI-assistant split in the source representation. |
| `assistant_visits` | object | Source visit counts by AI assistant. |
| `average_volume` | number | Average search volume. |
| `backlink_count` | number | Backlink count. |
| `bounce_rate` | number | Bounce rate. |
| `campaign_id` | number / string | Source record identifier. |
| `category` | JSON value / string | Category. |
| `category_rank` | integer / number / string | Category rank. |
| `change` | JSON value / number | Monthly click change; traffic change; visit change. Retains the source scale and period. |
| `change_state` | string | Source click-change label, such as New, Lost, Positive, Negative, NoChange or NoData. |
| `channel` | JSON value | Marketing channel. |
| `clicks` | number | Click count. |
| `clicks_change` | number | Click change. Retains the source scale and period. |
| `clicks_trend` | array / boolean / number / object / string | Source click observations indexed by date or source label. |
| `competition` | number | Keyword competition. |
| `country_id` | number / string | Source country identifier; not necessarily an ISO code. |
| `country_rank` | integer / number / string | Country rank. |
| `cpc` | number | Estimated cost per click; currency is not inferred. |
| `cpc_high` | number | High-bid cost-per-click estimate; currency is not inferred. |
| `cpc_low` | number | Low-bid cost-per-click estimate; currency is not inferred. |
| `creative_count` | number | Creative count. |
| `creative_id` | number / string | Source record identifier. |
| `creative_type` | string | Creative type. |
| `date` | string | Source observation date or date label; no timezone is inferred. |
| `dedup_users` | number | Average monthly deduplicated user count. |
| `description` | JSON value / string | Description. |
| `desktop_clicks` | number | Desktop click count. |
| `destination_url` | string | Source advertisement destination. |
| `difficulty` | number | Keyword difficulty. |
| `domain` | JSON value / string | Source domain. |
| `domain_authority` | number | Domain authority score. |
| `domain_score` | number | Domain score. |
| `employees` | JSON value | Source employee-count range as text. |
| `engagement_score` | number | Engagement score. |
| `filtered_share` | number | Filtered traffic share. Retains the source scale and period. |
| `first_seen` | string | Source first-seen date or date/time label; no timezone is inferred. |
| `follow_pages` | number | Follow referring page count. |
| `founded` | string | Source founding year, represented as text. |
| `global_rank` | JSON value / integer / number / string | Global rank. |
| `has_adsense` | JSON value / boolean | Has ad sense. |
| `image_size` | string | Source creative image dimensions as text. |
| `image_url` | string | Source image link; no separate image download is promised. |
| `impressions` | number | Impression count. |
| `impressions_change` | number | Impression change. Retains the source scale and period. |
| `impressions_new` | boolean | Has new impressions. |
| `impressions_share` | number | Impression share. Retains the source scale and period. |
| `industry` | JSON value | Source industry taxonomy, with identifiers and category paths. |
| `is_broken` | boolean | Is broken. |
| `is_image` | boolean | Is image. |
| `is_lost` | boolean | Is lost. |
| `is_new` | JSON value / boolean | Is new. |
| `is_subdomain` | boolean | Is subdomain. |
| `keyword` | string | Keyword. |
| `keyword_count` | number | Keyword count. |
| `keyword_overlap` | array / boolean / number / object / string | Keyword overlap. |
| `large_image_url` | string | Larger source image link, when supplied. |
| `last_seen` | string | Source last-seen date or date/time label; no timezone is inferred. |
| `lost_backlinks` | number | Lost backlink count. |
| `lost_domains` | number | Lost referring domain count. |
| `monthly_visits` | number | Estimated monthly visits. Profile snapshots and engagement averages use separate source models. |
| `name` | JSON value / string | Title. |
| `network` | string | Social network. |
| `new_backlinks` | number | New backlink count. |
| `new_domains` | number | New referring domain count. |
| `nofollow_pages` | number | No follow referring page count. |
| `organic_clicks` | number | Organic click count. |
| `organic_share` | number | Organic click share. Retains the source scale and period. |
| `overlap` | JSON value | Same day cross visitation rate. |
| `overlap_change` | JSON value | Cross visitation change. Retains the source scale and period. |
| `page_score` | number | Page score. |
| `page_url` | string | Source landing-page URL. |
| `page_views` | number | Average monthly page view count. |
| `parent_domain` | string | Parent domain. |
| `position` | number | Search position. |
| `previous_clicks` | number | Previous click count. |
| `previous_position` | number | Previous search position. |
| `previous_share` | number | Previous click share. Retains the source scale and period. |
| `primary_intent` | string | Primary search intent. |
| `publisher_count` | number | Publisher count. |
| `rank` | number | Backlink rank. |
| `referring_domains` | number | Referring domain count. |
| `referring_pages` | number | Referring page count. |
| `referring_url` | string | Source page containing the backlink. |
| `related_apps` | JSON value / object | Applications grouped by store; groups contain app records or source store values. |
| `relevancy_rank` | JSON value | Audience relevance rank. |
| `relevancy_score` | JSON value | Audience relevance score. |
| `search_volume` | number | Search volume. |
| `secondary_intent` | string | Secondary search intent. |
| `serp_date` | string | Source search-results observation date or label. |
| `serp_features` | array | Search features. |
| `serp_type` | string | Search feature. |
| `share_split` | array / boolean / number / object / string | Share split in the source representation. |
| `share_trend` | array / boolean / number / object / string | Source share observations indexed by date or source label. |
| `site_metrics` | array / object | Per-website keyword observations, including clicks, shares, search features and destination pages. |
| `site_shares` | JSON value / array / boolean / number / object / string | Source per-website shares, keyed by website. |
| `spend` | number | Estimated advertising spend; currency is not inferred. |
| `spend_change` | number | Advertising spend change. Retains the source scale and period. |
| `spend_new` | boolean | Has new spend. |
| `spend_share` | number | Advertising spend share. Retains the source scale and period. |
| `tags` | JSON value | Tags. |
| `title` | JSON value / string | Title. |
| `top_country` | JSON value / number / string | Source identifier of the highest-traffic country. |
| `top_keyword` | string | Top keyword. |
| `top_url` | string | Top page URL. |
| `topic_id` | number / string | Source record identifier. |
| `total_share` | JSON value / number | Total traffic share. Retains the source scale and period. |
| `total_traffic` | array / boolean / number / object / string | Total traffic. |
| `traffic` | array / boolean / number / object / string | Traffic. |
| `traffic_share` | JSON value / number | Advertising visit share; click share; traffic share; traffic source visit share; visit share. Retains the source scale and period. |
| `unique_users` | number | Average monthly unique user count. |
| `url_count` | number | Url count. |
| `users_share` | number | User share. Retains the source scale and period. |
| `video_url` | string | Source video link, when supplied; no video download is promised. |
| `visit_duration` | number | Average visit duration, in seconds. |
| `visit_frequency` | number | Visits per user. |
| `visit_pages` | number | Average pages per visit. |
| `visits` | JSON value / number / string | Visit count. |
| `visits_change` | number | Advertising visit change. Retains the source scale and period. |
| `visits_new` | boolean | Has new visits. |
| `visits_trend` | array / boolean / number / object / string | Source visit observations indexed by date or source label. |
| `volume_state` | string | Source search-volume change label. |
| `zero_share` | number | Zero click rate. Retains the source scale and period. |
| `metric` | string | Source numeric-measure name; interpret with its section and dimensions. |
| `dimensions` | array | Labels aligned to the numeric observation or series. |
| `value` | number | Source numeric observation; the unit follows its metric. |
| `series_values` | array / object | Source numeric series; preserve its labels and scale. |
| `total_count` | number | Source aggregate count for this section, separate from delivered website rows. |
| `source_facets` | object / array | Source facet labels, identifiers and counts. |
| `top_source_facets` | object / array | Source leading facet labels, identifiers and counts. |
| `source_segments` | object / array | Source segment definitions or counts. |
| `categories` | array | Category counts; nested entries may contain category, count, id and categories. |
| `entity_scope` | string | Whether the record is a source group or a member. |
| `parent_entity` | string | Parent website or advertising entity for a member record. |
| `page_group` | JSON value | Source AI landing-page group. |
| `landing_id` | string / number | Source landing-page identifier. |
| `display_path` | string | Source ad display path when no destination URL is available. |
| `period_start` | string | Start of this record's source reporting period. |
| `period_end` | string | End of this record's source reporting period. |

Nested `site_metrics` records use `site` (website), `value` (click count), `share`, `previous_share`, `serp_features` and `top_url`. A website or date can also be an object key. `industry` records use `id` and `path`. Application records in `related_apps` use `store`, `id`, `title`, `author`, `icon`, `category`, `price`, `rating` and `ratecount`; prices remain source text and store-specific values can vary. Additional source business fields can appear under normalized field names, retaining their value types. Do not infer a new meaning or unit for such a field.

Each report context has `storage` (`inline`, `file` or `unavailable`), `file_url` (string or null), `item_count` (integer displayed-record count) and `sections` (object keyed by section). With `unavailable` storage, the report and `file_url` are null. Section period records contain `status` (`complete`, `empty`, `partial`, `not_started` or a specific unavailable/error state such as `schema_changed` or `rate_limited`), `item_count` (integer), `period_start` and `period_end` (string or null). A section can retain valid records while its status reports incomplete collection. A report file contains the same section arrays as inline delivery.

| Nested record field | Type | Meaning |
| --- | --- | --- |
| `site_metrics.*.site` | string | Website associated with a keyword observation. |
| `site_metrics.*.value` | number | Source click count for that website. |
| `site_metrics.*.share`, `previous_share` | number | Current and comparison traffic shares at the source scale. |
| `site_metrics.*.serp_features` | array | Source search-result feature labels. |
| `site_metrics.*.top_url` | string | Source leading destination page. |
| `industry.id` | string, number | Source taxonomy identifier. |
| `industry.path` | array | Source category hierarchy. |
| `related_apps.<store>.*.store` | string or number | Source application-store identifier. |
| `related_apps.<store>.*.id` | string or number | Source application identifier. |
| `related_apps.<store>.*.title`, `author` | string | Application title and source publisher name. |
| `related_apps.<store>.*.icon` | string | Source application image link. |
| `related_apps.<store>.*.category` | string | Source application category. |
| `related_apps.<store>.*.price` | string, number | Source price text or value; currency is not inferred. |
| `related_apps.<store>.*.rating`, `ratecount` | number | Source rating and review count. |
| `categories.*.category` | string | Source category label. |
| `categories.*.count` | number | Source count for that category. |
| `categories.*.id` | string, number | Source category identifier. |
| `categories.*.categories` | array | Child categories with the same structure. |

Store-specific native application values and additional source business fields can have other JSON types. They remain source-defined rather than being converted into a fixed business fact.

Illustrative, abbreviated output for the apify.com input with all three prefilled reports. Example values and counts demonstrate the shape; actual periods and values vary by run. Additional sections and fields are omitted.

```json
{
  "website": "apify.com",
  "traffic_engagement": {
    "engagement": [
      {
        "monthly_visits": 100000,
        "visit_duration": 120,
        "visit_pages": 3,
        "period_start": "2026-03-01",
        "period_end": "2026-08-31"
      }
    ]
  },
  "social": {
    "social": [
      {
        "network": "Youtube",
        "traffic_share": 0.5,
        "period_start": "2026-03-01",
        "period_end": "2026-08-31"
      }
    ]
  },
  "display_campaigns": {
    "campaigns": [
      {
        "campaign_id": "apify.com",
        "creative_count": 2,
        "period_start": "2026-03-01",
        "period_end": "2026-08-31"
      }
    ]
  },
  "report_context": {
    "traffic_engagement": {
      "item_count": 1,
      "storage": "inline",
      "file_url": null,
      "sections": {
        "engagement": [
          {
            "status": "complete",
            "item_count": 1,
            "period_start": "2026-03-01",
            "period_end": "2026-08-31"
          }
        ]
      }
    },
    "social": {
      "item_count": 1,
      "storage": "inline",
      "file_url": null,
      "sections": {
        "social": [
          {
            "status": "complete",
            "item_count": 1,
            "period_start": "2026-03-01",
            "period_end": "2026-08-31"
          }
        ]
      }
    },
    "display_campaigns": {
      "item_count": 1,
      "storage": "inline",
      "file_url": null,
      "sections": {
        "campaigns": [
          {
            "status": "complete",
            "item_count": 1,
            "period_start": "2026-03-01",
            "period_end": "2026-08-31"
          }
        ]
      }
    }
  },
  "item_count": 3,
  "processor": "https://apify.com/agentx/similarweb-pro-scraper",
  "processed_at": "2026-11-04T12:00:00Z"
}
```

JSON preserves the report structure and is the recommended export for further processing. For CSV or spreadsheet analysis, flatten a selected report's section arrays and retain `website`, section and period columns. Shared sections can appear under multiple selected report pages, so deduplicate by analytical meaning before combining them.

### Integration Examples

Run Actor ID `E4aGcMycvf3cTbkgm` (`agentx/similarweb-pro-scraper`) asynchronously, wait for completion, and retrieve its Dataset and referenced report files.

#### Actor ID

Use this Actor ID in API calls, SDKs, Make.com and n8n:

```text
E4aGcMycvf3cTbkgm
```

In REST API paths, the name form `agentx~similarweb-pro-scraper` is an equivalent alternative to the Actor ID.

#### cURL

Requires Bash, cURL and jq. Keep the returned run ID: a client wait ending can leave the run active. Each new start creates another billed run. These examples use the Quick Start input and read every Dataset page, including any saved output from an unsuccessful run.

```bash
set -euo pipefail
export APIFY_TOKEN="YOUR_APIFY_TOKEN"
API="https://api.apify.com/v2"
RUN=$(curl --fail --silent --show-error -X POST \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  --data '{"website":"apify.com","reports":["traffic_engagement","social","display_campaigns"]}' \
  "$API/acts/E4aGcMycvf3cTbkgm/runs")
RUN_ID=$(printf '%s' "$RUN" | jq -er '.data.id')
DATASET_ID=$(printf '%s' "$RUN" | jq -er '.data.defaultDatasetId')
printf 'Run ID: %s\n' "$RUN_ID" >&2
while true; do
  STATE=$(curl --fail --silent --show-error \
    -H "Authorization: Bearer $APIFY_TOKEN" "$API/actor-runs/$RUN_ID")
  STATUS=$(printf '%s' "$STATE" | jq -er '.data.status')
  case "$STATUS" in
    SUCCEEDED|FAILED|TIMED-OUT|ABORTED) break ;;
  esac
  sleep 2
done
printf 'Run status: %s\n' "$STATUS" >&2
OFFSET=0
while true; do
  PAGE=$(curl --fail --silent --show-error \
    -H "Authorization: Bearer $APIFY_TOKEN" \
    "$API/datasets/$DATASET_ID/items?format=json&clean=true&offset=$OFFSET&limit=1000")
  printf '%s' "$PAGE" | jq -c '.[]'
  COUNT=$(printf '%s' "$PAGE" | jq 'length')
  [ "$COUNT" -lt 1000 ] && break
  OFFSET=$((OFFSET + COUNT))
done
```

#### Python

Uses Python's standard library. Save the run ID if the client stops waiting, then resume polling that run.

```python
import json
import os
import time
from urllib.request import Request, urlopen

API = "https://api.apify.com/v2"
HEADERS = {"Authorization": "Bearer " + os.environ["APIFY_TOKEN"],
           "Content-Type": "application/json"}

def request(path, payload=None):
    body = None if payload is None else json.dumps(payload).encode()
    with urlopen(Request(API + path, data=body, headers=HEADERS), timeout=60) as response:
        return json.load(response)

run = request("/acts/E4aGcMycvf3cTbkgm/runs", {
    "website": "apify.com",
    "reports": ["traffic_engagement", "social", "display_campaigns"],
})["data"]
print("Run ID:", run["id"])
while run["status"] not in {"SUCCEEDED", "FAILED", "TIMED-OUT", "ABORTED"}:
    time.sleep(2)
    run = request("/actor-runs/" + run["id"])["data"]
print("Run status:", run["status"])
offset = 0
while True:
    page = request(f'/datasets/{run["defaultDatasetId"]}/items'
                   f'?format=json&clean=true&offset={offset}&limit=1000')
    for website in page:
        print(json.dumps(website))
    if len(page) < 1000:
        break
    offset += len(page)
```

#### JavaScript

Uses Node.js 18 or later with built-in `fetch`. Save the run ID if the client stops waiting.

```javascript
const API = "https://api.apify.com/v2";
const headers = {
  Authorization: `Bearer ${process.env.APIFY_TOKEN}`,
  "Content-Type": "application/json",
};
async function request(path, payload) {
  const response = await fetch(API + path, {
    method: payload === undefined ? "GET" : "POST",
    headers,
    body: payload === undefined ? undefined : JSON.stringify(payload),
  });
  if (!response.ok) throw new Error(`Apify returned ${response.status}`);
  return response.json();
}
let { data: run } = await request("/acts/E4aGcMycvf3cTbkgm/runs", {
  website: "apify.com",
  reports: ["traffic_engagement", "social", "display_campaigns"],
});
console.log("Run ID:", run.id);
while (!["SUCCEEDED", "FAILED", "TIMED-OUT", "ABORTED"].includes(run.status)) {
  await new Promise(resolve => setTimeout(resolve, 2000));
  ({ data: run } = await request(`/actor-runs/${run.id}`));
}
console.log("Run status:", run.status);
for (let offset = 0; ; ) {
  const page = await request(`/datasets/${run.defaultDatasetId}/items`
    + `?format=json&clean=true&offset=${offset}&limit=1000`);
  for (const website of page) console.log(website);
  if (page.length < 1000) break;
  offset += page.length;
}
```

#### Make.com

Use the Apify integration to start Actor ID `E4aGcMycvf3cTbkgm` with the apify.com example input. Save the run ID and Dataset ID, then use a run-completion notification or status polling before retrieving Dataset items. Read each selected top-level report or download its `report_context[report_key].file_url` when file-backed.

#### n8n

Start Actor ID `E4aGcMycvf3cTbkgm` with an HTTP Request node posting the apify.com JSON input to `https://api.apify.com/v2/acts/E4aGcMycvf3cTbkgm/runs`. Keep the returned run ID through a Wait/status-check loop. After completion, retrieve the Dataset, inspect `report_context`, and expand the selected section arrays into the rows your destination expects.

#### MCP

Use Apify's MCP integration to select `agentx/similarweb-pro-scraper` and submit the same `website` and `reports` values. Ask the client to wait for the run, inspect `report_context` and the saved data, and retrieve the website result and any referenced JSON files. See [Apify integrations](https://docs.apify.com/integrations) for connection options.

### Pricing

A website result costs $0.02 on the FREE tier, report items cost $0.004 per started 1,000 delivered source items, and the Actor Start costs $0.01. One saved website result with 1–1,000 billable items therefore has a $0.034 event subtotal; the report selection alone does not guarantee that count. Each run has one $0.01 Actor Start charge.

| Event                            | FREE | BRONZE   | SILVER   | GOLD / PLATINUM / DIAMOND |
| -------------------------------- | -------- | -------- | -------- | ------------------------- |
| Website Result                   | $0.02000 | $0.01800 | $0.01600 | $0.01500                  |
| Report Items (per started 1,000) | $0.00400 | $0.00360 | $0.00320 | $0.00300                  |
| Actor Start                      | $0.01 | $0.01    | $0.01    | $0.01                     |

The bill follows the delivered source-item count, not the number of visible records after formatting. Items in shared sections are counted once, even when a section appears under two selected pages. Detailed keyword, landing-page and backlink reports can increase the count; for 1,001–2,000 billable items, the FREE-tier event subtotal is $0.038 ($0.01 + $0.02 + 2 × $0.004). These calculations cover the listed events; check Apify for any additional platform or storage charges applicable to your account.

Whole Actor bill examples on the FREE pricing tier, using all three registered events:

| Delivered outcome | Actor Start | Website Result | Report Items units | Actor bill |
| --- | --- | --- | --- | --- |
| Quick Start: 1 website, 217 source items | 1 | 1 | 1 | $0.034 |
| 1 website, 6,025 source items | 1 | 1 | 7 | $0.058 |
| Partial website result, 500 source items retained | 1 | 1 | 1 | $0.034 |
| 1 confirmed `not_found` row | 1 | 0 | 0 | $0.01 |
| 0 saved rows | 1 | 0 | 0 | $0.01 |

The source counts illustrate the arithmetic and can vary on a new run. A partial result is billed only for its saved website result and delivered source items. These are this Actor's charges at the stated tier; separately selected Apify services are outside these examples.

If a spending limit interrupts delivery or billing, inspect the saved Dataset and charged units. Any confirmed Report Items charge remains on the bill for the saved data; inspect that run before retrying. A definitive `not_found` row has no Website Result or Report Items charge; the Actor Start still applies. Source-access errors or interrupted collection can leave no website result. The data comes from the selected Similarweb Pro report pages.

Prices can change — the current published figures are on the [Actor's pricing tab](https://apify.com/agentx/similarweb-pro-scraper/pricing), and Apify explains the pay-per-event model in its [Store pricing documentation](https://docs.apify.com/platform/actors/running/actors-in-store).

### Use Cases

**Agency reporting.** Compare traffic engagement and social sources for a client website, carrying each section's reporting period into the presentation. Keep source-estimated visits distinct from the client's own analytics.

**SEO opportunity research.** Analyze `keywords`, `keyword_clusters` and `landing_pages` together. Retain each keyword's source measures and each landing-page snapshot's month when prioritizing content work.

**Advertising research.** Combine `paid_keywords`, `search_ads`, `display_campaigns` and `display_ads` to review the source's observed search and display activity for a domain.

**Prospect qualification.** Use traffic, audience and geographic data to prepare domain-level research before outreach. Read the relevant profile and reporting window so each observation has a clear basis.

**Backlink review.** Analyze referring domains and individual backlinks alongside the backlink overview. Separate aggregate counts from individual records when preparing summaries.

### Alternatives

Choose the research workflow whose data, delivery and account controls fit your task.

| Option                       | Useful fit |
| ---------------------------- | ----------------------------------------------------------------------------------------- |
| Similarweb website interface | Interactive exploration, chart review and source-provided analysis tools. |
| Similarweb's official API    | Direct source integration with documented endpoint contracts and account credit controls. |
| SEO research suites          | Combined research, project management and analyst workflows within one product. |
| Similarweb Pro Scraper       | Selected report pages packaged into a nested website result for Apify workflows. |

Similarweb's official API uses [data credits](https://docs.similarweb.com/api-v5/guides/data-credits-calculations), with consumption depending on the endpoint and requested data. Compare the required report coverage and complete task cost when choosing an integration.

### Limits and Troubleshooting

Report availability depends on the website, source coverage and reporting window.

- **An empty report:** an empty section array has no mapped records for that website and period. Check its period and `report_context`; null or unavailable data is a different outcome.
- **Partial collection:** inspect the saved sections and final run status; retain delivered data separately from complete results.
- **Different totals across sections:** source models and aggregation levels can differ. Compare the same metric, section, geography and period.
- **An AI landing-page source window:** source coverage can limit the available landing pages. A nonempty section is not proof of exhaustive coverage.
- **A large report uses a file:** download `report_context[report_key].file_url` and process the same section arrays and record-level periods as inline data.
- **A run ends before final delivery:** inspect the Dataset and final run status; delivery is finalized as one website result after collection. Plan dependent workflows around the terminal run and its actual saved outputs.
- **A row has `status: "not_found"`:** the source confirmed absence for that domain; the row is saved without Website Result or Report Items charges. Check the domain spelling. An unrecognized-site or access error is not confirmation of absence.
- **Large report selections:** group detailed pages by task, such as traffic or SEO, and review each saved website result before expanding the analysis.
- **Unavailable sections:** source access or report availability can prevent data retrieval. Inspect `report_context` and the run status message; use the sections actually saved without assuming every selected report completed.
- **Reports could not be saved:** the final status identifies a saving failure. Keep any confirmed results; the unsaved reports are unavailable in that run.
- **A cost-limit message:** inspect saved results and charges; if needed, select fewer reports for a later run. A new start has its own Actor Start charge.
- **A temporary access message:** send support the run ID and selected reports for help with the unavailable data.

For a reproducible problem, [open an Issue](https://apify.com/agentx/similarweb-pro-scraper/issues) with the run ID, exact input, affected report and expected output.

### Trust and Reliability

The Dataset schema has 33 top-level fields and 28 views. Selected report objects contain section-specific records; `report_context` supplies storage, counts, statuses and periods. These fields help you interpret what was saved.

Similarweb metrics include modeled estimates. See [Similarweb's data methodology](https://www.similarweb.com/corp/ourdata/) for the source's explanation of its data inputs and modeling. Treat these metrics as source-estimated research data, and use first-party analytics for direct measurement of a website you operate.

Keep run status, report status and item counts together. A website row can contain complete, partial, empty or unavailable sections. Nonempty data and a successful platform run do not prove complete source coverage.

### Legal and Compliance

**Data scope.** The Actor returns website-level research reports and the source-provided entities and measures within the selected pages.

**Responsible use.** Use the reports for purposes consistent with applicable obligations and the rights attached to the data. Apply suitable access controls when combining research data with your own customer records.

**Platform terms.** Review the terms governing your source-data use and Apify account before integrating exports into a downstream product or distributing them to others.

### Frequently Asked Questions

#### How can I export Similarweb data as JSON?

Start the Actor with one website and your chosen reports, wait for completion, and export the Dataset as JSON. Download report files referenced by `file_url` to collect the full delivered output.

#### Which Similarweb traffic reports can I select?

Choose `website_performance`, `traffic_engagement`, `marketing_channels`, `audience`, `referral` or `social` according to your research question. Each page groups related sections in the website result.

#### What does one result contain?

One result contains `website`, the selected report keys, `report_context`, `item_count`, `processor` and `processed_at`. Inline reports contain section arrays; file-backed reports are linked in `report_context`. Definitive absence adds `status: "not_found"`.

#### How are dates selected?

The Actor uses the reporting history available from the source. Competitor sections use up to three available months, while monthly landing-page and ranking tables retain separate monthly periods.

#### Can I schedule runs to monitor website traffic over time?

Use an Apify schedule with the same website and report selections, then save each completed output with `processed_at`. Compare like-for-like periods and metrics, since source estimates and available reporting history can change.

#### How much does a website report cost?

On the FREE tier, one website result with 1-1,000 delivered source items has a $0.034 event subtotal: $0.01 Actor Start + $0.02 Website Result + $0.004 Report Items. See Pricing for larger counts and paid-plan tiers.

#### Which inputs do I supply for access?

Supply `website` and `reports`. Service access is handled by the Actor; an access-related run message can be investigated through support using the run ID.

#### How should I interpret missing values and partial reports?

Preserve `null` and absent fields as missing data, preserve genuine zero values, and inspect `report_context` alongside the saved sections and run status message. `complete` indicates finished section collection, not exhaustive source coverage; keep observations with different periods and availability separate in analysis.

#### Why can a successful run save no website row?

Apify's `SUCCEEDED` state means execution finished. An unknown website, unavailable report or access failure can still leave the Dataset empty. Read the final status message and actual Dataset. A confirmed no-data answer instead saves a `not_found` row. Both zero-row and `not_found` runs retain the fixed $0.01 Actor Start charge; they have no Website Result or Report Items charge.

#### What should I do when billing confirmation is pending?

Keep the existing run ID and inspect its Dataset and charged events before starting another run. A website row may already be saved while billing confirmation is pending. Send the run ID to support; restarting can incur another Actor Start charge.

### Related AgentX Actors

- [Domain Intelligence Lookup](https://apify.com/agentx/domain-intelligence-lookup) — use the returned website for domain registration and infrastructure research.
- [Google Keyword Trends](https://apify.com/agentx/google-keyword-trends) — compare search-interest patterns for topics identified in website research.
- [All Web Search Scraper](https://apify.com/agentx/all-web-search-scraper) — find public pages for deeper website and company research.
- [LinkedIn Company Lookup](https://apify.com/agentx/linkedin-company-lookup) — add a public company profile when you have its LinkedIn company URL.

### Support and Community

Ask about website reports, reporting periods and JSON delivery in the [AgentX community on Telegram](https://t.me/Apify_Actor); for a reproducible bug, open an Issue with the run ID and the exact input.

AgentX is an Arcyton brand — [arcyton.com](https://arcyton.com).

**Last Updated:** November 7, 2026

# Actor input Schema

## `website` (type: `string`):

Enter one public website domain or URL, such as apify.com. Website URLs are normalized to their domain with a leading www. removed; the result website field uses that normalized domain.

## `reports` (type: `array`):

Select one or more of the 27 report pages. Each selection groups related sections in one website result. Each paginated section returns its first 1000 distinct source entries per reporting period, in source order. Selected entries are delivered in full, inline or by JSON file link. Reporting periods follow source availability; detailed pages can take longer. Start with traffic_engagement, social and display_campaigns.

## Actor input object example

```json
{
  "website": "apify.com",
  "reports": [
    "traffic_engagement",
    "social",
    "display_campaigns"
  ]
}
```

# Actor output Schema

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

Full website record, including every selected report and report_context. File-backed reports have their complete download URL in report_context.

# 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 = {
    "website": "apify.com",
    "reports": [
        "traffic_engagement",
        "social",
        "display_campaigns"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("agentx/similarweb-pro-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 = {
    "website": "apify.com",
    "reports": [
        "traffic_engagement",
        "social",
        "display_campaigns",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("agentx/similarweb-pro-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 '{
  "website": "apify.com",
  "reports": [
    "traffic_engagement",
    "social",
    "display_campaigns"
  ]
}' |
apify call agentx/similarweb-pro-scraper --silent --output-dataset

```

## MCP server setup

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