# Chrome Web Store Scraper — Extensions, Users & Developers (`fabrikit/chrome-web-store-scraper`) Actor

Scrape Chrome Web Store extensions by keyword, category or URL: users, rating, rating count, version, last update, size, languages, manifest permissions and host access, website, privacy policy and developer e-mail/address. Pay per result, no subscription.

- **URL**: https://apify.com/fabrikit/chrome-web-store-scraper.md
- **Developed by:** [Fabrikit](https://apify.com/fabrikit) (community)
- **Categories:** Developer tools, Lead generation, SEO tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 extension results

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

## Chrome Web Store Scraper

Turn the **Chrome Web Store** into a clean dataset of extensions. Search by keyword, list whole categories (sorted by most users, top rated or recently updated), or give it a list of extension URLs. Each extension comes back with **users, average rating, rating count, version, last update, first publish date, size, languages, manifest permissions and host access, website, support and privacy-policy links, and the developer's published contact details**.

No browser, no login, no API key. It reads the same data the store's own pages load, so a run of hundreds of extensions takes a minute or two.

### What you can do with it

- **Market research.** Size a niche: how many extensions, how many users each, ratings, update cadence, who the leaders are.
- **Lead generation.** Developer name, website and published support e-mail for thousands of extension makers, plus the address and phone that registered traders must publish.
- **Security and compliance audits.** Every extension's manifest permissions, host permissions, content-script matches and an `allSitesAccess` flag for anything that can read every website.
- **Competitor and ranking monitoring.** Track `position` for your keywords, and use the **Recently updated** sort on a schedule to catch new launches and updates.

### Key features

- **Three ways in**: keyword search (store relevance order, with `position`), whole category listings sorted by most users, top rated, recently updated or relevance, and explicit extension URLs or 32-letter ids (old `chrome.google.com/webstore` links work too).
- **Permissions for every extension**, even without full details: manifest version, permissions, optional permissions, host permissions, content-script matches and an `allSitesAccess` flag.
- **Full details on demand** (`includeDetails`, on by default): version, first publish and last update dates, size, languages, description, screenshots, videos, related extensions, links and the developer's published contact details.
- **Any store language** with `language` (`en`, `es`, `de`, `pt-BR`…).
- **No duplicates per source**, invalid ids and unknown categories are skipped with a warning, and a `SUMMARY` record lists results per source and any errors.
- **Spending limit respected**: each batch is trimmed to what your maximum charge per run allows.
- **No proxy needed** by default; you can enable Apify Proxy if your runs start failing.

### How to use it

1. Fill in one or more sources: **Search keywords**, **Categories**, **Extension URLs or IDs**.
2. Set **Max results per source**.
3. Keep **Include full details** on for version, update date, size, languages, description, links and developer contact (one extra store call per extension). Turn it off for a faster list with users, ratings and permissions only.
4. Run and export as JSON, CSV or Excel, or read the dataset through the API.

#### Example input

```json
{
    "searchQueries": ["password manager", "email finder"],
    "categories": ["productivity/workflow"],
    "sortBy": "most_users",
    "extensionUrls": ["https://chromewebstore.google.com/detail/bitwarden-password-manager/nngceckbapebfimnlniiiahkandclblb"],
    "maxResultsPerSource": 200,
    "includeDetails": true
}
```

#### More input examples

AI writing assistants (the "AI writing Chrome extensions" example task):

```json
{ "searchQueries": ["ai writing assistant"], "maxResultsPerSource": 50 }
```

VPN extensions ordered by users (the "VPN Chrome extensions by users" task):

```json
{ "searchQueries": ["vpn"], "sortBy": "most_users", "maxResultsPerSource": 50 }
```

Newly updated developer tools, fast list without full details (good for a daily schedule):

```json
{ "searchQueries": [], "categories": ["productivity/developer"], "sortBy": "recently_updated", "maxResultsPerSource": 100, "includeDetails": false }
```

Note: `searchQueries` defaults to `["password manager"]`; pass `"searchQueries": []` when you only want categories or specific extensions.

#### Example output (real record, lists shortened)

```json
{
    "extensionId": "nngceckbapebfimnlniiiahkandclblb",
    "url": "https://chromewebstore.google.com/detail/nngceckbapebfimnlniiiahkandclblb",
    "name": "Bitwarden Password Manager",
    "type": "extension",
    "iconUrl": "https://lh3.googleusercontent.com/J_l8abQyJgx7POjRoDfGaFYWFnYQNpRSy4kH5IlbwSdM-l_gZf2rJlk2NLSQTY8g-U2vrclpb0EZApHyOe6sjzbKcUc",
    "summary": "At home, at work, or on the go, Bitwarden easily secures all your passwords, passkeys, and sensitive information",
    "category": "make_chrome_yours/privacy",
    "users": 8000000,
    "rating": 4.25,
    "ratingCount": 8047,
    "position": null,
    "source": "extension",
    "sourceQuery": null,
    "createdAt": "2016-09-24T05:26:08.000Z",
    "updatedAt": "2026-10-02T05:33:42.000Z",
    "version": "2026.9.3",
    "size": "22.94MiB",
    "languages": [
        "Deutsch",
        "English",
        "English (United Kingdom)",
        "Filipino",
        "Indonesia"
    ],
    "manifestVersion": 3,
    "permissions": [
        "activeTab",
        "alarms",
        "clipboardRead",
        "clipboardWrite",
        "contextMenus",
        "idle",
        "offscreen",
        "scripting"
    ],
    "optionalPermissions": [
        "nativeMessaging",
        "privacy"
    ],
    "hostPermissions": [
        "https://*/*",
        "http://*/*"
    ],
    "contentScriptMatches": [
        "*://*/*",
        "file:///*"
    ],
    "allSitesAccess": true,
    "website": "https://bitwarden.com/",
    "supportUrl": "https://bitwarden.com/contact/",
    "privacyPolicyUrl": "https://bitwarden.com/privacy/",
    "developerName": "Bitwarden Inc.",
    "developerLegalName": "Bitwarden Inc.",
    "developerEmail": "hello@bitwarden.com",
    "developerAddress": "1 N Calle Cesar Chavez Suite 102, Santa Barbara, CA 93103-5619, US",
    "developerPhone": "+19046649194",
    "isTrader": true,
    "description": "Recognized as the best password manager by PCMag, WIRED, The Verge, CNET, G2, and more!\n\nSECURE YOUR DIGITAL LIFE\nSecure your digital life and protect against data breaches by generating and saving un…",
    "screenshots": [
        "https://lh3.googleusercontent.com/a2lRgSoI9PXxfI94EAQ3o1TEG99tRZPW6_zmBuKStd-484N3rqX-wP-8HZv_LK-P-xMgAKKi-1dnRl6DBck3ogFK0Q",
        "https://lh3.googleusercontent.com/T0PgI_ewEKdP1tFKDtCMik0idPacE2F-bEWrNSk1ghT_2wiNna4yjKAK8YcNnDBmSZ2vkvqTbyBnagdjJ8XfqLmm"
    ],
    "videos": [
        "https://www.youtube.com/embed/qlmi3fUbauA?rel=0&wmode=opaque&enablejsapi=1"
    ],
    "relatedExtensionIds": [
        "ldgfbffkinooeloadekpmfoklnobpien",
        "oboonakemofpalcgghocfoadofidjkkk",
        "jgnfghanfbjmimbdmnjfofnbcgpkbegj"
    ],
    "detailsScraped": true,
    "scrapedAt": "2026-10-12T16:21:20.399Z"
}
```

### Output fields

| Field | Meaning |
|---|---|
| `extensionId`, `url`, `name`, `type`, `iconUrl`, `summary`, `category` | Identity |
| `users`, `rating`, `ratingCount` | Popularity as shown by the store (user counts are the store's rounded figures) |
| `position` | Rank inside the keyword or category listing |
| `source`, `sourceQuery` | `search` + keyword, `category` + slug, or `extension` |
| `createdAt`, `updatedAt`, `version`, `size`, `languages` | Release info |
| `manifestVersion`, `permissions`, `optionalPermissions`, `hostPermissions`, `contentScriptMatches`, `allSitesAccess` | What the extension can access |
| `website`, `supportUrl`, `privacyPolicyUrl` | Links |
| `developerName`, `developerLegalName`, `developerEmail`, `developerAddress`, `developerPhone`, `isTrader` | Developer contact details exactly as published on the listing (address and phone only exist for registered traders) |
| `description`, `screenshots`, `videos`, `relatedExtensionIds` | Listing content |
| `detailsScraped` | Whether the full-details call was made |

### How much does it cost to scrape the Chrome Web Store?

| Event | When it is charged |
|---|---|
| Extension scraped (`extension-result`) | Per extension saved, full details included |
| Actor start | Once per run (a fraction of a cent) |

From 30 October 2026, 1,000 extensions cost US$4 on the Apify Free plan; paid Apify plans pay less per extension — see the **Pricing** tab. You only pay for extensions returned; platform usage is included.

### FAQ

**Do I need a Google account?** No. Only public store data is read.

**Why are user counts round numbers?** The store itself shows rounded counts (for example 8,000,000).

**Can I get the reviews too?** Yes, with our companion Actor [Chrome Web Store Reviews Scraper](https://apify.com/fabrikit/chrome-web-store-reviews-scraper).

**Is the developer e-mail personal data?** It is the contact address each developer chooses to publish on its public listing. The contact-person name the store keeps for traders is never output. Use the data in line with the anti-spam rules of your country.

**How many extensions can I get per keyword or category?** Set `maxResultsPerSource` to what you need; the actor pages through the listing until it reaches that number or the store runs out of results.

**How do I track my ranking for a keyword?** Run the same keyword search on a schedule and compare `position` for your `extensionId` across runs.

**Can I find extensions that can read every website?** Yes. Filter the dataset on `allSitesAccess = true`, or inspect `hostPermissions` and `contentScriptMatches` for specific domains.

**What happens with removed or mistyped extension ids?** They are skipped and listed in `SUMMARY.errors`. A run only fails if nothing at all could be scraped.

### Is it legal to scrape the Chrome Web Store?

This actor only reads data that the Chrome Web Store shows publicly to any visitor, without logging in. Developer names, e-mails, addresses and phone numbers are published by the developers themselves (and required for registered traders), but they can still be personal data, especially for individual developers, so laws such as the EU GDPR, Chile's Ley 21.719 or the California CCPA, and anti-spam rules like CAN-SPAM or the EU ePrivacy rules, apply to how you store and contact them. You are responsible for a lawful purpose and for respecting Google's terms of service. This is general information, not legal advice.

### Integrations

Run the Chrome Web Store Scraper from the Apify API or the JavaScript and Python clients, notify other systems with webhooks, or schedule it (for example daily on `recently_updated`) in Apify Console. It works with n8n, Make and Zapier, and with LangChain and LlamaIndex through their Apify integrations. AI agents in Claude, ChatGPT, Cursor and other MCP clients can find and run it through Apify's MCP server. Export as JSON, CSV or Excel, or read the dataset through the API.

### Use with AI agents

Use this actor to list Chrome extensions for a keyword, a store category or specific extension URLs, with users, rating, version, update dates, permissions and the developer's published contact details.

```json
{ "searchQueries": ["pdf editor"], "maxResultsPerSource": 20 }
```

Main output fields: `name`, `extensionId`, `url`, `users`, `rating`, `ratingCount`, `position`, `version`, `updatedAt`, `permissions`, `hostPermissions`, `allSitesAccess`, `developerName`, `developerEmail`, `website`. It is pay-per-event: an agent pays a small start fee plus a fixed price per extension saved, not for compute time.

### Related actors

- [Chrome Web Store Reviews Scraper](https://apify.com/fabrikit/chrome-web-store-reviews-scraper) — the reviews behind each extension's rating.
- [Shopify App Store Reviews Scraper](https://apify.com/fabrikit/shopify-app-store-reviews-scraper) — reviews of Shopify apps, for the same kind of market research.
- [App Reviews Scraper](https://apify.com/fabrikit/app-reviews-unified) — App Store and Google Play reviews in one run.
- [TrustRadius Reviews Scraper](https://apify.com/fabrikit/trustradius-reviews-scraper) — B2B software reviews.

#### Ready-made examples

- [AI writing Chrome extensions](https://apify.com/fabrikit/chrome-web-store-scraper/examples/ai-writing-extensions)
- [VPN Chrome extensions by users](https://apify.com/fabrikit/chrome-web-store-scraper/examples/vpn-extensions-most-users)

### Changelog

- **2026-10-16** — README expanded: key features, more input examples, FAQ, legal notes, integrations and example tasks.
- **2026-10-15** — Tiered pricing announced, effective 2026-10-30 (lower per-extension price on paid Apify plans).
- **2026-10-12** — Builds 0.1.1–0.1.2: initial release (keyword, category and URL sources; permissions; full details with developer contact); published on the Apify Store.

### En español

Extrae extensiones de la **Chrome Web Store** por palabra clave, categoría o URL: usuarios, rating, versión, última actualización, tamaño, idiomas, permisos del manifest, sitio web, política de privacidad y contacto publicado del desarrollador. Se cobra por extensión; el precio vigente para tu plan está en la pestaña Pricing.

# Actor input Schema

## `searchQueries` (type: `array`):

Keywords to search, exactly as a user would type them in the Chrome Web Store (`password manager`, `ai writing`, `email finder`). Results keep the store's own order in `position`, so you can track rankings over time.

## `categories` (type: `array`):

Categories to list. Paste the category URL (`https://chromewebstore.google.com/category/extensions/productivity/workflow`) or the short form: `productivity/communication`, `productivity/developer`, `productivity/education`, `productivity/tools`, `productivity/workflow`, `lifestyle/art`, `lifestyle/entertainment`, `lifestyle/games`, `lifestyle/household`, `lifestyle/fun`, `lifestyle/news`, `lifestyle/shopping`, `lifestyle/social`, `lifestyle/travel`, `lifestyle/well_being`, `make_chrome_yours/accessibility`, `make_chrome_yours/functionality`, `make_chrome_yours/privacy`, or `themes`.

## `sortBy` (type: `string`):

How category listings are ordered. `recently_updated` is the way to catch new and freshly updated extensions. Search results always use the store's own relevance order.

## `extensionUrls` (type: `array`):

Specific extensions to scrape: the store URL (`https://chromewebstore.google.com/detail/bitwarden-password-manager/nngceckbapebfimnlniiiahkandclblb`) or just the 32-letter id. Old `chrome.google.com/webstore` links work too.

## `maxResultsPerSource` (type: `integer`):

Stop after this many extensions for each keyword and each category.

## `includeDetails` (type: `boolean`):

Adds version, last update date, size, languages, full description, screenshots, support and privacy-policy links and the developer's published contact details (e-mail, and for registered traders the address and phone). One extra store call per extension. Users, ratings and manifest permissions are included either way. Extensions from **Extension URLs** always get details.

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

Language code for names and descriptions (`en`, `es`, `de`, `pt-BR`...).

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

Not needed by default. Enable Apify Proxy only if runs start failing.

## Actor input object example

```json
{
  "searchQueries": [
    "password manager"
  ],
  "categories": [],
  "sortBy": "relevance",
  "extensionUrls": [],
  "maxResultsPerSource": 50,
  "includeDetails": true,
  "language": "en",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `extensions` (type: `string`):

All extensions collected during the run

# 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 = {
    "searchQueries": [
        "password manager"
    ],
    "maxResultsPerSource": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("fabrikit/chrome-web-store-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 = {
    "searchQueries": ["password manager"],
    "maxResultsPerSource": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("fabrikit/chrome-web-store-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 '{
  "searchQueries": [
    "password manager"
  ],
  "maxResultsPerSource": 50
}' |
apify call fabrikit/chrome-web-store-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,fabrikit/chrome-web-store-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/3kgnYcRee9FLzCqCN/builds/nerqCYIFeRrOwL0af/openapi.json
