# Chrome Web Store Scraper – Extensions, Users, Ratings & Reviews (`openharvest/chrome-web-store-scraper`) Actor

Chrome Web Store scraper: search results, category listings and Chrome extension details (users, rating, version, last update, size, permissions, developer, featured and established-publisher badges, privacy policy) plus extension reviews with developer replies. No login.

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

## Pricing

from $1.00 / 1,000 extension scrapeds

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, Users, Ratings & Reviews

Chrome Web Store scraper: search results, category listings and Chrome extension details (users, rating, version, last update, size, permissions, developer, featured and established-publisher badges, privacy policy) plus extension reviews with developer replies. No login.

**Price: $1 per 1,000 extensions and $0.30 per 1,000 reviews.** No login, no browser, no API key.

### What does Chrome Web Store Scraper do?

It reads chromewebstore.google.com through the same public JSON endpoints the store website uses, with no browser: one request returns details for 10 extensions or 50 reviews. Four modes:

| Mode | Input | Output |
|---|---|---|
| `search` | keywords, e.g. `password manager` | every matching extension (hundreds per keyword) |
| `category` | `productivity/developer`, `lifestyle/shopping`, `themes`, `all`… | top extensions/themes of the category |
| `extensionDetails` | extension IDs or URLs | full details of those extensions |
| `reviews` | extension IDs or URLs | user reviews (newest or most helpful first) |

For every extension you get:

- **Identity** – extension ID, store URL, name, item type (extension / theme), icon, promo image, screenshots and video links
- **Developer** – publisher name and verified website; **Established publisher** badge (`verifiedPublisher`), **Featured** badge, made-by-Google flag, EU trader status
- **Popularity** – users, average rating, number of ratings
- **Tech details** – version, last updated, first published, size, languages, manifest version, minimum Chrome version
- **Permissions & privacy** – API permissions, host permissions, optional permissions, declared data collection (e.g. "Website content", "Authentication information"), privacy policy and support URLs
- **Texts** – short and full description, category

For every review: extension ID and name, review ID, author display name, stars, date, text, helpful count, extension version reviewed, language and the developer's reply.

### Use cases

- **Competitor & market research** – map every extension in a niche (e.g. "AI writing", "ad blocker") with users, ratings and update frequency.
- **Security & compliance audits** – check which permissions and host access extensions request and what data they declare to collect.
- **Lead generation** – find extension publishers with verified websites in a category.
- **Product feedback & sentiment analysis** – export reviews of your own or competitors' extensions for NLP, support or roadmap work.
- **Monitoring** – schedule daily runs to track rating, user count and version changes.
- **AI agents** – let an assistant look up extension facts and reviews on demand.

### How to use

1. Click **Try for free**.
2. Pick a **mode**: *Search results*, *Category listing*, *Extension details* or *Reviews*.
3. Fill the matching field – **Search keywords**, **Categories** or **Extension IDs or URLs**.
4. Set **Max extensions** / **Max reviews per extension** and click **Start**.

### Input

| Field | Description |
|---|---|
| `mode` | `search` (default), `category`, `extensionDetails` or `reviews`. |
| `searchQueries` | Keywords for `search` mode. Default: `password manager`. |
| `categories` | For `category` mode: `productivity/communication`, `productivity/workflow`, `productivity/tools`, `productivity/education`, `productivity/developer`, `lifestyle/shopping`, `lifestyle/news`, `lifestyle/entertainment`, `lifestyle/games`, `lifestyle/social`, `lifestyle/art`, `lifestyle/well_being`, `lifestyle/travel`, `lifestyle/household`, `lifestyle/fun`, `make_chrome_yours/accessibility`, `make_chrome_yours/functionality`, `make_chrome_yours/privacy`, `all`, `themes` – or a category URL. |
| `extensions` | Extension IDs or store URLs for `extensionDetails` / `reviews` (old `chrome.google.com/webstore` links work). |
| `includeDetails` | Load full details for search/category results (default `true`, same price). |
| `includeReviews` | Also scrape reviews for each extension found in the other modes. |
| `maxItems` | Max extensions in total (default 30, `0` = no limit). |
| `maxReviewsPerExtension` | Max reviews per extension (default 50, `0` = all). |
| `reviewsSort` | `newest` (default) or `helpful`. |
| `language` | Store language for names and descriptions (`en`, `de`, `fr`, `ja`…). |

Example input – all developer tools with their 20 newest reviews:

```json
{
    "mode": "category",
    "categories": ["productivity/developer"],
    "maxItems": 200,
    "includeReviews": true,
    "maxReviewsPerExtension": 20
}
```

### Output

Real extension row (`extensionDetails` mode, long lists shortened):

```json
{
    "type": "extension",
    "extensionId": "kbfnbcaeplbcioakkpcpgfkobkghlhen",
    "url": "https://chromewebstore.google.com/detail/grammarly-ai-writing-assistant-and-grammar-checker-app/kbfnbcaeplbcioakkpcpgfkobkghlhen",
    "name": "Grammarly: AI Writing Assistant and Grammar Checker App",
    "itemType": "extension",
    "developer": "Grammarly",
    "developerWebsite": "http://grammarly.com/",
    "verifiedPublisher": true,
    "featured": true,
    "byGoogle": false,
    "isTrader": true,
    "users": 41000000,
    "rating": 4.49,
    "ratingCount": 43146,
    "version": "14.1336.0",
    "updated": "2026-10-07T12:53:29.215Z",
    "publishedAt": "2012-10-22T10:17:01.775Z",
    "size": "17.27MiB",
    "languages": ["English", "..."],
    "category": "Communication",
    "categorySlug": "productivity/communication",
    "shortDescription": "Grammarly for Chrome helps you write with confidence. Get AI support for grammar, clarity, and tone, from first draft to final edit.",
    "description": "Grammarly for Chrome is your always-on AI partner for clearer, more compelling communication...",
    "permissions": ["scripting", "sidePanel", "tabs", "notifications", "cookies", "identity", "storage"],
    "hostPermissions": ["http://*/*", "https://*/*", "<all_urls>"],
    "optionalPermissions": ["nativeMessaging", "clipboardRead"],
    "manifestVersion": 3,
    "minChromeVersion": "98",
    "dataCollected": ["Personally identifiable information", "Personal communications", "Location", "User activity", "Website content"],
    "privacyPolicyUrl": "https://www.grammarly.com/privacy-policy",
    "supportUrl": "https://support.grammarly.com/",
    "iconUrl": "https://lh3.googleusercontent.com/Ywdz5mn9q2Mx76DU45LSH-Pv5OGpqk8QAOY3lT1AWScMTZYQtAhqhVjtY5I2JZK530QIycLZooe2a0k3quGqYUaZ",
    "screenshots": ["https://lh3.googleusercontent.com/n0HvuXAcHjTB1BehzD5gsVYwODPPZ5umkkr4kdi4yPu6Fk5xH_Zv-nGxIEqYRahC7YmLelgKBjo6Jg4lZ9xaLCBl-wE"],
    "videoUrls": [],
    "detailsIncluded": true,
    "source": "extension IDs",
    "scrapedAt": "2026-10-07T21:16:06.112Z"
}
```

Real review row (author name shortened here):

```json
{
    "type": "review",
    "extensionId": "kbfnbcaeplbcioakkpcpgfkobkghlhen",
    "extensionName": "Grammarly: AI Writing Assistant and Grammar Checker App",
    "reviewId": "7e9df60b-0ddd-41fb-b47b-e3c67f1f09b7",
    "author": "Keith A.",
    "rating": 5,
    "date": "2026-10-06T16:47:01.197Z",
    "updatedAt": "2026-10-06T16:47:01.197Z",
    "text": "I've been using Grammarly for a few years, and it's helped me publish five books so far. Thank You",
    "helpfulCount": 1,
    "extensionVersion": "14.1335.0",
    "language": "en",
    "developerReply": null,
    "developerReplyDate": null
}
```

Notes:

- `users` is the rounded number the store displays (e.g. 41,000,000).
- `verifiedPublisher` = the **Established publisher** badge ("The publisher has a good record with no history of violations"); `featured` = the **Featured** badge ("Follows recommended practices").
- With `includeDetails: false`, search/category rows contain listing data only (`detailsIncluded: false`; no full description, size, languages, screenshots or privacy fields; `developer` comes from the manifest when available).
- Rows with `"type": "error"` (invalid IDs, removed extensions, unknown categories) are **free**.
- The Output tab has ready-made views: **Extensions**, **Permissions & privacy**, **Reviews** and **Errors**. A run summary is saved as `SUMMARY` in the key-value store.

### Pricing

Pay-per-event – you pay only for results saved to the dataset. Platform usage is included.

| Event | Price | When it is charged |
|---|---|---|
| `extension` | **$0.001** per extension ($1 / 1,000) | Each extension or theme row (details included at no extra cost) |
| `review` | **$0.0003** per review ($0.30 / 1,000) | Each review row |
| Errors | **Free** | Invalid IDs, removed extensions, unknown categories |

Examples: 30 search results ≈ **$0.03** · 1,000 extensions ≈ **$1** · 10,000 reviews ≈ **$3**.

Set **Maximum cost per run** in the run options – the scraper stops cleanly when the budget is reached.

### Use with AI agents (MCP)

Add this Actor to the [Apify MCP server](https://mcp.apify.com) and Claude, ChatGPT, Cursor or any MCP client can call it as a tool. Ask, for example: *"Which permissions does the Grammarly extension request, and what do its latest reviews complain about?"* The agent can call it with:

```json
{
    "mode": "extensionDetails",
    "extensions": ["kbfnbcaeplbcioakkpcpgfkobkghlhen"],
    "includeReviews": true,
    "maxReviewsPerExtension": 30
}
```

### FAQ

**How many results does a search return?**
The store returns everything matching the keyword – usually several hundred extensions (e.g. ~520 for "password manager"). Set `maxItems` to `0` to get them all.

**How many reviews can I get?**
All written reviews the store shows for an extension. Set `maxReviewsPerExtension` to `0` for all.

**Where do I find an extension ID?**
It is the 32-letter code at the end of the store URL: `https://chromewebstore.google.com/detail/name/`**`nngceckbapebfimnlniiiahkandclblb`**. You can paste the whole URL.

**Does it return developer emails or addresses?**
No. Only the public publisher name and website are returned. Reviewer avatars and profile IDs are not exported either – only the display name.

**Can I get results in another language?**
Yes – set `language` (e.g. `de`). Names and descriptions are returned as the store shows them in that language.

**Do I need a proxy or Google account?**
No.

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

This Actor collects only **publicly available** information shown on chromewebstore.google.com without login. It does not export developer contact details, reviewer profile pictures or account IDs. Reviews are personal opinions of real people – use them responsibly (e.g. aggregated analysis), respect Google's Terms of Service and data-protection laws such as GDPR, and do not use the data for spam. If unsure, consult a lawyer.

### Related actors

- Google Play Reviews Scraper – Apps, Search & Top Charts
- App Store Reviews Scraper – iOS Apps, Search & Top Charts
- Shopify App Store Scraper – Apps, Pricing Plans & App Reviews
- Website Tech Stack Detector – Bulk CMS, Analytics & Frameworks

### Support

Found a bug or a missing field? Open an issue on the Actor's **Issues** tab.

# Actor input Schema

## `mode` (type: `string`):

search = Chrome Web Store search results for your keywords; category = top extensions of a category; extensionDetails = full details for the extension IDs/URLs you list; reviews = user reviews of the extensions you list.

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

One or more searches, e.g. "password manager", "ad blocker", "ChatGPT". Each keyword is searched separately.

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

Category slugs or names: productivity/communication, productivity/workflow, productivity/tools, productivity/education, productivity/developer, lifestyle/shopping, lifestyle/news, lifestyle/entertainment, lifestyle/games, lifestyle/social, lifestyle/art, lifestyle/well_being, lifestyle/travel, lifestyle/household, lifestyle/fun, make_chrome_yours/accessibility, make_chrome_yours/functionality, make_chrome_yours/privacy, plus "all" (all extensions) and "themes". Category URLs work too.

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

32-letter extension IDs (e.g. nngceckbapebfimnlniiiahkandclblb) or Chrome Web Store detail URLs (https://chromewebstore.google.com/detail/bitwarden-password-manager/nngceckbapebfimnlniiiahkandclblb). Old chrome.google.com/webstore links work too.

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

Load each result's full detail data (developer, long description, last updated, size, languages, screenshots, privacy policy, data collection). Fast (10 extensions per request) and same price. Turn off for the quickest listing-only output.

## `includeReviews` (type: `boolean`):

In search, category and extensionDetails modes, also scrape up to "Max reviews per extension" reviews for every extension (reviews are charged separately).

## `maxItems` (type: `integer`):

Maximum number of extensions to return in total (0 = no limit). You pay only for results actually returned.

## `maxReviewsPerExtension` (type: `integer`):

Maximum number of reviews per extension (0 = all available reviews).

## `reviewsSort` (type: `string`):

Newest reviews first, or most helpful first.

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

Language code for names and descriptions (e.g. en, de, fr, es, ja, pt-BR). Default en.

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

Not needed in normal use. Enable Apify Proxy if you see blocking or rate limits.

## Actor input object example

```json
{
  "mode": "search",
  "searchQueries": [
    "password manager",
    "ad blocker"
  ],
  "categories": [
    "productivity/developer",
    "make_chrome_yours/privacy"
  ],
  "extensions": [
    "nngceckbapebfimnlniiiahkandclblb",
    "https://chromewebstore.google.com/detail/ublock-origin-lite/ddkjiahejlhfcafbddmgiahcphecmpfh"
  ],
  "includeDetails": true,
  "includeReviews": false,
  "maxItems": 100,
  "maxReviewsPerExtension": 200,
  "reviewsSort": "newest",
  "language": "de",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

All scraped items in the default dataset (JSON, CSV, Excel and more via the dataset export).

## `files` (type: `string`):

Records saved in the default key-value store, e.g. the run summary.

# 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 = {
    "mode": "search",
    "searchQueries": [
        "password manager"
    ],
    "maxItems": 30,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("openharvest/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 = {
    "mode": "search",
    "searchQueries": ["password manager"],
    "maxItems": 30,
    "proxyConfiguration": { "useApifyProxy": False },
}

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

```

## MCP server setup

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