# Chrome Web Store public extension scraper (`googleapi/chrome-web-store-scraper`) Actor

Extracts rich public Chrome Web Store extension records from bounded search and detail pages, with opt-in detail enrichment.

- **URL**: https://apify.com/googleapi/chrome-web-store-scraper.md
- **Developed by:** [Google API](https://apify.com/googleapi) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.99 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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 does the Chrome Web Store Scraper do?

Search the [Chrome Web Store](https://chromewebstore.google.com/) or inspect selected public extension listings, returning source-backed identity, description, category, popularity, publisher links, release, manifest, permission, and media data. It does not download extension packages, inspect installed extensions, or access account-only information.

### Why use the Chrome Web Store Scraper?

Use the Actor to build extension catalogs, compare public listing metadata, audit publisher and policy links, or monitor release and permission changes. Search and detail modes share one normalized business-record shape, including flat fields for exports and grouped objects for downstream applications. Apify runs, schedules, API access, integrations, and run history can automate collection and monitoring.

### What data can the Chrome Web Store Scraper extract?

| Data group | Representative properties | Types |
| --- | --- | --- |
| Identity and content | `extensionId`, `extensionUrl`, `listingUrl`, `extensionName`, `summary`, `description` | strings |
| Description metrics and category | `descriptionCharacterCount`, `descriptionWordCount`, `extensionCategory`, `categoryPath`, `categoryDetails.breadcrumbs` | integers, strings, string arrays |
| Popularity | `rating`, `ratingLabel`, `reviewCount`, `userCount`, `userCountText` | number, integers, strings |
| Publisher and policies | `developerEmail`, `websiteUrl`, `privacyPolicyUrl`, `publisherLinks[]`, `publisherDetails` | strings, objects, object arrays |
| Release and manifest | `version`, `updatedAt`, `updatedAtText`, `sizeBytes`, `permissions[]`, `hostPermissions[]`, `permissionsDetails` | date, strings, integers, arrays, objects |
| Media | `extensionIconUrl`, `imageUrl`, `imageUrls[]`, `mediaDetails.images` | URLs and arrays |
| Grouped details | `identityDetails`, `categoryDetails`, `ratingDetails`, `publisherDetails`, `releaseDetails`, `permissionsDetails`, `mediaDetails` | objects |

Fields are included only when supported by the public page. Detail-enriched records commonly contain 20 or more properties; the live example below contains 49 top-level properties. The source may omit publisher, language, or manifest values, so the Actor does not infer missing details.

### How to scrape the Chrome Web Store

1. Open the Actor's **Input** tab and choose `search` or `details` mode.
2. For search, enter a query. To choose exact sources instead, provide official Store URLs or extension IDs; explicit sources take precedence over the generated query URL.
3. Set the item and page limits. Turn on detail fetching only when search-result data alone is not enough.
4. Start the Actor and inspect the dataset and run summary.

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

Apify run costs depend on the account plan and actual resource use; this Actor does not promise a fixed price. Each search page uses a request, and each attempted detail enrichment can use one more. Larger item/page limits, detail requests, response sizes, and slower or retried requests can increase run time and resource use. Start with a small `maxItems` and `maxPages` to estimate your workload.

### Input

See the Actor's Input tab for the complete configuration. Supported controls are:

- `mode`: `search` (default) or `details`.
- `query`: search text (default `adblock`, maximum 200 characters); used when explicit sources are not supplied.
- `extensionIds`: up to 50 public 32-character extension IDs.
- `startUrls`: up to 50 objects shaped as `{"url":"https://chromewebstore.google.com/search/..."}` or an official extension detail URL. These sources take precedence over the generated query source.
- `page`: one-based starting search page, from 1 to 1000 (default 1).
- `maxPages`: pages per search source, from 1 to 10 (default 1).
- `maxItems`: global maximum normal records across sources, from 1 to 100 (default 10).
- `includeDetails`: fetch additional detail pages for search results (default `false`). A direct detail URL or ID is parsed regardless of this option.
- `maxDetailRequests`: maximum detail requests across the run, from 0 to 100 (default 10).
- `maxRequests`: hard total request cap across search and detail pages, from 1 to 200 (default 21 with default limits). If omitted, runtime adjusts the default to the configured item, detail, and page limits.
- `includeMedia` and `includePageText`: keep public image URLs and listing text (both default `true`).
- `language`: Store locale (default `en-US`, maximum 20 characters).
- `proxyConfiguration`: optional explicit Apify or custom proxy routing. Requests are direct when omitted; an empty configuration is rejected, and a configured proxy failure does not silently fall back to direct access.

Example search input:

```json
{
  "mode": "search",
  "query": "ad blocker",
  "maxItems": 10,
  "maxPages": 1,
  "includeDetails": true,
  "maxDetailRequests": 10,
  "maxRequests": 11,
  "includeMedia": true,
  "includePageText": true,
  "language": "en-US"
}
```

`maxItems` is global, `maxPages` is per search source, and detail/request caps apply across the run. Records are deduplicated by extension ID. `maxRequests` includes both search and detail requests. Detail fetching is opt-in to limit additional page requests.

### Output

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

This illustrative record combines common listing and detail fields. Listing counts, versions, and dates can change:

```json
{
  "extensionId": "gighmmpiobklfepjocnamgkkbiglidom",
  "extensionUrl": "https://chromewebstore.google.com/detail/gighmmpiobklfepjocnamgkkbiglidom",
  "listingUrl": "https://chromewebstore.google.com/detail/adblock-%E2%80%94-block-ads-acros/gighmmpiobklfepjocnamgkkbiglidom",
  "extensionName": "AdBlock — block ads across the web",
  "description": "Block ads on YouTube and your favorite sites for free",
  "summary": "Block ads on YouTube and your favorite sites for free",
  "rating": 4.473243997381928,
  "ratingLabel": "4.47 out of 5",
  "reviewCount": 290290,
  "userCount": 64000000,
  "extensionCategory": "workflow",
  "categoryPath": "productivity/workflow",
  "externalLinkUrls": [
    "https://www.dnb.com/duns.html",
    "https://getadblock.com/privacy/",
    "https://getadblock.com/support/"
  ],
  "externalLinkCount": 3,
  "version": "6.46.1",
  "manifestName": "__MSG_name__",
  "manifestAuthor": "Adblock, Inc.",
  "manifestVersion": "6.46.1",
  "manifestVersionNumber": 3,
  "permissions": [
    "alarms",
    "contextMenus",
    "declarativeNetRequestWithHostAccess",
    "idle",
    "notifications",
    "scripting",
    "storage",
    "tabs",
    "unlimitedStorage",
    "webNavigation",
    "webRequest"
  ],
  "permissionCount": 11,
  "manifestPermissions": [
    "alarms",
    "contextMenus",
    "declarativeNetRequestWithHostAccess",
    "idle",
    "notifications",
    "scripting",
    "storage",
    "tabs",
    "unlimitedStorage",
    "webNavigation",
    "webRequest"
  ],
  "manifestPermissionCount": 11,
  "hostPermissions": ["<all_urls>"],
  "hostPermissionCount": 1,
  "manifestHasBackground": true,
  "imageUrl": "https://lh3.googleusercontent.com/3WssruYpy1oFSsMEQol5IZFGPYI7uYgwfekPl85NqKaUxu2bJsveNdO9oII2fYeBgznWbL-X5AtBidNa9ddFowwd7pM",
  "extensionIconUrl": "https://lh3.googleusercontent.com/mgNKV-3VMXD556WVUiWSbcukQQN-il4Zlqq03efTjG2B5j9YP7Fxr3idTQ_G0JFD7E6o4TMwvTQTleDn_8UdFLf5VQ",
  "imageUrls": [
    "https://lh3.googleusercontent.com/mgNKV-3VMXD556WVUiWSbcukQQN-il4Zlqq03efTjG2B5j9YP7Fxr3idTQ_G0JFD7E6o4TMwvTQTleDn_8UdFLf5VQ",
    "https://lh3.googleusercontent.com/3WssruYpy1oFSsMEQol5IZFGPYI7uYgwfekPl85NqKaUxu2bJsveNdO9oII2fYeBgznWbL-X5AtBidNa9ddFowwd7pM",
    "https://lh3.googleusercontent.com/mgNKV-3VMXD556WVUiWSbcukQQN-il4Zlqq03efTjG2B5j9YP7Fxr3idTQ_G0JFD7E6o4TMwvTQTleDn_8UdFLf5VQ=s128-rj-sc0x00ffffff"
  ],
  "imageCount": 3,
  "position": 1,
  "descriptionCharacterCount": 53,
  "descriptionWordCount": 10,
  "userCountText": "64,000,000",
  "developerEmail": "help@getadblock.com",
  "privacyPolicyUrl": "https://getadblock.com/privacy/",
  "publisherLinks": [
    {
      "label": "Learn more",
      "type": "other",
      "linkUrl": "https://www.dnb.com/duns.html",
      "domain": "www.dnb.com"
    },
    {
      "label": "privacy policy",
      "type": "privacy_policy",
      "linkUrl": "https://getadblock.com/privacy/",
      "domain": "getadblock.com"
    },
    {
      "label": "support site",
      "type": "support",
      "linkUrl": "https://getadblock.com/support/",
      "domain": "getadblock.com"
    }
  ],
  "hasPrivacyPolicy": true,
  "updatedAt": "2026-09-22",
  "updatedAtText": "September 22, 2026",
  "size": "76.22MiB",
  "sizeBytes": 79922463,
  "identityDetails": {
    "extensionId": "gighmmpiobklfepjocnamgkkbiglidom",
    "canonicalUrl": "https://chromewebstore.google.com/detail/gighmmpiobklfepjocnamgkkbiglidom",
    "listingUrl": "https://chromewebstore.google.com/detail/adblock-%E2%80%94-block-ads-acros/gighmmpiobklfepjocnamgkkbiglidom",
    "name": "AdBlock — block ads across the web",
    "summary": "Block ads on YouTube and your favorite sites for free",
    "description": "Block ads on YouTube and your favorite sites for free"
  },
  "categoryDetails": {
    "extensionCategory": "workflow",
    "path": "productivity/workflow",
    "breadcrumbs": ["productivity", "workflow"]
  },
  "ratingDetails": {
    "average": 4.473243997381928,
    "label": "4.47 out of 5",
    "reviewCount": 290290,
    "userCount": 64000000,
    "userCountText": "64,000,000"
  },
  "publisherDetails": {
    "email": "help@getadblock.com",
    "privacyPolicyUrl": "https://getadblock.com/privacy/",
    "publisherLinks": [
      {
        "label": "Learn more",
        "type": "other",
        "linkUrl": "https://www.dnb.com/duns.html",
        "domain": "www.dnb.com"
      },
      {
        "label": "privacy policy",
        "type": "privacy_policy",
        "linkUrl": "https://getadblock.com/privacy/",
        "domain": "getadblock.com"
      },
      {
        "label": "support site",
        "type": "support",
        "linkUrl": "https://getadblock.com/support/",
        "domain": "getadblock.com"
      }
    ]
  },
  "releaseDetails": {
    "version": "6.46.1",
    "updatedAt": "2026-09-22",
    "updatedAtText": "September 22, 2026",
    "size": "76.22MiB",
    "sizeBytes": 79922463
  },
  "permissionsDetails": {
    "permissions": [
      "alarms",
      "contextMenus",
      "declarativeNetRequestWithHostAccess",
      "idle",
      "notifications",
      "scripting",
      "storage",
      "tabs",
      "unlimitedStorage",
      "webNavigation",
      "webRequest"
    ],
    "permissionCount": 11,
    "manifestName": "__MSG_name__",
    "manifestAuthor": "Adblock, Inc.",
    "manifestVersion": "6.46.1",
    "manifestVersionNumber": 3,
    "manifestPermissions": [
      "alarms",
      "contextMenus",
      "declarativeNetRequestWithHostAccess",
      "idle",
      "notifications",
      "scripting",
      "storage",
      "tabs",
      "unlimitedStorage",
      "webNavigation",
      "webRequest"
    ],
    "manifestPermissionCount": 11,
    "hostPermissions": ["<all_urls>"],
    "hostPermissionCount": 1,
    "hasBackground": true
  },
  "mediaDetails": {
    "iconUrl": "https://lh3.googleusercontent.com/mgNKV-3VMXD556WVUiWSbcukQQN-il4Zlqq03efTjG2B5j9YP7Fxr3idTQ_G0JFD7E6o4TMwvTQTleDn_8UdFLf5VQ",
    "primaryImageUrl": "https://lh3.googleusercontent.com/3WssruYpy1oFSsMEQol5IZFGPYI7uYgwfekPl85NqKaUxu2bJsveNdO9oII2fYeBgznWbL-X5AtBidNa9ddFowwd7pM",
    "images": [
      "https://lh3.googleusercontent.com/mgNKV-3VMXD556WVUiWSbcukQQN-il4Zlqq03efTjG2B5j9YP7Fxr3idTQ_G0JFD7E6o4TMwvTQTleDn_8UdFLf5VQ",
      "https://lh3.googleusercontent.com/3WssruYpy1oFSsMEQol5IZFGPYI7uYgwfekPl85NqKaUxu2bJsveNdO9oII2fYeBgznWbL-X5AtBidNa9ddFowwd7pM",
      "https://lh3.googleusercontent.com/mgNKV-3VMXD556WVUiWSbcukQQN-il4Zlqq03efTjG2B5j9YP7Fxr3idTQ_G0JFD7E6o4TMwvTQTleDn_8UdFLf5VQ=s128-rj-sc0x00ffffff"
    ],
    "imageCount": 3
  }
}
```

The `updatedAt` value is date-only because the Store exposes a date rather than a precise time. Optional properties may be absent when unavailable.

### Tips and advanced options

- Start with small `maxItems`, `maxPages`, and `maxDetailRequests` values, then increase them as needed.
- `includeDetails` is off by default to limit requests. Search rows still retain structured public fields embedded in the result page.
- The `maxRequests` ceiling covers search and detail requests together. When it is reached, the Actor stops scheduling additional requests.
- Media and page text are on by default; turn them off if downstream processing does not need them.
- The Actor follows bounded redirects only on official Chrome Web Store HTTPS hosts. It does not log in, solve CAPTCHAs, fingerprint-spoof, fetch publisher websites, or download extension packages.

### FAQ, support, and responsible use

- **Why is a detail field missing?** The public Store page may not expose it, or a detail request may have failed. Missing information is omitted, not guessed; valid search data is retained.
- **Why did a run return fewer records?** Check the run summary and logs for request limits, empty source pages, malformed content, or access boundaries.
- **How do I report a problem?** Use the Actor's Issues tab and include the run ID plus a brief description. Use the API tab for programmatic runs and dataset retrieval.
- **Can I collect private extension data?** No. This Actor reads public listing pages only. Public listings may include publisher contact details; use results for a legitimate purpose and follow applicable privacy law.

Respect Chrome Web Store terms, robots guidance, rate limits, and applicable law. This Actor is not affiliated with Google or the Chrome Web Store. Public listing text, publisher details, links, and media URLs are source content and may change.

# Actor input Schema

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

Search the public Store or inspect explicit extension IDs/URLs.

## `query` (type: `string`):

Keyword sent to the public Chrome Web Store search route.

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

Public 32-character Chrome extension IDs used in details mode.

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

Official HTTPS search or extension detail URLs.

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

Maximum normal extension records emitted.

## `maxPages` (type: `integer`):

Bounded number of public search pages to inspect per source.

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

Opt in to additional public detail-page requests for search results. Direct detail URLs are always parsed as requested.

## `maxDetailRequests` (type: `integer`):

Bound detail-page enrichment requests.

## `maxRequests` (type: `integer`):

Hard cap across search and detail requests.

## `includeMedia` (type: `boolean`):

Keep publicly visible logo and image URLs when available.

## `includePageText` (type: `boolean`):

Keep the public listing summary and full description when available.

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

Chrome Web Store language preference such as en-US.

## `timeoutSecs` (type: `integer`):

Timeout for each direct public request in seconds.

## `maxResponseBytes` (type: `integer`):

Maximum streamed body size for each public page response.

## `page` (type: `integer`):

One-based starting search page.

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

Optional explicitly configured Apify or custom proxy. Direct requests are used when omitted; an empty proxy configuration is rejected.

## Actor input object example

```json
{
  "mode": "search",
  "query": "adblock",
  "maxItems": 10,
  "maxPages": 1,
  "includeDetails": false,
  "maxDetailRequests": 10,
  "maxRequests": 21,
  "includeMedia": true,
  "includePageText": true,
  "language": "en-US",
  "timeoutSecs": 30,
  "maxResponseBytes": 3000000,
  "page": 1
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

## `runSummary` (type: `string`):

No description

## `runHealth` (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 = {};

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

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

```

## MCP server setup

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