# Chrome Web Store Scraper — Extensions, Themes & Ratings (`highbrow_fame/chrome-web-store-extensions`) Actor

Chrome Web Store extensions and themes from searches, categories or ids: users, rating, rating count, version, last update, size, languages, permissions, publisher and privacy disclosures.

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

## Pricing

$0.80 / 1,000 extension delivereds

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 — Extensions, Themes & Ratings

Get Chrome extensions and themes from the Chrome Web Store: users, rating and rating count, version, last update, size, languages, category, the permissions each extension asks for, the data it says it collects, Featured and Established publisher badges, trader status and the publisher. Paste store links — searches with their filters, categories, collections, extension pages — or type search words, pick categories or list extension ids. No login, no browser.

**Why this one**

- 🔗 **Searches, categories, single extensions.** Paste a search with its filters (extensions or themes, minimum rating, Featured, Established publishers), a category in either order, the editors' picks, or any extension page. Or type search words and tick the categories here.
- ⚡ **Fast.** A live test run read 2,338 items with all their details — 1,000 Developer Tools, all 847 Dark & Black themes, 278 VPN extensions, 195 password managers from established publishers and 17 editors' picks — in 85 seconds.
- 🛡️ **Permissions and privacy disclosures.** Every item comes with the permissions and host permissions from its manifest, and — with details — the data types the developer says it handles (location, web history, website content…), the privacy policy link and whether the publisher declared itself a trader under EU consumer law.
- 🔒 **No developer contact data.** The store's data carries developers' e-mail addresses, phones and postal addresses; none of it is delivered. E-mail addresses and phone numbers written into descriptions are replaced with `[e-mail removed]` / `[phone removed]`.
- 💸 **You pay only for items delivered.** A link that is not a store list, an unknown id or a search with no results comes back as a free record with the reason.

### What you get

For every extension or theme:

| Field | What it is |
|---|---|
| `extensionId`, `name`, `url`, `type` | the item's 32-letter id, its name and page; `extension` or `theme` |
| `users`, `rating`, `ratingCount` | users as the store shows them (rounded: 700000), average stars (2 decimals) and number of ratings |
| `category`, `categoryPath` | e.g. Developer Tools, `extensions/productivity/developer` |
| `featured`, `establishedPublisher` | the store's Featured and Established publisher badges |
| `version`, `manifestVersion`, `permissions`, `hostPermissions` | from the extension's manifest |
| `shortDescription`, `website`, `icon`, `promoImage`, `createdAt` | the listing; `createdAt` is when the item was created in the store (from the store's data, not shown on the page) |
| `input`, `inputType`, `position`, `scrapedAt`, `status`, `error` | which input it came from, its place in the list, and why an input gave nothing |

With **Open every item for its details** (on by default) also:

| Field | What it is |
|---|---|
| `description` | the full description |
| `updatedAt`, `size`, `languages`, `minChromeVersion` | last update, download size ("479KiB"), language codes, oldest Chrome it runs on |
| `publisher`, `trader` | a trader's company name, or the "Offered by" name for everyone else; `trader` = the developer declared itself an EU trader |
| `dataCollected` | the data types the developer says the item handles (empty: it declares it collects nothing) |
| `privacyPolicyUrl`, `supportUrl`, `screenshots`, `video` | links from the page |

#### Example

A real record from a live run, 26 September 2026 (the Developer Tools category; some fields left out here, long ones cut short with "…"):

```json
{
  "input": "https://chromewebstore.google.com/category/extensions/productivity/developer",
  "inputType": "category",
  "position": 11,
  "extensionId": "aicmkgpgakddgnaphhhpliifpcfhicfo",
  "name": "Postman Interceptor",
  "url": "https://chromewebstore.google.com/detail/postman-interceptor/aicmkgpgakddgnaphhhpliifpcfhicfo",
  "type": "extension",
  "shortDescription": "Capture requests from any website and send them to Postman Client.",
  "category": "Developer Tools",
  "rating": 4.28,
  "ratingCount": 949,
  "users": 700000,
  "version": "3.2.1",
  "createdAt": "2014-02-11T12:24:44.000Z",
  "website": "postman.com",
  "featured": true,
  "establishedPublisher": true,
  "manifestVersion": 3,
  "permissions": ["webRequest", "nativeMessaging", "storage", "cookies", "scripting", "tabs"],
  "hostPermissions": ["*://*/**"],
  "description": "Postman Interceptor helps you send requests which use browser cookies through the Postman app. …",
  "updatedAt": "2025-08-24T04:55:30.000Z",
  "size": "479KiB",
  "languages": ["en"],
  "publisher": "Postman Inc.",
  "trader": true,
  "dataCollected": ["Web history"],
  "privacyPolicyUrl": "https://www.getpostman.com/licenses/privacy",
  "supportUrl": "https://github.com/postmanlabs/postman-app-support/issues",
  "minChromeVersion": "88",
  "video": "https://www.youtube.com/embed/MkyL9JomUYg?rel=0&wmode=opaque&enablejsapi=1",
  "status": "OK"
}
```

### How to use it

1. Paste **Chrome Web Store links** (searches, categories, collections or extension pages), and/or type **Search words**, tick **Categories**, or list **Extensions** by id.
2. For search words, choose **Extensions or themes**, **Minimum rating**, **Featured only** and **Established publishers only**; for categories, the **Category order**. Set the **Language** of names and descriptions (en, de, ja…).
3. Set **Max results per search**. Switch off **Open every item for its details** if the list fields are enough — it is faster.
4. Press **Start**, and download the results from the **Output** tab as JSON, CSV or Excel.

To follow a category or your competitors' extensions (users, ratings, versions, permissions), save your input as a task and schedule it daily or weekly.

You can also call it from the Apify API, from Make, Zapier or n8n, or from an AI agent through the Apify MCP server.

### Pricing

You are charged **per extension or theme delivered** — see the price on this page. Opening items for their details costs nothing extra, only time. Links that are not store lists, unknown ids and searches with no results are free. If your run has a **Maximum charge**, the Actor stops cleanly when it is reached.

### FAQ

**How many results per search?** The Chrome Web Store itself stops a search at a few hundred items: in the test runs "vpn" gave 278 and "ai" (4 stars and up) 746. Categories go much deeper — a live run read 10,000 extensions of the Tools category (list fields only) in 269 seconds, and there were more. For more from a search, add more search words or use categories.

**Are the filters checked?** Yes. Type, minimum rating, Featured and Established publishers are asked of the store and checked again on every result; duplicates the store repeats between pages are dropped.

**Why is `publisher` a person's name sometimes?** Developers who are not registered traders publish under the "Offered by" name they choose, and it is given as the store shows it. Their e-mail address, phone and postal address are never delivered. When that name is itself an e-mail address or a phone number, `publisher` is empty.

**Are reviews included?** No. Reviews are written by private people; this Actor delivers the rating and the number of ratings.

**Is this affiliated with Google or the Chrome Web Store?** No. This is an independent tool that reads public Chrome Web Store pages.

**Like it?** A short review on the Store page helps other people find this Actor. Something missing or broken? Tell us on the Issues tab — we read every one.

# Actor input Schema

## `startUrls` (type: `array`):

Links from chromewebstore.google.com: a search results page (with its filters), a category, a collection, or an extension's page. One per line.

## `searchTerms` (type: `array`):

Or search the store here without a link, e.g. password manager, pdf, dark theme. The search filters below apply to these.

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

Or list whole categories.

## `extensions` (type: `array`):

Or single extensions or themes: the 32-letter id (e.g. aapbdbdomjkkjkaonfhkkikfgjllcleb) or the link to its page.

## `itemType` (type: `string`):

For the search words above.

## `minRating` (type: `integer`):

Optional, for the search words above: only items rated at least this many stars (1-5).

## `featuredOnly` (type: `boolean`):

For the search words above: only items with the store's Featured badge.

## `establishedPublishersOnly` (type: `boolean`):

For the search words above: only items whose publisher has the store's Established publisher badge.

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

For the extension categories above.

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

The language of names and descriptions, as a code: en, de, fr, es, ja, pt-BR…

## `maxResultsPerSearch` (type: `integer`):

Stops each search, category or collection after this many items.

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

Adds the full description, last update, size, languages, publisher, trader status, the data it collects, privacy policy and screenshots. One more request per item, so slower. Single extensions always get them.

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

How many inputs to work on at the same time.

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

Used only to try again after a network error: the first try goes out directly.

## Actor input object example

```json
{
  "startUrls": [
    "https://chromewebstore.google.com/category/extensions/productivity/developer"
  ],
  "searchTerms": [
    "password manager"
  ],
  "itemType": "all",
  "featuredOnly": false,
  "establishedPublishersOnly": false,
  "sortBy": "recommended",
  "language": "en",
  "maxResultsPerSearch": 30,
  "includeDetails": true,
  "maxConcurrency": 3,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Every result as a JSON record, with a status for each input.

## `resultsCsv` (type: `string`):

The same records as CSV, for a spreadsheet.

# 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 = {
    "startUrls": [
        "https://chromewebstore.google.com/category/extensions/productivity/developer"
    ],
    "searchTerms": [
        "password manager"
    ],
    "maxResultsPerSearch": 30,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("highbrow_fame/chrome-web-store-extensions").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 = {
    "startUrls": ["https://chromewebstore.google.com/category/extensions/productivity/developer"],
    "searchTerms": ["password manager"],
    "maxResultsPerSearch": 30,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("highbrow_fame/chrome-web-store-extensions").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 '{
  "startUrls": [
    "https://chromewebstore.google.com/category/extensions/productivity/developer"
  ],
  "searchTerms": [
    "password manager"
  ],
  "maxResultsPerSearch": 30,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call highbrow_fame/chrome-web-store-extensions --silent --output-dataset

```

## MCP server setup

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

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/99PEYWH4Gnc2nhSM7/builds/ut1GoWWz0mTmpMbuc/openapi.json
