# Chrome Web Store Extension (`calm_builder/chrome-web-store-scraper`) Actor

Scrape Chrome Web Store extensions by keyword, category or URL. Get ratings, users, developer emails and phones, permissions and reviews (newest or lowest rated first), and download extension source code as .zip. Filter by rating, users and publisher.

- **URL**: https://apify.com/calm\_builder/chrome-web-store-scraper.md
- **Developed by:** [Coder](https://apify.com/calm_builder) (community)
- **Categories:** Developer tools, Automation
- **Stats:** 22 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 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.
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

## Chrome Web Store Scraper

Scrape extensions from the [Chrome Web Store](https://chromewebstore.google.com) by keyword, category, store home page or URL. For each extension you get the rating, user count, category rank, publisher and version. Turn on full details to also get the developer's **email, phone and address**, **permissions**, privacy practices and screenshots. You can also collect **user reviews**, sorted newest or lowest rated first, and **download an extension's source code** as a `.zip`.

No browser, no login, no Chrome Web Store API key.

### Who uses it

| Use case                                                                  | What to turn on                                                                          |
| ------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
| **Lead generation**: contact the publishers of extensions in your niche   | Keywords or categories + **Get full details**, then open the **Developer contacts** view |
| **Review mining**: find complaints, bugs and feature requests             | **Get reviews** with **Lowest rated first**                                              |
| **Market research**: size a niche, track rankings, spot rising extensions | Keywords or categories with **Minimum/Maximum users** and **Minimum/Maximum rating**     |
| **Security and compliance**: audit permissions and host access            | **Specific extensions** or **Download source code for**                                  |
| **Competitor monitoring**: follow versions, ratings and reviews over time | **Specific extensions** + a schedule                                                     |

### What you get

One row per extension. The same extension is saved once per run, even when several inputs find it.

| Always included                          | Added by **Get full details**                        | Added by **Get reviews**             | Added by **Download source code** |
| ---------------------------------------- | ---------------------------------------------------- | ------------------------------------ | --------------------------------- |
| Name, ID, store URL                      | Long description                                     | Reviewer name and avatar             | `.zip` of the extension's files   |
| Publisher, category, category rank       | Developer email, phone, address, legal name          | Star rating and text                 | File size and download link       |
| Rating, rating count, user count         | Website, DUNS number, EU trader status               | Date written and updated             |                                   |
| Featured and established-publisher flags | Permissions and host permissions                     | Helpful votes                        |                                   |
| Version, manifest version, last updated  | Privacy policy, data collected, privacy declarations | Extension version reviewed, language |                                   |
| Icon and cover image                     | Screenshots, languages, size, related extensions     |                                      |                                   |

The results have four ready-made views: **Overview**, **Developer contacts**, **Reviews** (one row per review) and **Source code**. Export any of them to CSV, Excel or JSON.

### Quick start

1. Add at least one input: **Search keywords**, **Categories**, **Include store home page picks**, **Specific extensions** or **Download source code for**.
2. Set how many extensions you want per keyword or category (default 10).
3. Optional: turn on **Get full details** and **Get reviews**.
4. Click **Start**. Rows appear in the dataset as they are saved.

**Find developer contacts for SEO extensions with 10,000+ users:**

```json
{
  "searchUrls": ["SEO", "keyword research"],
  "maxExtensionsPerSearch": 100,
  "minUsers": 10000,
  "fetchDetails": true
}
```

**Collect the latest 1-star reviews of two competitors:**

```json
{
  "directExtensions": [
    "gighmmpiobklfepjocnamgkkbiglidom",
    "https://chromewebstore.google.com/detail/adblock-plus-free-ad-bloc/cfhdojbkjhnklbpkdaibdccddilifddb"
  ],
  "fetchReviews": true,
  "maxReviews": 200,
  "reviewSort": "lowest_rated"
}
```

**Highest-rated developer tools from established publishers:**

```json
{
  "predefinedCategories": [
    "https://chromewebstore.google.com/category/extensions/productivity/developer"
  ],
  "categorySort": "highest_rated",
  "filterBy": "established_publishers",
  "maxExtensionsPerCategory": 50
}
```

### Input

#### What to scrape

| Field                             | Description                                                                                      |
| --------------------------------- | ------------------------------------------------------------------------------------------------ |
| **Search keywords**               | Keywords such as `AI assistant` or `password manager`. A Chrome Web Store search URL also works. |
| **Max extensions per keyword**    | How many extensions to save for each keyword.                                                    |
| **Categories**                    | One or more of the store's 18 categories, from Communication to Privacy & Security.              |
| **Category order**                | *Most popular* or *Highest rated*. With a limit set, this decides which extensions you get.      |
| **Max extensions per category**   | How many extensions to save for each category.                                                   |
| **Include store home page picks** | The extensions currently featured on the store's home page (about 50).                           |
| **Specific extensions**           | Extension URLs or 32-character IDs. These always include full details.                           |

#### Filters

These apply to keywords, categories and home page picks, not to specific extensions.

| Field                        | Description                                                                     |
| ---------------------------- | ------------------------------------------------------------------------------- |
| **Publisher filter**         | *All extensions*, *Featured only* or *Established publishers only*.             |
| **Minimum / Maximum rating** | Keep extensions within a star range, e.g. max `3.5` to find poorly rated ones.  |
| **Minimum / Maximum users**  | Keep extensions within a user range, e.g. max `5000` to find small or new ones. |

#### Details and reviews

| Field                         | Description                                                                     |
| ----------------------------- | ------------------------------------------------------------------------------- |
| **Get full details**          | Adds developer contacts, permissions, privacy practices, screenshots and more.  |
| **Get reviews**               | Adds user reviews to each extension with full details.                          |
| **Max reviews per extension** | How many reviews to save per extension.                                         |
| **Review order**              | *Newest first*, *Most relevant*, *Lowest rated first* or *Highest rated first*. |

#### Source code

**Download source code for** takes extension URLs or IDs. Each extension's installable files (manifest, JavaScript, HTML, CSS, images) are saved as `<extension ID>.zip` in the run's key-value store, and the row links to it. Extensions listed here are also scraped with full details if no other input finds them.

#### Region

**Store region** (default United States) sets the country the store is browsed from. Search results, category rankings and available extensions differ by country. Use the same region when comparing runs.

### Example output

A row with full details and one review. Long fields are shortened.

```json
{
  "extensionId": "gighmmpiobklfepjocnamgkkbiglidom",
  "name": "AdBlock — block ads across the web",
  "shortDescription": "Block ads on YouTube and your favorite sites for free",
  "publisherName": "AdBlock — block ads across the web",
  "developerLegalName": "Matt Maier",
  "developerEmail": "help@getadblock.com",
  "developerPhone": "+17137146914",
  "developerAddress": "12333 Sowden Road, Suite B # 99623, Houston, TX 77080-2059, US",
  "developerWebsite": "http://getadblock.com/",
  "dunsNumber": "080189229",
  "isEuTrader": true,
  "category": "productivity/workflow",
  "categoryRank": 4,
  "rating": 4.5,
  "ratingCount": 290290,
  "userCount": 64000000,
  "featured": true,
  "establishedPublisher": true,
  "version": "6.46.1",
  "manifestVersion": 3,
  "size": "76.22MiB",
  "lastUpdated": "2026-09-22T15:24:56.512Z",
  "storeUrl": "https://chromewebstore.google.com/detail/x/gighmmpiobklfepjocnamgkkbiglidom",
  "manifestSummary": {
    "author": "Adblock, Inc.",
    "permissions": [
      "alarms",
      "contextMenus",
      "declarativeNetRequestWithHostAccess",
      "idle"
    ],
    "hostPermissions": ["<all_urls>"],
    "optionalPermissions": ["management"]
  },
  "privacyPolicyUrl": "https://getadblock.com/privacy/",
  "privacyDeclarations": {
    "notSoldToThirdParties": true,
    "notUsedForUnrelatedPurposes": true,
    "notUsedForCreditworthiness": true
  },
  "reviews": [
    {
      "authorName": "Derek FB",
      "rating": 1,
      "text": "This has recently stopped working…",
      "createdAt": "2026-09-08T18:58:46.814Z",
      "helpfulUp": 15,
      "extensionVersion": "6.45.5",
      "locale": "en"
    }
  ],
  "reviewCount": 1,
  "sourceCode": [],
  "sourceType": "direct",
  "warnings": [],
  "scrapedAt": "2026-09-26T07:25:24.008Z"
}
```

`sourceType` says which input found the row: `search`, `category`, `home`, `direct` or `source-code`. `warnings` lists anything that could not be loaded for that extension, such as reviews. The row itself is still saved.

### Pricing

You pay for results, not for time:

- each extension saved
- each extension with full details
- each review
- each source code download

Extensions removed by your filters are never charged, and details, reviews and downloads are only charged when they arrive. The exact prices for your plan are on the **Pricing** tab.

### Free plan limits

On the Apify free plan, each run is capped so you can try every feature:

| Limit                                         | Free plan |
| --------------------------------------------- | --------- |
| Search keywords                               | 2         |
| Categories                                    | 2         |
| Extensions per keyword, category or home page | 10        |
| Specific extensions                           | 5         |
| Reviews per extension                         | 5         |
| Source code downloads                         | 1         |

The run log says when a limit was applied. Paid plans have no caps.

### Good to know

- **Contact details depend on the publisher.** Publishers registered as traders in the EU show an address and phone number, and many others list an email. Small hobby extensions often show none.
- **Fewer results than requested** means the store has no more matching extensions, or your filters removed the rest. The run log tells you which.
- **Results change over time.** Rankings, ratings and featured picks move daily. Schedule the Actor to track them.
- **Some extensions cannot be downloaded,** for example ones that were removed from the store. The row is still saved, with a warning.
- **Only public data** shown on the Chrome Web Store is collected. Use it in line with applicable laws and the [Chrome Web Store policies](https://developer.chrome.com/docs/webstore/program-policies/).

### FAQ

**Can I scrape every extension in a category?**
Yes. Set **Max extensions per category** high (up to 10,000). The store lists a limited number per category, and the Actor stops when the list ends.

**How do I get only the bad reviews?**
Turn on **Get reviews** and pick **Lowest rated first**. 1-star reviews come first, then 2-star, and so on.

**Does it find developer emails for every extension?**
Only when the publisher lists one on the store. Check the **Developer contacts** view, or filter the export on `developerEmail`.

**Can I monitor a list of extensions daily?**
Put them in **Specific extensions**, save the input as a task and schedule it. Each run gives you the current version, rating, users and newest reviews.

**Is the source code the real extension?**
Yes. It is the same package Chrome installs, unpacked and re-zipped. Minified code stays minified.

### Support

Found a bug or missing field? Open an issue on the **Issues** tab and include your input and a run link.

# Actor input Schema

## `searchUrls` (type: `array`):

Keywords to search the Chrome Web Store for, e.g. `SEO`, `AI assistant`, `password manager`. A full Chrome Web Store search URL also works.

## `maxExtensionsPerSearch` (type: `integer`):

How many extensions to save for each keyword.

## `predefinedCategories` (type: `array`):

Store categories to scrape. Pick one or more.

## `categorySort` (type: `string`):

The order the store lists category extensions in. With a limit set, this decides which extensions you get.

## `maxExtensionsPerCategory` (type: `integer`):

How many extensions to save for each category.

## `scrapeHomePage` (type: `boolean`):

Also save the extensions currently featured on the Chrome Web Store home page (about 50 picks, changes over time).

## `maxExtensionsFromHomePage` (type: `integer`):

How many home page picks to save.

## `directExtensions` (type: `array`):

Extension URLs or 32-character IDs, e.g. `https://chromewebstore.google.com/detail/adblock/gighmmpiobklfepjocnamgkkbiglidom` or `gighmmpiobklfepjocnamgkkbiglidom`. These always include full details.

## `filterBy` (type: `string`):

Keep only featured extensions, or only extensions from established publishers. Applies to keywords, categories and home page picks.

## `minRating` (type: `number`):

Skip extensions rated below this, e.g. `4`.

## `maxRating` (type: `number`):

Skip extensions rated above this, e.g. `3.5` to find poorly rated ones.

## `minUsers` (type: `integer`):

Skip extensions with fewer users than this.

## `maxUsers` (type: `integer`):

Skip extensions with more users than this, e.g. to find small or new extensions.

## `fetchDetails` (type: `boolean`):

Add the full listing to keyword, category and home page results: long description, developer email, phone and address, permissions, privacy practices, screenshots, languages and related extensions. Specific extensions always include this.

## `fetchReviews` (type: `boolean`):

Add user reviews to each extension that has full details (reviewer, rating, text, date, helpful votes and the extension version reviewed).

## `maxReviews` (type: `integer`):

How many reviews to save for each extension.

## `reviewSort` (type: `string`):

Which reviews come first. Use *Lowest rated first* to collect complaints and bug reports.

## `sourceCodeExtensions` (type: `array`):

Extension URLs or IDs to download the source code of. Each is saved as a `.zip` file in the run's key-value store and linked from its record. Extensions listed here are scraped with full details even if no other input finds them.

## `proxyCountry` (type: `string`):

The country to browse the Chrome Web Store from. Search results, category rankings and which extensions are available differ by country.

## Actor input object example

```json
{
  "searchUrls": [
    "SEO"
  ],
  "maxExtensionsPerSearch": 10,
  "categorySort": "popular",
  "maxExtensionsPerCategory": 10,
  "scrapeHomePage": false,
  "maxExtensionsFromHomePage": 50,
  "filterBy": "all",
  "fetchDetails": false,
  "fetchReviews": false,
  "maxReviews": 10,
  "reviewSort": "newest",
  "proxyCountry": "us"
}
```

# Actor output Schema

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

No description

# 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 = {
    "searchUrls": [
        "SEO"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("calm_builder/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 = { "searchUrls": ["SEO"] }

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

```

## MCP server setup

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