# Chrome Web Store Scraper: Chrome Extensions, Users, Ratings (`bepolabs/chrome-web-store`) Actor

Size up a niche or audit rights: feed sheets and AI agents with listings of any Chrome browser plugin, including bulk walks of the full catalogue.

- **URL**: https://apify.com/bepolabs/chrome-web-store.md
- **Developed by:** [BEPO Labs](https://apify.com/bepolabs) (community)
- **Categories:** Developer tools, E-commerce, AI
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.10 / 1,000 extensions

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

### 🧩 What is Chrome Web Store Scraper?

Spy on the competition: this Actor opens the Chrome Web Store page of any extension and returns one clean row with manifest revision, requested permissions and matching sites. Paste ids or links (old and new host both work), or walk the sitemap to enumerate thousands. Taken-down entries come back flagged, so a watch list never silently shrinks.

- **Market research**: size up a niche: users, ratings and update dates of every extension in it
- **Competitor tracking**: schedule a weekly run on rival extensions and see version, users and rating change
- **Security and IT review**: check what access the extensions your company allows can request
- **Lead generation for extension tools**: find active developers and trader accounts by category
- **Datasets for AI**: feed structured extension data to your agent or model through the API or MCP

![Chrome Web Store Scraper: Users, rating, version, last update, developer, category and permissions of any Chrome extension.](https://api.apify.com/v2/key-value-stores/wdeAWGooHdIhvFgSY/records/chrome-web-store-hero.png)

#### ✨ Why use this Actor?

- ✅ **Many ways in**: single ids, old and new Store links, or sitemap shards of about 8,500 listings each
- ✅ **Permissions included**: manifest and host grants of every listing, not only the marketing fields
- ✅ **Removed extensions reported**: an extension taken down comes back with `status: unavailable` instead of vanishing
- ✅ **Polite by design**: about one request a second, and every URL checked against the Store's robots.txt
- ✅ **No personal data**: developer emails, addresses and phone numbers on the page are never read
- ✅ **Cheap**: 0.1 USD per 1,000 extensions

### 📦 What data can you get with Chrome Web Store Scraper?

| | | |
|---|---|---|
| 🏷️ Name and short description | 👥 Users | ⭐ Rating and number of ratings |
| 🔢 Version | 📅 Last updated | 🧑‍💻 Developer and trader flag |
| 🗂️ Category | 🧾 Manifest version | 🔐 Permissions |
| 🌐 Host permissions | 🔗 Website and icon URL | 🚫 Status (live or removed) |

### 🚀 How to use Chrome Web Store Scraper

Chrome Web Store Scraper works in a few clicks, no coding needed:

1. [Create a free Apify account](https://console.apify.com/sign-up) (the free plan includes 5 USD of monthly credit).
2. Open [Chrome Web Store Scraper](https://apify.com/bepolabs/chrome-web-store) and click **Try for free**.
3. Paste extension ids or Chrome Web Store links, or enter sitemap shard numbers to list extensions in bulk.
4. Click **Start** and wait for the run to finish (most runs take seconds).
5. Download your data as JSON, CSV, Excel, XML or HTML, or send it straight to Google Sheets, Make, Zapier or your AI agent.

![How Chrome Web Store Scraper works](https://api.apify.com/v2/key-value-stores/wdeAWGooHdIhvFgSY/records/chrome-web-store-workflow.png)

### ⬇️ Input

Add extension ids or Store URLs (up to 5,000 per run), or sitemap shards to walk the Store. Everything else is optional.

##### Id or URL?

Both work: a 32-letter id (`nngceckbapebfimnlniiiahkandclblb`) or a Store link on `chromewebstore.google.com` or the old `chrome.google.com/webstore` host, with or without `?hl=`.

##### Walking the sitemap

The Store publishes a sitemap of about 44 shards. Enter shard numbers (from 0) and a cap in `maxSitemapItems`. Switch off `sitemapDetails` to get only id and URL per entry: quick and cheaper.

##### Language

`language` sets the language of the name, description and category labels, e.g. `en`, `de` or `pt-BR`.

| Field | Type | What it does | Default |
|---|---|---|---|
| **Extension ids or Store URLs** (`extensionIds`) | array | 32-letter extension ids (nngceckbapebfimnlniiiahkandclblb) or Chrome Web Store URLs, old or new host. | `["nngceckbapebfimnlniiiahkandclblb","htt` |
| **Sitemap shards** (`sitemapShards`) | array | Walk the Store's public sitemap instead of naming ids: shard numbers from 0 (the Store has about 44 shards of about 8,500 listings each, themes included). |  |
| **Sitemap listings** (`maxSitemapItems`) | integer | How many listings to take from the sitemap shards in total. | `100` |
| **Read each sitemap listing** (`sitemapDetails`) | boolean | On: one full listing row per sitemap entry (event extension). | `true` |
| **Listing language** (`language`) | string | Language of the name, description and category labels, e.g. | `"en"` |
| **Retries** (`maxRetries`) | integer | Retries per page on network errors, 429 and 5xx, with exponential backoff. | `3` |

![Chrome Web Store Scraper input form](https://api.apify.com/v2/key-value-stores/wdeAWGooHdIhvFgSY/records/chrome-web-store-input.png)

#### Input example

```json
{
    "extensionIds": [
        "nngceckbapebfimnlniiiahkandclblb",
        "aapbdbdomjkkjkaonfhkkikfgjllcleb",
        "gighmmpiobklfepjocnamgkkbiglidom",
        "bmnlcjabgnpnenekpadlanbbkooimhnj",
        "cjpalhdlnbpafiamejdnhcphjbkeiagm"
    ]
}
```

### ⬆️ Output

Every extension becomes one row with the same fields. The run summary in the key-value store (`OUTPUT`) counts live, removed and failed inputs and names every error.

![Chrome Web Store Scraper output table](https://api.apify.com/v2/key-value-stores/wdeAWGooHdIhvFgSY/records/chrome-web-store-output.png)

#### Output example

One row of the dataset (Bitwarden):

```json
{
    "name": "Bitwarden Password Manager",
    "users": 8000000,
    "rating": 2.87,
    "ratingCount": 8056,
    "version": "2026.9.3",
    "updated": "2026-10-02",
    "category": "Privacy & Security",
    "id": "nngceckbapebfimnlniiiahkandclblb",
    "url": "https://chromewebstore.google.com/detail/bitwarden-password-manage/nngceckbapebfimnlniiiahkandclblb",
    "status": "ok",
    "developer": "Bitwarden Inc.",
    "trader": true,
    "categoryId": "make_chrome_yours/privacy",
    "manifestVersion": 3,
    "permissions": [
        "activeTab",
        "alarms",
        "clipboardRead",
        "clipboardWrite",
        "contextMenus",
        "idle",
        "offscreen",
        "scripting",
        "sidePanel",
        "storage",
        "tabs",
        "unlimitedStorage",
        "webNavigation",
        "webRequest",
        "webRequestAuthProvider",
        "notifications"
    ],
    "hostPermissions": [
        "https://*/*",
        "http://*/*"
    ],
    "website": "https://bitwarden.com/",
    "iconUrl": "https://lh3.googleusercontent.com/J_l8abQyJgx7POjRoDfGaFYWFnYQNpRSy4kH5IlbwSdM-l_gZf2rJlk2NLSQTY8g-U2vrclpb0EZApHyOe6sjzbKcUc",
    "shortDescription": "At home, at work, or on the go, Bitwarden easily secures all your passwords, passkeys, and sensitive information",
    "scrapedAt": "2026-10-16T06:17:00.782Z"
}
```

#### ⚠️ Removed extensions and failed inputs

An extension that was removed or never existed still yields a record with `status: "unavailable"` and empty fields, so you can see it left the Store. An input that cannot be read at all (the Store refuses or stays unreachable after all retries) gives no row and is not charged; the log and `OUTPUT` name it with the reason.

| Case | What you see |
|---|---|
| `status: unavailable` | The listing is gone (removed or never published) |
| `HTTP 429` | The Store rate-limited the request after all retries |
| `robots.txt disallows` | The URL is outside what the Store allows; skipped |

View the results as a table or JSON in the Output tab and download them as JSON, CSV, Excel, XML, HTML or RSS, all fields or only those you pick.

### 💰 How much does Chrome Web Store Scraper cost?

Chrome Web Store Scraper is priced **per event**: **0.1 USD per 1,000 extensions** (0.0001 USD each), with no monthly rental. Every extension row is billed once, a removed one included; inputs that fail are not charged. Sitemap rows without details (`sitemapDetails` off) cost 0.0005 USD each.

| You get | You pay |
|---|---|
| 100 extensions | 0.01 USD |
| 1,000 extensions | 0.1 USD |
| 10,000 extensions | 1 USD |
| 100,000 extensions | 10 USD |

💡 Apify's free plan gives you 5 USD of credit every month, enough for about **50,000 extensions** at no cost. Set a spending limit per run and the Actor stops there.

### ⚖️ Chrome Web Store Scraper vs. the alternatives

| | Chrome Web Store Scraper | Copying from the Store by hand | Typical extension scrapers |
|---|---|---|---|
| **Ids, Store URLs and sitemap shards** | ✅ | one page at a time | often ids only |
| **Permissions and host permissions** | ✅ | install required | often missing |
| **Removed extensions flagged** | ✅ | ❌ | often silently dropped |
| **robots.txt respected, no personal data** | ✅ | ✅ | varies |
| **Export, schedule, API and MCP** | ✅ | ❌ | ✅ |

### 🔌 Integrations, API and MCP

#### Connect Chrome Web Store Scraper to your AI agent (MCP)

Give Claude, ChatGPT, Cursor or any MCP client direct access to Chrome Web Store Scraper through the [Apify MCP server](https://mcp.apify.com). Add this URL to its settings:

```text
https://mcp.apify.com/?actors=bepolabs/chrome-web-store
```

For Claude Desktop, add it under `mcpServers` in `claude_desktop_config.json`:

```json
{
    "mcpServers": {
        "chrome-web-store": {
            "command": "npx",
            "args": [
                "-y",
                "@apify/actors-mcp-server",
                "--actors",
                "bepolabs/chrome-web-store"
            ],
            "env": {
                "APIFY_TOKEN": "<your Apify API token>"
            }
        }
    }
}
```

Then ask: *"Compare the users, rating and last update of Bitwarden, Dark Reader and uBlock Origin Lite in the Chrome Web Store."*

#### Run it from your code

Python (`pip install apify-client`):

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("bepolabs/chrome-web-store").call(run_input={"extensionIds":["nngceckbapebfimnlniiiahkandclblb","aapbdbdomjkkjkaonfhkkikfgjllcleb","gighmmpiobklfepjocnamgkkbiglidom","bmnlcjabgnpnenekpadlanbbkooimhnj","cjpalhdlnbpafiamejdnhcphjbkeiagm"]})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

JavaScript (`npm install apify-client`):

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

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('bepolabs/chrome-web-store').call({"extensionIds":["nngceckbapebfimnlniiiahkandclblb","aapbdbdomjkkjkaonfhkkikfgjllcleb","gighmmpiobklfepjocnamgkkbiglidom","bmnlcjabgnpnenekpadlanbbkooimhnj","cjpalhdlnbpafiamejdnhcphjbkeiagm"]});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### No-code integrations

Send results to **Google Sheets, Slack, Airtable, HubSpot, Make, Zapier, n8n** and more from the Integrations tab, start runs on a **schedule**, or trigger your own endpoint with a **webhook** when a run finishes. The [Apify API](https://docs.apify.com/api/v2) gives you full control over runs and datasets.

### ❓ FAQ

##### How exact are the user counts?

As exact as the Store shows them: it rounds installs (8,000,000 users). Ratings and rating counts are precise.

##### Can I get reviews or search results?

No. The Store's robots.txt disallows review and search pages, and the Actor follows it on every run. Use sitemap shards to list extensions in bulk instead.

##### Can I track changes over time?

Yes. Schedule the Actor daily or weekly on your list and compare `version`, `users`, `rating` and `permissions` between runs.

##### How many extensions per run?

Up to 5,000 ids or URLs, or up to 10,000 sitemap listings, at about one listing a second.

##### Does it read themes too?

The sitemap includes themes as well as extensions; both come back with the same fields.

##### Is it legal to use Chrome Web Store Scraper?

The Actor reads only open listing URLs, at about one request a second, and checks every URL against the robots.txt of the Store before fetching it, so review and search pages are left alone. Developer emails, addresses and phone numbers are never collected. Not affiliated with or endorsed by the vendor; Chrome is a trademark of Google LLC. You are responsible for how you use the data.

##### What if something is missing or does not work?

Open an issue on the **Issues** tab; we read each one and reply. Feature requests are welcome too.

### 💬 Your feedback

Tell us what Chrome Web Store Scraper should add on the **Issues** tab or leave a review; your notes decide what we work on next.

### 🔗 Related Actors

| Actor | What it does |
|---|---|
| ⭐ [App Store Reviews](https://apify.com/bepolabs/app-store-reviews) | iOS App Store reviews with stars, text, app version and date, plus the app's rating and details, for any store country. |
| 🎮 [Steam Scraper](https://apify.com/bepolabs/steam) | Game prices, details and player reviews from the Steam store, by app id, store URL or game name. |
| 📦 [npm and PyPI Package Data](https://apify.com/bepolabs/npm-pypi) | Versions, downloads, licences, maintainers and release history of npm and PyPI packages in one table. |
| 🛍️ [Shopify Products](https://apify.com/bepolabs/shopify-products) | Any Shopify store URL to every product, with variants, prices, sale prices, SKUs, stock and images. |
| 🛡️ [CVE Vulnerability Search](https://apify.com/bepolabs/cve-vulnerabilities) | Official NVD records by CVE id, keyword or product: CVSS, CWE, CISA known-exploited flag and fix links. |
| 📢 [Google Ads Transparency Scraper](https://apify.com/bepolabs/google-ads-transparency) | Every ad a company runs on Google, by domain, advertiser ID or name, from the Ads Transparency Center. |
| 📊 [Google Sheets Import and Export](https://apify.com/bepolabs/google-sheets) | Send any Apify dataset or JSON to a Google Sheet (append, replace or upsert by key), or read a sheet back as clean rows. |
| 📈 [Google Trends Scraper](https://apify.com/bepolabs/google-trends) | Interest over time for up to five keywords on one 0 to 100 scale, any country or worldwide, plus top and rising related queries. |

# Changelog

This Actor's version history is a separate document: https://apify.com/bepolabs/chrome-web-store/changelog.md

# Actor input Schema

## `extensionIds` (type: `array`):

32-letter extension ids (nngceckbapebfimnlniiiahkandclblb) or Chrome Web Store URLs, old or new host. Up to 5,000 per run, about one a second.

## `sitemapShards` (type: `array`):

Walk the Store's public sitemap instead of naming ids: shard numbers from 0 (the Store has about 44 shards of about 8,500 listings each, themes included). Capped by "Sitemap listings".

## `maxSitemapItems` (type: `integer`):

How many listings to take from the sitemap shards in total.

## `sitemapDetails` (type: `boolean`):

On: one full listing row per sitemap entry (event extension). Off: only id and URL per entry, fast and cheaper (event sitemap-row).

## `language` (type: `string`):

Language of the name, description and category labels, e.g. en, de, pt-BR.

## `maxRetries` (type: `integer`):

Retries per page on network errors, 429 and 5xx, with exponential backoff.

## Actor input object example

```json
{
  "extensionIds": [
    "nngceckbapebfimnlniiiahkandclblb",
    "https://chromewebstore.google.com/detail/google-translate/aapbdbdomjkkjkaonfhkkikfgjllcleb"
  ],
  "maxSitemapItems": 100,
  "sitemapDetails": true,
  "language": "en",
  "maxRetries": 3
}
```

# Actor output Schema

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

Dataset items, one row per result, in the overview table view.

# 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 = {
    "extensionIds": [
        "nngceckbapebfimnlniiiahkandclblb",
        "https://chromewebstore.google.com/detail/google-translate/aapbdbdomjkkjkaonfhkkikfgjllcleb"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("bepolabs/chrome-web-store").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 = { "extensionIds": [
        "nngceckbapebfimnlniiiahkandclblb",
        "https://chromewebstore.google.com/detail/google-translate/aapbdbdomjkkjkaonfhkkikfgjllcleb",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("bepolabs/chrome-web-store").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 '{
  "extensionIds": [
    "nngceckbapebfimnlniiiahkandclblb",
    "https://chromewebstore.google.com/detail/google-translate/aapbdbdomjkkjkaonfhkkikfgjllcleb"
  ]
}' |
apify call bepolabs/chrome-web-store --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,bepolabs/chrome-web-store"
        }
    }
}
```

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/adUZA4TS90fmACvpF/builds/7GhMcX4FXsjbrLt4R/openapi.json
