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

Search Chrome extensions and themes, browse categories and Top Charts, extract 127-field details, reviews, manifests, developer contacts, and CRX/ZIP source.

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

## Pricing

from $0.90 / 1,000 search 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Chrome Web Store Scraper – Extensions, Themes, Reviews, Manifests and CRX Source

Extract public Chrome Web Store search results, categories, Top Charts, complete extension or theme details, developer and privacy data, manifests, reviews, and downloadable CRX/ZIP source packages in one Apify Actor.

- Search extensions, themes, or both with native continuation-token pagination
- Browse extension and theme categories and collect Trending, Popular, or New & notable charts
- Extract listing, developer, D-U-N-S, trader, localization, privacy, media, and complete manifest data
- Calculate transparent manifest security signals such as broad host access and high-risk permissions
- Filter discovery results by rating, users, featured status, or publisher verification
- Filter reviews by score, keyword, date range, or rolling recent-day window
- Download public extension or theme packages as CRX, ZIP, or both to the run Key-Value Store
- Process batches with built-in country-targeted Apify Residential Proxy; no Google account, API key, browser, login cookie, or proxy setup is required
- Export results as JSON, CSV, Excel, XML, RSS, or JSONL, or access them through the Apify API

### What can you do with this Actor?

| Mode | Input | Output | Best for |
| --- | --- | --- | --- |
| `search` | One or more keywords | Ranked extension/theme records | Keyword research, competitor discovery, catalog building |
| `category` | Category URLs or paths | Paginated category records | Category monitoring and market mapping |
| `topCharts` | Trending, Popular, and/or New & notable | Ranked chart records | Momentum tracking and featured-product research |
| `details` | Item IDs or URLs | Complete listing, developer, privacy, manifest, security, media, related-item, and optional source/review data | Due diligence, audits, monitoring, enrichment |
| `reviews` | Item IDs or URLs | Public reviews and developer replies, optionally enriched with parent-item metrics | Voice-of-customer and support analysis |

One mode runs per execution. Use IDs discovered by Search, Category, or Top Charts as Details or Reviews inputs in a later run.

### Quick start

1. Open the Actor and click **Try for free**.
2. Keep `mode` set to `search` and enter a keyword such as `AI assistant`.
3. Choose extensions, themes, or both and set `maxResults`.
4. Click **Start**.
5. Preview the dataset, download it, or pass discovered IDs into Details or Reviews.

The default input is a small working search that requires no credentials or network configuration.

### Input examples

#### Search extensions and themes

```json
{
  "mode": "search",
  "searchTerms": ["AI assistant", "dark theme"],
  "itemType": "all",
  "maxResults": 20,
  "country": "US",
  "language": "en-US"
}
```

`maxResults` applies independently to every search term. One dataset row represents one accepted store item for one term unless cross-input deduplication is enabled.

#### Browse categories

```json
{
  "mode": "category",
  "categoryUrls": [
    "/category/extensions/productivity/tools",
    "/category/themes/animals"
  ],
  "maxResults": 100,
  "minRating": 4,
  "country": "US",
  "language": "en-US"
}
```

#### Collect Top Charts

```json
{
  "mode": "topCharts",
  "charts": ["trending", "popular", "notable"],
  "maxResults": 25,
  "country": "US",
  "language": "en-US"
}
```

#### Extract details, security signals, reviews, and source

```json
{
  "mode": "details",
  "extensionIds": [
    "https://chromewebstore.google.com/detail/chatgpt/hehggadaopoacecdllhhajmbjkdcmajg",
    "becfinhbfclcgokjlobojlnldbfillpf"
  ],
  "includeReviews": true,
  "maxResults": 20,
  "includeSecurityAnalysis": true,
  "downloadSource": true,
  "sourceFormat": "both",
  "country": "US",
  "language": "en-US"
}
```

#### Filter and enrich reviews

```json
{
  "mode": "reviews",
  "extensionIds": ["becfinhbfclcgokjlobojlnldbfillpf"],
  "maxResults": 100,
  "reviewSort": "newest",
  "reviewScores": ["1", "2"],
  "reviewKeywords": ["privacy", "tracking", "broken"],
  "recentDays": 90,
  "includeExtensionInfo": true,
  "country": "US",
  "language": "en-US"
}
```

### Complete output examples

Every JSON block below is a complete top-level dataset shape. Optional source values are shown explicitly. Dynamic raw manifest maps are represented with compact real keys, but no top-level output field is omitted.

#### Complete `search` output – 86 top-level fields

```json
{
  "recordType": "search",
  "extensionId": "becfinhbfclcgokjlobojlnldbfillpf",
  "url": "https://chromewebstore.google.com/detail/_/becfinhbfclcgokjlobojlnldbfillpf",
  "title": "Example AI Assistant",
  "shortDescription": "An AI assistant for Chrome.",
  "icon": "https://lh3.googleusercontent.com/example-icon",
  "promotionalImage": "https://lh3.googleusercontent.com/example-promo",
  "secondaryPromotionalImage": null,
  "rating": 4.8,
  "ratingCount": 1200,
  "userCount": 90000,
  "publisherName": "Example Publisher",
  "publisherWebsite": "example.com",
  "publisherVerified": true,
  "featured": true,
  "categoryId": "productivity/tools",
  "categoryName": "Productivity > Tools",
  "categoryCode": 5,
  "itemType": "extension",
  "itemTypeCode": 1,
  "version": "2.1.0",
  "publishedAt": "2023-11-14T22:13:20Z",
  "manifestVersion": 3,
  "manifestName": "Example AI Assistant",
  "manifestDescription": "An AI assistant for Chrome.",
  "defaultLocale": "en",
  "minimumChromeVersion": "120",
  "versionName": "2.1 stable",
  "author": "Example Publisher",
  "homepageUrl": "https://example.com",
  "updateUrl": "https://clients2.google.com/service/update2/crx",
  "manifestKey": null,
  "permissions": ["storage", "tabs", "scripting"],
  "optionalPermissions": ["bookmarks"],
  "hostPermissions": ["https://example.com/*"],
  "optionalHostPermissions": [],
  "icons": {"128": "images/icon-128.png"},
  "action": {"default_popup": "popup.html", "default_title": "Open assistant"},
  "background": {"service_worker": "worker.js", "type": "module"},
  "contentScripts": [
    {"matches": ["https://example.com/*"], "js": ["content.js"], "all_frames": false}
  ],
  "webAccessibleResources": [
    {"resources": ["assets/widget.js"], "matches": ["https://example.com/*"]}
  ],
  "commands": {"open-assistant": {"description": "Open assistant"}},
  "sidePanel": {"default_path": "side-panel.html"},
  "contentSecurityPolicy": {"extension_pages": "script-src 'self'; object-src 'self'"},
  "externallyConnectable": {"matches": ["https://example.com/*"]},
  "oauth2": {"client_id": "example-client", "scopes": ["profile"]},
  "chromeUrlOverrides": {},
  "declarativeNetRequest": {"rule_resources": []},
  "omnibox": {"keyword": "ask"},
  "theme": {},
  "storage": {"managed_schema": "schema.json"},
  "optionsPage": "options.html",
  "optionsUi": {"page": "options.html", "open_in_tab": true},
  "devtoolsPage": null,
  "incognito": "split",
  "offlineEnabled": false,
  "securityRiskScore": 13,
  "securityRiskLevel": "low",
  "securityRiskFactors": ["permission:scripting", "permission:tabs"],
  "highRiskPermissions": ["scripting", "tabs"],
  "broadHostAccess": false,
  "manifestV2": false,
  "permissionCount": 4,
  "hostPermissionCount": 1,
  "contentScriptCount": 1,
  "webAccessibleResourceCount": 1,
  "remoteCodeIndicators": [],
  "hasExternallyConnectable": true,
  "usesNativeMessaging": false,
  "usesDebugger": false,
  "usesProxy": false,
  "usesManagement": false,
  "usesCookies": false,
  "usesHistory": false,
  "usesDownloads": false,
  "manifest": {
    "name": "Example AI Assistant",
    "description": "An AI assistant for Chrome.",
    "version": "2.1.0",
    "version_name": "2.1 stable",
    "manifest_version": 3,
    "default_locale": "en",
    "minimum_chrome_version": "120",
    "homepage_url": "https://example.com",
    "update_url": "https://clients2.google.com/service/update2/crx",
    "permissions": ["storage", "tabs", "scripting"],
    "optional_permissions": ["bookmarks"],
    "host_permissions": ["https://example.com/*"],
    "icons": {"128": "images/icon-128.png"},
    "action": {"default_popup": "popup.html"},
    "background": {"service_worker": "worker.js", "type": "module"},
    "content_scripts": [{"matches": ["https://example.com/*"], "js": ["content.js"]}],
    "web_accessible_resources": [{"resources": ["assets/widget.js"], "matches": ["https://example.com/*"]}],
    "side_panel": {"default_path": "side-panel.html"}
  },
  "sourceType": "search",
  "searchTerm": "AI assistant",
  "categoryPath": null,
  "chart": null,
  "country": "US",
  "language": "en-US",
  "searchRank": 1,
  "searchPosition": 1,
  "searchPage": 1,
  "scrapedAt": "2026-08-10T10:00:00Z"
}
```

#### Complete `category` output – 86 top-level fields

```json
{
  "recordType": "category",
  "extensionId": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
  "url": "https://chromewebstore.google.com/detail/_/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
  "title": "Productivity Extension",
  "shortDescription": "A productivity tool.",
  "icon": "https://lh3.googleusercontent.com/category-icon",
  "promotionalImage": null,
  "secondaryPromotionalImage": null,
  "rating": 4.6,
  "ratingCount": 520,
  "userCount": 40000,
  "publisherName": "Productivity Labs",
  "publisherWebsite": "productivity.example",
  "publisherVerified": false,
  "featured": false,
  "categoryId": "productivity/tools",
  "categoryName": "Productivity > Tools",
  "categoryCode": 5,
  "itemType": "extension",
  "itemTypeCode": 1,
  "version": "1.4.0",
  "publishedAt": "2024-01-20T08:00:00Z",
  "manifestVersion": 3,
  "manifestName": "Productivity Extension",
  "manifestDescription": "A productivity tool.",
  "defaultLocale": "en",
  "minimumChromeVersion": null,
  "versionName": null,
  "author": null,
  "homepageUrl": "https://productivity.example",
  "updateUrl": "https://clients2.google.com/service/update2/crx",
  "manifestKey": null,
  "permissions": ["storage"],
  "optionalPermissions": [],
  "hostPermissions": [],
  "optionalHostPermissions": [],
  "icons": {"128": "icon.png"},
  "action": {"default_popup": "popup.html"},
  "background": {"service_worker": "worker.js"},
  "contentScripts": [],
  "webAccessibleResources": [],
  "commands": {},
  "sidePanel": {},
  "contentSecurityPolicy": null,
  "externallyConnectable": {},
  "oauth2": {},
  "chromeUrlOverrides": {},
  "declarativeNetRequest": {},
  "omnibox": {},
  "theme": {},
  "storage": {},
  "optionsPage": null,
  "optionsUi": {},
  "devtoolsPage": null,
  "incognito": null,
  "offlineEnabled": null,
  "securityRiskScore": 0,
  "securityRiskLevel": "low",
  "securityRiskFactors": [],
  "highRiskPermissions": [],
  "broadHostAccess": false,
  "manifestV2": false,
  "permissionCount": 1,
  "hostPermissionCount": 0,
  "contentScriptCount": 0,
  "webAccessibleResourceCount": 0,
  "remoteCodeIndicators": [],
  "hasExternallyConnectable": false,
  "usesNativeMessaging": false,
  "usesDebugger": false,
  "usesProxy": false,
  "usesManagement": false,
  "usesCookies": false,
  "usesHistory": false,
  "usesDownloads": false,
  "manifest": {
    "name": "Productivity Extension",
    "description": "A productivity tool.",
    "version": "1.4.0",
    "manifest_version": 3,
    "permissions": ["storage"],
    "icons": {"128": "icon.png"},
    "action": {"default_popup": "popup.html"},
    "background": {"service_worker": "worker.js"}
  },
  "sourceType": "category",
  "searchTerm": null,
  "categoryPath": "/category/extensions/productivity/tools",
  "chart": null,
  "country": "US",
  "language": "en-US",
  "searchRank": 1,
  "searchPosition": 1,
  "searchPage": 1,
  "scrapedAt": "2026-08-10T10:00:00Z"
}
```

#### Complete `topChart` output – 86 top-level fields

```json
{
  "recordType": "topChart",
  "extensionId": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
  "url": "https://chromewebstore.google.com/detail/_/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
  "title": "Trending Extension",
  "shortDescription": "A trending Chrome extension.",
  "icon": "https://lh3.googleusercontent.com/chart-icon",
  "promotionalImage": "https://lh3.googleusercontent.com/chart-promo",
  "secondaryPromotionalImage": null,
  "rating": 4.9,
  "ratingCount": 8500,
  "userCount": 700000,
  "publisherName": "Trending Publisher",
  "publisherWebsite": "trending.example",
  "publisherVerified": true,
  "featured": true,
  "categoryId": "productivity/workflow",
  "categoryName": "Productivity > Workflow",
  "categoryCode": 6,
  "itemType": "extension",
  "itemTypeCode": 1,
  "version": "5.0.0",
  "publishedAt": "2025-06-01T09:00:00Z",
  "manifestVersion": 3,
  "manifestName": "Trending Extension",
  "manifestDescription": "A trending Chrome extension.",
  "defaultLocale": "en",
  "minimumChromeVersion": "116",
  "versionName": "5.0",
  "author": "Trending Publisher",
  "homepageUrl": "https://trending.example",
  "updateUrl": "https://clients2.google.com/service/update2/crx",
  "manifestKey": null,
  "permissions": ["storage", "downloads"],
  "optionalPermissions": [],
  "hostPermissions": ["https://trending.example/*"],
  "optionalHostPermissions": [],
  "icons": {"128": "icon.png"},
  "action": {"default_popup": "popup.html"},
  "background": {"service_worker": "worker.js", "type": "module"},
  "contentScripts": [],
  "webAccessibleResources": [],
  "commands": {},
  "sidePanel": {},
  "contentSecurityPolicy": {"extension_pages": "script-src 'self'"},
  "externallyConnectable": {},
  "oauth2": {},
  "chromeUrlOverrides": {},
  "declarativeNetRequest": {},
  "omnibox": {},
  "theme": {},
  "storage": {},
  "optionsPage": null,
  "optionsUi": {},
  "devtoolsPage": null,
  "incognito": null,
  "offlineEnabled": false,
  "securityRiskScore": 6,
  "securityRiskLevel": "low",
  "securityRiskFactors": ["permission:downloads"],
  "highRiskPermissions": ["downloads"],
  "broadHostAccess": false,
  "manifestV2": false,
  "permissionCount": 2,
  "hostPermissionCount": 1,
  "contentScriptCount": 0,
  "webAccessibleResourceCount": 0,
  "remoteCodeIndicators": [],
  "hasExternallyConnectable": false,
  "usesNativeMessaging": false,
  "usesDebugger": false,
  "usesProxy": false,
  "usesManagement": false,
  "usesCookies": false,
  "usesHistory": false,
  "usesDownloads": true,
  "manifest": {
    "name": "Trending Extension",
    "description": "A trending Chrome extension.",
    "version": "5.0.0",
    "manifest_version": 3,
    "permissions": ["storage", "downloads"],
    "host_permissions": ["https://trending.example/*"],
    "background": {"service_worker": "worker.js", "type": "module"}
  },
  "sourceType": "topCharts",
  "searchTerm": null,
  "categoryPath": null,
  "chart": "trending",
  "country": "US",
  "language": "en-US",
  "searchRank": 1,
  "searchPosition": 1,
  "searchPage": 1,
  "scrapedAt": "2026-08-10T10:00:00Z"
}
```

#### Complete `details` output – 127 top-level fields

```json
{
  "recordType": "details",
  "extensionId": "becfinhbfclcgokjlobojlnldbfillpf",
  "url": "https://chromewebstore.google.com/detail/_/becfinhbfclcgokjlobojlnldbfillpf",
  "title": "Example AI Assistant",
  "shortDescription": "An AI assistant for Chrome.",
  "icon": "https://lh3.googleusercontent.com/example-icon",
  "promotionalImage": "https://lh3.googleusercontent.com/example-promo",
  "secondaryPromotionalImage": null,
  "rating": 4.8,
  "ratingCount": 1200,
  "userCount": 90000,
  "publisherName": "Example Publisher",
  "publisherWebsite": "example.com",
  "publisherVerified": true,
  "featured": true,
  "categoryId": "productivity/tools",
  "categoryName": "Productivity > Tools",
  "categoryCode": 5,
  "itemType": "extension",
  "itemTypeCode": 1,
  "version": "2.1.0",
  "publishedAt": "2023-11-14T22:13:20Z",
  "manifestVersion": 3,
  "manifestName": "Example AI Assistant",
  "manifestDescription": "An AI assistant for Chrome.",
  "defaultLocale": "en",
  "minimumChromeVersion": "120",
  "versionName": "2.1 stable",
  "author": "Example Publisher",
  "homepageUrl": "https://example.com",
  "updateUrl": "https://clients2.google.com/service/update2/crx",
  "manifestKey": null,
  "permissions": ["storage", "tabs", "scripting"],
  "optionalPermissions": ["bookmarks"],
  "hostPermissions": ["https://example.com/*"],
  "optionalHostPermissions": [],
  "icons": {"128": "images/icon-128.png"},
  "action": {"default_popup": "popup.html", "default_title": "Open assistant"},
  "background": {"service_worker": "worker.js", "type": "module"},
  "contentScripts": [
    {"matches": ["https://example.com/*"], "js": ["content.js"], "all_frames": false}
  ],
  "webAccessibleResources": [
    {"resources": ["assets/widget.js"], "matches": ["https://example.com/*"]}
  ],
  "commands": {"open-assistant": {"description": "Open assistant"}},
  "sidePanel": {"default_path": "side-panel.html"},
  "contentSecurityPolicy": {"extension_pages": "script-src 'self'; object-src 'self'"},
  "externallyConnectable": {"matches": ["https://example.com/*"]},
  "oauth2": {"client_id": "example-client", "scopes": ["profile"]},
  "chromeUrlOverrides": {},
  "declarativeNetRequest": {"rule_resources": []},
  "omnibox": {"keyword": "ask"},
  "theme": {},
  "storage": {"managed_schema": "schema.json"},
  "optionsPage": "options.html",
  "optionsUi": {"page": "options.html", "open_in_tab": true},
  "devtoolsPage": null,
  "incognito": "split",
  "offlineEnabled": false,
  "securityRiskScore": 13,
  "securityRiskLevel": "low",
  "securityRiskFactors": ["permission:scripting", "permission:tabs"],
  "highRiskPermissions": ["scripting", "tabs"],
  "broadHostAccess": false,
  "manifestV2": false,
  "permissionCount": 4,
  "hostPermissionCount": 1,
  "contentScriptCount": 1,
  "webAccessibleResourceCount": 1,
  "remoteCodeIndicators": [],
  "hasExternallyConnectable": true,
  "usesNativeMessaging": false,
  "usesDebugger": false,
  "usesProxy": false,
  "usesManagement": false,
  "usesCookies": false,
  "usesHistory": false,
  "usesDownloads": false,
  "manifest": {
    "name": "Example AI Assistant",
    "description": "An AI assistant for Chrome.",
    "version": "2.1.0",
    "version_name": "2.1 stable",
    "manifest_version": 3,
    "default_locale": "en",
    "minimum_chrome_version": "120",
    "homepage_url": "https://example.com",
    "update_url": "https://clients2.google.com/service/update2/crx",
    "permissions": ["storage", "tabs", "scripting"],
    "optional_permissions": ["bookmarks"],
    "host_permissions": ["https://example.com/*"],
    "icons": {"128": "images/icon-128.png"},
    "action": {"default_popup": "popup.html"},
    "background": {"service_worker": "worker.js", "type": "module"},
    "content_scripts": [{"matches": ["https://example.com/*"], "js": ["content.js"]}],
    "web_accessible_resources": [{"resources": ["assets/widget.js"], "matches": ["https://example.com/*"]}],
    "side_panel": {"default_path": "side-panel.html"}
  },
  "description": "Full localized description of the extension.",
  "developerEmail": "support@example.com",
  "developerAddress": "123 Main Street, San Francisco, CA, US",
  "traderStatus": "trader",
  "isTrader": true,
  "isNonTrader": false,
  "developerContactName": "Jane Developer",
  "developerLegalName": "Example Software LLC",
  "developerOrganization": "Example Software LLC",
  "dunsNumber": "080579740",
  "developerPhone": "+1 555 0100",
  "publisherId": "u-example-publisher-id",
  "supportUrl": "https://example.com/support",
  "updatedAt": "2026-08-01T08:30:00Z",
  "size": "2.5MiB",
  "languages": ["English", "Deutsch"],
  "languageCodes": ["en", "de"],
  "privacyPolicyUrl": "https://example.com/privacy",
  "privacyDataTypeCodes": [1, 5, 8],
  "privacyDataTypes": [
    "personallyIdentifiableInformation",
    "personalCommunications",
    "userActivity"
  ],
  "handlesUserData": true,
  "privacyDeclarations": [
    "dataNotSoldToThirdPartiesOutsideApprovedUseCases",
    "dataNotUsedOrTransferredOutsideCoreFunctionality",
    "dataNotUsedOrTransferredForCreditworthinessOrLending"
  ],
  "dataNotSold": true,
  "dataUseLimitedToCoreFunctionality": true,
  "dataNotUsedForCreditworthiness": true,
  "screenshots": [
    "https://lh3.googleusercontent.com/screenshot-1",
    "https://lh3.googleusercontent.com/screenshot-2"
  ],
  "screenshotCount": 2,
  "videos": ["https://www.youtube.com/watch?v=example"],
  "videoCount": 1,
  "media": [
    {
      "type": "screenshot",
      "typeCode": 1,
      "url": "https://lh3.googleusercontent.com/screenshot-1"
    },
    {
      "type": "video",
      "typeCode": 2,
      "url": "https://www.youtube.com/watch?v=example"
    }
  ],
  "analyticsId": "G-EXAMPLE",
  "reviewCount": 1418,
  "relatedExtensions": [
    {
      "extensionId": "cccccccccccccccccccccccccccccccc",
      "url": "https://chromewebstore.google.com/detail/_/cccccccccccccccccccccccccccccccc",
      "title": "Related Extension",
      "shortDescription": "A related productivity extension.",
      "icon": "https://lh3.googleusercontent.com/related-icon",
      "promotionalImage": null,
      "rating": 4.4,
      "ratingCount": 300,
      "userCount": 20000,
      "publisherWebsite": "related.example",
      "publisherVerified": false,
      "featured": false,
      "categoryId": "productivity/tools",
      "categoryName": "Productivity > Tools",
      "itemType": "extension",
      "version": "1.2.0",
      "publishedAt": "2024-03-01T00:00:00Z"
    }
  ],
  "relatedExtensionCount": 1,
  "storeMetadata": {
    "privacyDataTypeCodes": [1, 5, 8],
    "flag8": true,
    "itemKindCode": 1,
    "flag21": true,
    "minimumChromeVersion": "120",
    "value29": 1,
    "flag34": true,
    "flag36": true,
    "privacyDeclarationCount": 3,
    "developerRaw": [
      "support@example.com",
      "123 Main Street, San Francisco, CA, US",
      null,
      true,
      false,
      "Example Publisher",
      "Jane Developer",
      "Example Software LLC",
      "080579740",
      "+1 555 0100",
      "u-example-publisher-id"
    ]
  },
  "includedReviews": [
    {
      "reviewId": "review-123",
      "extensionId": "becfinhbfclcgokjlobojlnldbfillpf",
      "extensionUrl": "https://chromewebstore.google.com/detail/_/becfinhbfclcgokjlobojlnldbfillpf",
      "reviewsUrl": "https://chromewebstore.google.com/detail/_/becfinhbfclcgokjlobojlnldbfillpf/reviews",
      "extensionTitle": "Example AI Assistant",
      "extensionIcon": "https://lh3.googleusercontent.com/example-icon",
      "extensionRating": 4.8,
      "extensionRatingCount": 1200,
      "extensionUserCount": 90000,
      "itemType": "extension",
      "userName": "Example Reviewer",
      "userImage": "https://lh3.googleusercontent.com/reviewer-image",
      "score": 2,
      "scoreText": "2 out of 5",
      "text": "The latest version does not work for my workflow.",
      "createdAt": "2026-08-07T03:15:15Z",
      "updatedAt": "2026-08-07T03:15:15Z",
      "helpfulCount": 11,
      "unhelpfulCount": 2,
      "version": "2.1.0",
      "reviewLanguage": "en",
      "developerReplyId": "reply-123",
      "developerReplyUserName": "Example Support",
      "developerReplyUserImage": "https://lh3.googleusercontent.com/support-image",
      "developerReplyText": "Please contact our support team.",
      "developerReplyCreatedAt": "2026-08-07T07:19:26Z",
      "developerReplyUpdatedAt": "2026-08-07T07:19:26Z",
      "developerReplyLanguage": "en",
      "matchedKeywords": ["work"],
      "reviewSort": "newest",
      "reviewRank": 1,
      "reviewPage": 1,
      "country": "US",
      "language": "en-US",
      "totalReviews": 1418,
      "scrapedAt": "2026-08-10T10:00:00Z"
    }
  ],
  "sourceDownloadRequested": true,
  "sourceDownloadAvailable": true,
  "sourceFormat": "both",
  "sourceCrxVersion": 3,
  "sourceCrxKey": "SOURCE-becfinhbfclcgokjlobojlnldbfillpf.crx",
  "sourceZipKey": "SOURCE-becfinhbfclcgokjlobojlnldbfillpf.zip",
  "sourceCrxSizeBytes": 2650000,
  "sourceZipSizeBytes": 2649500,
  "sourceCrxSha256": "85c6187750257926e3d0a7b01937bb3ad6c5ca968396ceb34786fa757036b08e",
  "sourceZipSha256": "1c8de2f62fd7f250afca7f8fd4c30627920a19f1511028826c61f91bbda6e8e1",
  "sourceError": null,
  "available": true,
  "country": "US",
  "language": "en-US",
  "scrapedAt": "2026-08-10T10:00:00Z"
}
```

`includedReviews` always uses the complete 36-field nested review shape shown above. It does not contain `recordType` because it is embedded inside the Details row. When source download is disabled or unavailable, the same source keys remain present with `false`, `null`, and a populated `sourceError` where applicable.

#### Complete `review` output – 37 top-level fields

```json
{
  "recordType": "review",
  "reviewId": "review-123",
  "extensionId": "becfinhbfclcgokjlobojlnldbfillpf",
  "extensionUrl": "https://chromewebstore.google.com/detail/_/becfinhbfclcgokjlobojlnldbfillpf",
  "reviewsUrl": "https://chromewebstore.google.com/detail/_/becfinhbfclcgokjlobojlnldbfillpf/reviews",
  "extensionTitle": "Example AI Assistant",
  "extensionIcon": "https://lh3.googleusercontent.com/example-icon",
  "extensionRating": 4.8,
  "extensionRatingCount": 1200,
  "extensionUserCount": 90000,
  "itemType": "extension",
  "userName": "Example Reviewer",
  "userImage": "https://lh3.googleusercontent.com/reviewer-image",
  "score": 2,
  "scoreText": "2 out of 5",
  "text": "The latest version does not work for my workflow.",
  "createdAt": "2026-08-07T03:15:15Z",
  "updatedAt": "2026-08-07T03:15:15Z",
  "helpfulCount": 11,
  "unhelpfulCount": 2,
  "version": "2.1.0",
  "reviewLanguage": "en",
  "developerReplyId": "reply-123",
  "developerReplyUserName": "Example Support",
  "developerReplyUserImage": "https://lh3.googleusercontent.com/support-image",
  "developerReplyText": "Please contact our support team.",
  "developerReplyCreatedAt": "2026-08-07T07:19:26Z",
  "developerReplyUpdatedAt": "2026-08-07T07:19:26Z",
  "developerReplyLanguage": "en",
  "matchedKeywords": ["work"],
  "reviewSort": "newest",
  "reviewRank": 1,
  "reviewPage": 1,
  "country": "US",
  "language": "en-US",
  "totalReviews": 1418,
  "scrapedAt": "2026-08-10T10:00:00Z"
}
```

When `includeExtensionInfo` is `false` or enrichment fails, the six parent-item fields remain present with `null`. Developer reply fields remain present with `null` when the publisher has not replied.

#### Complete `error` output – 10 top-level fields

```json
{
  "recordType": "error",
  "mode": "details",
  "extensionId": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
  "url": "https://chromewebstore.google.com/detail/_/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
  "errorType": "not_found",
  "errorMessage": "Chrome Web Store item does not exist: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
  "httpStatus": null,
  "country": "US",
  "language": "en-US",
  "scrapedAt": "2026-08-10T10:00:00Z"
}
```

An existing item with no reviews is successful and produces zero standalone review rows. Removed or unknown IDs produce the explicit error row above without a custom billing event and do not stop other IDs from being processed. Keep the synthetic `apify-default-dataset-item` event disabled so diagnostic rows remain free and successful rows are not charged twice.

### What Chrome Web Store data can you extract?

The Search, Category, and Top Charts shapes share the same 85 data fields plus their mode-specific `recordType`. Details adds listing, developer, privacy, media, related-item, source, availability, and request-context fields. Reviews use a separate 36-field data shape plus `recordType`.

#### Discovery and common item fields

| Category | Complete field inventory |
| --- | --- |
| Identity | `recordType`, `extensionId`, `url`, `title`, `shortDescription`, `itemType`, `itemTypeCode` |
| Visuals | `icon`, `promotionalImage`, `secondaryPromotionalImage` |
| Popularity | `rating`, `ratingCount`, `userCount`, `featured` |
| Publisher | `publisherName`, `publisherWebsite`, `publisherVerified` |
| Taxonomy | `categoryId`, `categoryName`, `categoryCode` |
| Release | `version`, `publishedAt` |
| Manifest identity | `manifestVersion`, `manifestName`, `manifestDescription`, `defaultLocale`, `minimumChromeVersion`, `versionName`, `author`, `homepageUrl`, `updateUrl`, `manifestKey` |
| Manifest permissions | `permissions`, `optionalPermissions`, `hostPermissions`, `optionalHostPermissions` |
| Manifest UI and runtime | `icons`, `action`, `background`, `contentScripts`, `webAccessibleResources`, `commands`, `sidePanel`, `contentSecurityPolicy`, `externallyConnectable`, `oauth2`, `chromeUrlOverrides`, `declarativeNetRequest`, `omnibox`, `theme`, `storage`, `optionsPage`, `optionsUi`, `devtoolsPage`, `incognito`, `offlineEnabled` |
| Security analysis | `securityRiskScore`, `securityRiskLevel`, `securityRiskFactors`, `highRiskPermissions`, `broadHostAccess`, `manifestV2`, `permissionCount`, `hostPermissionCount`, `contentScriptCount`, `webAccessibleResourceCount`, `remoteCodeIndicators`, `hasExternallyConnectable`, `usesNativeMessaging`, `usesDebugger`, `usesProxy`, `usesManagement`, `usesCookies`, `usesHistory`, `usesDownloads` |
| Raw source | `manifest` |
| Discovery context | `sourceType`, `searchTerm`, `categoryPath`, `chart`, `country`, `language`, `searchRank`, `searchPosition`, `searchPage`, `scrapedAt` |

The security score is a deterministic signal derived from the public manifest. It is useful for prioritization, not a malware verdict or a substitute for code review.

#### Details-only fields

Details contains every common item field above except the ten discovery-context fields, plus the complete inventory below.

| Category | Complete field inventory |
| --- | --- |
| Listing content | `description`, `updatedAt`, `size`, `languages`, `languageCodes`, `available`, `country`, `language`, `scrapedAt` |
| Developer and trader identity | `developerEmail`, `developerAddress`, `traderStatus`, `isTrader`, `isNonTrader`, `developerContactName`, `developerLegalName`, `developerOrganization`, `dunsNumber`, `developerPhone`, `publisherId`, `supportUrl` |
| Privacy | `privacyPolicyUrl`, `privacyDataTypeCodes`, `privacyDataTypes`, `handlesUserData`, `privacyDeclarations`, `dataNotSold`, `dataUseLimitedToCoreFunctionality`, `dataNotUsedForCreditworthiness` |
| Listing media | `screenshots`, `screenshotCount`, `videos`, `videoCount`, `media` |
| Reviews and discovery | `analyticsId`, `reviewCount`, `relatedExtensions`, `relatedExtensionCount`, `includedReviews`, `storeMetadata` |
| Source package | `sourceDownloadRequested`, `sourceDownloadAvailable`, `sourceFormat`, `sourceCrxVersion`, `sourceCrxKey`, `sourceZipKey`, `sourceCrxSizeBytes`, `sourceZipSizeBytes`, `sourceCrxSha256`, `sourceZipSha256`, `sourceError` |

#### Review fields

| Category | Complete field inventory |
| --- | --- |
| Identity and parent item | `recordType`, `reviewId`, `extensionId`, `extensionUrl`, `reviewsUrl`, `extensionTitle`, `extensionIcon`, `extensionRating`, `extensionRatingCount`, `extensionUserCount`, `itemType` |
| Reviewer and review | `userName`, `userImage`, `score`, `scoreText`, `text`, `createdAt`, `updatedAt`, `helpfulCount`, `unhelpfulCount`, `version`, `reviewLanguage` |
| Developer reply | `developerReplyId`, `developerReplyUserName`, `developerReplyUserImage`, `developerReplyText`, `developerReplyCreatedAt`, `developerReplyUpdatedAt`, `developerReplyLanguage` |
| Filter and request context | `matchedKeywords`, `reviewSort`, `reviewRank`, `reviewPage`, `country`, `language`, `totalReviews`, `scrapedAt` |

Error rows contain `recordType`, `mode`, `extensionId`, `url`, `errorType`, `errorMessage`, `httpStatus`, `country`, `language`, and `scrapedAt`.

### Input parameters

| Parameter | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `mode` | string | Yes | `search` | `search`, `details`, `reviews`, `category`, or `topCharts` |
| `searchTerms` | string\[] | Search mode | `AI assistant` | Keywords; limit applies per term. `searchTerm` is also accepted as a single-term API alias. |
| `extensionIds` | string\[] | Details/Reviews | `[]` | 32-letter IDs or full item/reviews URLs. `appIds` is also accepted as an API alias. |
| `categoryUrls` | string\[] | Category mode | `[]` | Full URLs or paths beginning with `/category/extensions/` or `/category/themes/`. |
| `charts` | string\[] | Top Charts mode | `trending` | Any of `trending`, `popular`, `notable`. |
| `itemType` | string | No | `extensions` | Search only: `extensions`, `themes`, or `all`. |
| `maxResults` | integer | No | `50` | Discovery results per term/category/chart, or reviews per item ID, from 0 to 10,000. Plain Details returns one row per valid ID. `0` means all available up to the safety cap. |
| `country` | string | No | `US` | Two-letter ISO country for residential proxy routing and output context. |
| `language` | string | No | `en-US` | Store `hl` locale such as `en-US`, `de`, `pt-BR`, or `zh-Hant`. |
| `includeReviews` | boolean | No | `false` | Details only: embed matching reviews in each details row. |
| `includeExtensionInfo` | boolean | No | `true` | Reviews only: enrich each review with parent item fields. |
| `reviewSort` | string | No | `newest` | `newest`, `helpful`, `lowestRating`, or `highestRating`. |
| `reviewScores` | string\[] | No | `[]` | Keep selected scores from `"1"` through `"5"`; empty means all. Integer values remain accepted by the runtime for direct API compatibility, and `reviewScore` is accepted as a single-score API alias. |
| `reviewKeywords` | string\[] | No | `[]` | Case-insensitive OR filter over review text. |
| `reviewsSince` | string | No | – | Inclusive ISO 8601 timestamp or `YYYY-MM-DD`. |
| `reviewsUntil` | string | No | – | Inclusive ISO 8601 timestamp or `YYYY-MM-DD`. |
| `recentDays` | integer | No | – | Rolling 1–3,650 day review window; the newer lower boundary wins. |
| `minRating` | number | No | – | Discovery only; 0–5. Unrated items fail an active rating filter. |
| `maxRating` | number | No | – | Discovery only; 0–5. |
| `minUsers` | integer | No | – | Discovery only; minimum store-provided user count. |
| `maxUsers` | integer | No | – | Discovery only; maximum store-provided user count. |
| `featuredOnly` | boolean | No | `false` | Discovery only; keep Featured items. |
| `publisherVerifiedOnly` | boolean | No | `false` | Discovery only; keep verified publishers. |
| `deduplicateResults` | boolean | No | `false` | Emit each item ID once across all discovery inputs in the run. |
| `includeSecurityAnalysis` | boolean | No | `true` | Keep derived manifest risk and capability fields populated. |
| `downloadSource` | boolean | No | `false` | Details only: store the public extension or theme package. |
| `sourceFormat` | string | No | `zip` | `zip`, `crx`, or `both`. |
| `maxSourceFileSizeMb` | integer | No | `100` | Reject CRX packages above 1–500 MB. |
| `maxConcurrency` | integer | No | `8` | Process 1–20 input targets concurrently. |

### Use cases

#### Chrome extension market and keyword research

Run several commercial keywords, filter by rating and users, deduplicate repeated listings, then compare publishers, categories, featured status, permissions, and update activity.

#### Publisher and compliance due diligence

Use Details to review legal identity, D-U-N-S number, trader status, support channels, privacy declarations, handled data types, public manifest permissions, and the original source package when available.

#### Security triage and source review

Prioritize listings by broad host access, Manifest V2, high-risk capabilities, content scripts, remote-code indicators, and the derived score. Download CRX/ZIP packages to a Key-Value Store for authorized deeper analysis.

#### Review intelligence and support monitoring

Collect newest, most helpful, lowest-rated, or highest-rated reviews. Filter complaints by score, text, date, version, helpful votes, and whether the developer replied.

#### Category, chart, and localization monitoring

Schedule recurring Category or Top Charts runs and compare snapshots. Repeat Details with different `language` values to observe publisher-provided localized titles, descriptions, and metadata.

### Performance and cost

The Actor is ready for pay-per-event billing with distinct events so each workload can be priced separately:

| Event name | Emitted for | Count |
| --- | --- | ---: |
| `search-result` | Accepted Search row | Per dataset row |
| `category-result` | Accepted Category row | Per dataset row |
| `top-chart-result` | Accepted Top Charts row | Per dataset row |
| `item-detail` | Details row | Per dataset row |
| `review` | Standalone or embedded review | Per review |
| `source-download` | Successfully stored source package | Per item, not per CRX/ZIP file |

Explicit not-found rows are stored without a custom charge event. Do not create an `error` event. Also remove the synthetic `apify-default-dataset-item` event from the Actor pricing configuration; otherwise Apify charges every default Dataset row in addition to the custom result event.

Embedded reviews remain inside one Details dataset row but are charged individually as `review` events. The Actor reserves the Details event before trimming embedded reviews against a run maximum-charge limit. It also reserves the Details cost before accepting a `source-download` event.

Final public event prices and repeatable Apify run measurements are not stored in this repository. Check the Actor's **Pricing** tab for current prices. Runtime and platform usage mainly grow with source pages, review pagination, Details enrichment, CRX size, retries, and proxy traffic.

### API usage

Replace `USERNAME~chrome-web-store-data-scraper` if the published Actor ID differs:

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/USERNAME~chrome-web-store-data-scraper/runs?token=APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "mode": "search",
    "searchTerms": ["password manager"],
    "itemType": "extensions",
    "maxResults": 20,
    "country": "US",
    "language": "en-US"
  }'
```

Use the default dataset API to export JSON, CSV, Excel, XML, RSS, or JSONL. Connect finished runs to Google Sheets, Make, Zapier, n8n, Airbyte, webhooks, Slack, or a data warehouse.

The Output tab uses one unified **Results** view with all 167 top-level fields across discovery, Details, Reviews, source metadata, and diagnostic rows. Fields that do not apply to a row's `recordType` remain empty, so users never need to switch mode-specific tabs or open the automatic All fields view.

Source files are stored under keys such as `SOURCE-ITEM_ID.crx` and `SOURCE-ITEM_ID.zip` in the run's default Key-Value Store. The Details row supplies the exact key and SHA-256 value.

### Best for / not for

**Best for:** Chrome extension and theme discovery, public publisher research, compliance checks, manifest/security triage, source-package collection, review analysis, and recurring market monitoring.

**Not for:** Chrome Developer Dashboard data, private account information, paid/private extension code, browser telemetry, automatic malware verdicts, extension installation, or authenticated user activity.

### Limits and good to know

- One mode runs per execution; each mode accepts batches of its relevant input.
- `maxResults` applies per discovery source or per reviewed item. Plain Details returns one row per valid ID. `0` means all source-exposed results with a 10,000-item safety cap.
- Chrome Web Store currently exposes fixed Top Charts lists of up to 25 items per selected chart.
- Rating, users, featured, publisher-verification, review-score, review-keyword, and review-date filters are applied after public source records are received. The Actor may request additional pages to reach the requested number of accepted rows.
- With newest-first review sorting, a `reviewsSince` or `recentDays` boundary can stop pagination early. Other sorts may need to inspect more pages.
- `language` requests publisher-provided localization. The store can fall back when a translation is unavailable.
- `country` selects the built-in Apify Residential Proxy country; Chrome Web Store does not expose a separate stable country parameter in these RPC calls.
- Source download is supported for public extensions and themes through Google's update service. Unavailable packages return source metadata with `sourceDownloadAvailable: false` and `sourceError`.
- Missing scalar values are `null`; missing lists and map-like manifest components are `[]` or `{}`. Every documented top-level key remains stable for its row shape.
- Search/category pagination and reviews are deduplicated by source ID. Cross-term/category/chart deduplication is optional.
- Requests retry rate limits, blocks, transient HTTP/network/proxy failures, and invalid structures with exponential backoff. A failed input does not discard successful inputs.
- Removed IDs return explicit error rows. Other unrecoverable operations are logged; if every non-terminal operation fails, the run fails visibly.
- All target traffic is forced through country-targeted Apify Residential Proxy. No user proxy field exists, no direct fallback is allowed, and no captured browser cookie is included in requests or source code.

### Frequently asked questions

#### What input should I provide?

Use keywords for Search, category URLs/paths for Category, chart names for Top Charts, or 32-character Chrome Web Store IDs/full item URLs for Details and Reviews.

#### Can it scrape both extensions and themes?

Yes. Search supports `extensions`, `themes`, or `all`; Category accepts both extension and theme category paths; Details and CRX/ZIP download support both item types. Reviews still depend on what Chrome Web Store exposes for the item.

#### How many results can I extract?

Set `maxResults` from 0 through 10,000 per input. Zero asks for every source-exposed result up to the safety cap. The source may expose fewer results, and Top Charts currently expose up to 25 per chart.

#### Why are some fields empty?

Publishers do not provide every optional developer, trader, privacy, localization, media, or manifest field. The stable key remains present with `null`, `[]`, or `{}` so downstream schemas do not shift.

#### Is the security score a malware verdict?

No. It is a transparent prioritization signal derived from permissions and manifest capabilities. Validate risks against your policy and perform authorized code review where needed.

#### Can I download extension source code?

Details mode can store the publicly distributed extension or theme CRX, its embedded ZIP, or both. The Actor reports keys, sizes, hashes, CRX version, and errors. Availability is controlled by Google's update service.

#### Can I process multiple inputs and schedule runs?

Yes. All modes accept batches where applicable. Use Apify schedules for recurring snapshots and webhooks to notify another system after completion.

#### Do I need a Google account, API key, cookie, or proxy?

No. Public data is collected without Google authentication. The Actor creates a mandatory Apify Residential Proxy internally and does not expose proxy or cookie inputs.

### Responsible use

This Actor processes publicly available Chrome Web Store listing, manifest, developer, and review information. Users are responsible for complying with applicable laws, privacy regulations, contractual obligations, intellectual-property rights, and Chrome Web Store terms. Download or analyze source packages only where you have a lawful purpose, and do not use reviewer or developer information for spam, harassment, deception, or unlawful profiling.

This Actor is independent and is not affiliated with, endorsed by, or sponsored by Google LLC. Google, Chrome, and Chrome Web Store are trademarks of Google LLC.

### Support

If a source response changes, a field is unexpectedly empty, or a valid item fails, create an issue in the Actor's **Issues** tab. Include the run ID, mode, locale, country, and a non-sensitive reproducible input. Never attach account credentials, authentication headers, or browser cookies.

# Actor input Schema

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

Choose the Chrome Web Store data source.

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

Keywords to search for. Required in Search mode; maxResults applies independently to every term.

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

32-character item IDs or full Chrome Web Store details/reviews URLs. Required in Details and Reviews modes.

## `categoryUrls` (type: `array`):

Full URLs or paths such as /category/extensions/productivity/tools and /category/themes/animals. Required in Category mode.

## `charts` (type: `array`):

One or more Chrome Web Store Top Charts collections. Each currently exposes up to 25 items.

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

Return extensions, themes, or both in Search mode.

## `maxResults` (type: `integer`):

Maximum accepted results per search term, category, chart, or extension. Use 0 for all available results, with a 10,000-item safety cap.

## `country` (type: `string`):

Two-letter ISO 3166-1 country used for the built-in residential proxy location and result context.

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

Chrome Web Store locale, for example en-US, de, pt-BR, or zh-Hant. Localized listings can return translated text.

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

Collect matching reviews and place them in includedReviews for every Details result.

## `includeExtensionInfo` (type: `boolean`):

Add title, icon, rating, users, and item type from the listing to every standalone review.

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

Native Chrome Web Store review order.

## `reviewScores` (type: `array`):

Keep only selected star ratings. Leave empty for all scores.

## `reviewKeywords` (type: `array`):

Keep reviews containing at least one keyword (case-insensitive). Leave empty for all review text.

## `reviewsSince` (type: `string`):

Inclusive ISO 8601 timestamp or YYYY-MM-DD date. Newest sorting stops pagination after this boundary.

## `reviewsUntil` (type: `string`):

Inclusive ISO 8601 timestamp or YYYY-MM-DD date.

## `recentDays` (type: `integer`):

Convenience rolling window. When combined with reviewsSince, the newer boundary wins.

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

Discovery modes only. Listings without a rating do not pass an active rating filter.

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

Discovery modes only.

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

Discovery modes only. Listings without a user count do not pass an active user filter.

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

Discovery modes only.

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

Discovery modes only. Keep listings marked Featured by Chrome Web Store.

## `publisherVerifiedOnly` (type: `boolean`):

Discovery modes only. Keep listings carrying the store publisher verification flag.

## `deduplicateResults` (type: `boolean`):

Emit each item ID once across all terms, categories, or charts in the run.

## `includeSecurityAnalysis` (type: `boolean`):

Derive risk score, high-risk permissions, broad host access, manifest version, and capability flags.

## `downloadSource` (type: `boolean`):

Details mode only. Download the public extension or theme CRX and/or embedded ZIP to the run's default Key-Value Store.

## `sourceFormat` (type: `string`):

Store the original CRX, the extracted ZIP, or both.

## `maxSourceFileSizeMb` (type: `integer`):

Reject unexpectedly large CRX downloads before placing them in storage.

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

Number of input terms, categories, charts, or item IDs processed concurrently.

## Actor input object example

```json
{
  "mode": "search",
  "searchTerms": [
    "AI assistant"
  ],
  "extensionIds": [],
  "categoryUrls": [],
  "charts": [
    "trending"
  ],
  "itemType": "extensions",
  "maxResults": 50,
  "country": "US",
  "language": "en-US",
  "includeReviews": false,
  "includeExtensionInfo": true,
  "reviewSort": "newest",
  "reviewScores": [],
  "reviewKeywords": [],
  "featuredOnly": false,
  "publisherVerifiedOnly": false,
  "deduplicateResults": false,
  "includeSecurityAnalysis": true,
  "downloadSource": false,
  "sourceFormat": "zip",
  "maxSourceFileSizeMb": 100,
  "maxConcurrency": 8
}
```

# Actor output Schema

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

Search, category and Top Charts records; complete extension/theme details; reviews; or explicit not-found records.

## `sourceFiles` (type: `string`):

Keys in the default Key-Value Store. Source files are present only when Details mode successfully downloads them.

# 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("scrapingmonkey/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("scrapingmonkey/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 scrapingmonkey/chrome-web-store-scraper --silent --output-dataset

```

## MCP server setup

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