# Chrome Extension & Source Code Scraper (`calm_builder/chrome-extension-scraper`) Actor

Scrape Chrome Web Store extensions from search, categories, or direct URLs. Filter by featured status, ratings, and users. Get full metadata, reviews, and optional source .zip files. Pick a region — results vary by country.

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

## Pricing

from $0.50 / 1,000 extension results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 Extension Scraper

Collect structured extension data from the [Chrome Web Store](https://chromewebstore.google.com) using search queries, category pages, or direct extension links. Filter listings by featured status, ratings, and install counts, optionally enrich records with full metadata and reviews, and download extension source archives when needed.

Use it for **competitive research**, **extension discovery**, **market analysis**, **lead generation**, and **security review workflows** — without copying listings manually from the store.

---

### What you get

Each saved row is **one extension**, organized into clear sections:

| Section | What it contains |
| --- | --- |
| **Identity** | Extension ID, name, store URL, version, and manifest version |
| **Listing summary** | Short description, publisher, category, rating, user count, and featured flags |
| **Developer** | Developer name, contact details, website, and verification flags (when details are fetched) |
| **Media** | Icon, cover image, and screenshots (when details are fetched) |
| **Manifest** | Permissions, host permissions, and manifest summary (when details are fetched) |
| **Privacy** | Privacy policy link, declared data types, and privacy declarations (when details are fetched) |
| **Reviews** | User reviews with ratings and text (when review fetching is enabled) |
| **Source code** | Link to a `.zip` archive in your Apify Key-Value Store (when source download is enabled) |
| **Provenance** | Which search, category, or direct input produced the row (`sourceType`, `sourceUrl`, etc.) |

Results stream to the dataset as extensions are saved, so you can preview progress before the run finishes.

---

### Quick start on Apify

1. Open the Actor in the Apify Console.
2. Set **Request Country** (required) — choose the region whose store view you want. Listings and rankings can differ by country.
3. Add **at least one** input:
   - **Search URLs & Queries** — keywords such as `ai` or full store search URLs, **or**
   - **Category URLs / Predefined Categories**, **or**
   - **Direct Extension URLs or IDs**
4. Set **Max Extensions Per Search** and **Max Extensions Per Category** (default `10` each).
5. Optionally enable **Fetch Extension Details**, **Fetch Reviews**, or **Source Code Download**.
6. Click **Start** and open the **Dataset** tab when the run finishes.

**Example input (search + category + filters):**

```json
{
  "proxyCountry": "us",
  "searchUrls": ["ai"],
  "predefinedCategories": [
    "https://chromewebstore.google.com/category/extensions/productivity/communication"
  ],
  "maxExtensionsPerSearch": 100,
  "maxExtensionsPerCategory": 100,
  "filterBy": "featured",
  "minRating": 3.8,
  "maxRating": 4.5,
  "minUsers": 1000,
  "maxUsers": 50000,
  "fetchDetails": false
}
````

**Example input (single extension with full detail, reviews, and source):**

```json
{
  "proxyCountry": "us",
  "directExtensions": ["fmbicfmfmangckllfaomfkhdankgapfk"],
  "fetchDetails": true,
  "fetchReviews": true,
  "maxReviews": 10,
  "sourceCodeExtensions": ["fmbicfmfmangckllfaomfkhdankgapfk"]
}
```

***

### Input parameters

Provide **at least one** search query, category URL, predefined category, direct extension, or source-code target.

#### Request Country

| | |
| --- | --- |
| **Type** | Select (required) |
| **Default** | United States (`us`) |
| **Purpose** | Controls which regional view of the Chrome Web Store is used |

Chrome Web Store results — including search rankings, category ordering, and available extensions — can vary by region. Always set this to the market you want to analyze.

#### Search URLs & Queries

| | |
| --- | --- |
| **Type** | List of strings |
| **Format** | Plain keywords (e.g. `SEO`, `password manager`) or full Chrome Web Store search URLs |
| **Limit** | Controlled by **Max Extensions Per Search** (per query or URL) |

Each search is processed independently up to the per-search maximum.

#### Max Extensions Per Search

| | |
| --- | --- |
| **Type** | Integer |
| **Range** | `1` – `10,000` |
| **Default** | `10` |

Maximum extensions collected **per search query or search URL**.

#### Custom Category URLs & Predefined Categories

| | |
| --- | --- |
| **Type** | List of URLs and/or predefined category selections |
| **Format** | Full category URLs such as `https://chromewebstore.google.com/category/extensions/productivity/communication` |
| **Limit** | Controlled by **Max Extensions Per Category** (per category) |

Custom URLs and predefined categories are combined into one category task list.

#### Max Extensions Per Category

| | |
| --- | --- |
| **Type** | Integer |
| **Range** | `1` – `10,000` |
| **Default** | `10` |

Maximum extensions collected **per category URL or predefined category**.

#### Direct Extension URLs or IDs

| | |
| --- | --- |
| **Type** | List of strings |
| **Format** | 32-character extension ID or full Chrome Web Store detail URL |

Direct extensions are always enriched with **full metadata**, regardless of the **Fetch Extension Details** toggle. Search and category list filters do not apply to direct inputs.

#### Filter By (Search & Category Only)

| | |
| --- | --- |
| **Type** | Select |
| **Options** | **All**, **Featured**, **Established Publishers** |
| **Default** | All |
| **Applies to** | Search and category inputs only |

If a pasted store URL already contains a filter parameter and your **Filter By** input differs, the Actor uses **Filter By** for scraping and rewrites the output `sourceUrl` so the link opens with the same filter in the store UI.

#### Rating and user filters

| Field | Applies to |
| --- | --- |
| `minRating` / `maxRating` | Search and category list results |
| `minUsers` / `maxUsers` | Search and category list results |

Direct extensions ignore these filters.

#### Fetch Extension Details

| | |
| --- | --- |
| **Type** | Boolean |
| **Default** | `false` |
| **Effect** | Loads full extension pages for items discovered in search or category lists |

When enabled, records include long descriptions, developer contact fields, screenshots, manifest summaries, privacy data, and related extensions.

#### Fetch Reviews

| | |
| --- | --- |
| **Type** | Boolean |
| **Default** | `false` |
| **Requires** | Extension details (via **Fetch Extension Details**, a direct extension, or source-code download) |

#### Max Reviews Per Extension

| | |
| --- | --- |
| **Type** | Integer |
| **Default** | `10` |
| **Range** | `1` – `10,000` |

Used when **Fetch Reviews** is enabled.

#### Source Code Download

| | |
| --- | --- |
| **Type** | List of extension URLs or IDs |
| **Output** | `.zip` files saved to the run's Apify Key-Value Store |

Only extensions listed here receive a source download. They are also scraped with full metadata if not already included elsewhere in your input.

***

### What you will see during a run

The run log is written for end users — progress messages describe collection activity only, without technical internals.

Typical messages:

- `Region: United States.`
- `Collecting extensions from 2 list sources.`
- `Collecting extensions from search "ai" (up to 100).`
- `Collected 100 extension(s) from search "ai".`
- `Found 55 of 100 requested extensions from category "communication". The store has no more matching results, or your filters excluded the rest.`
- `Finished. Saved 155 extension record(s).`

If an input cannot be processed or an individual extension fails to save, you will see a short warning; other inputs in the same run can still succeed.

On the Apify **free plan**, you may also see a notice when free-tier limits apply (see [Free plan limits](#free-plan-limits)).

***

### Output overview

#### Dataset structure

- Results are saved to a **single Apify dataset**
- Each row is one extension object
- Use **`sourceType`**, **`sourceUrl`**, **`searchQuery`**, and **`categorySlug`** to see which input produced each row
- Duplicate extension IDs across search and category inputs are saved **once** in a single run

#### Listing-only vs full detail records

| Mode | Typical fields |
| --- | --- |
| **Listing only** (`fetchDetails: false` for search/category results) | Core listing fields — name, rating, users, category, icon, store URL, provenance |
| **Full detail** (direct extensions, source download, or `fetchDetails: true`) | Everything above plus long description, developer contacts, screenshots, manifest, privacy, reviews, and optional source archive link |

Field presence varies by extension: not every listing includes developer email, screenshots, or reviews. Empty arrays (`[]`) or `null` mean the store did not publish that data — not necessarily an error.

If optional data could not be retrieved, check the **`warnings`** array on the row for user-safe labels.

#### Source code files

When **Source Code Download** is enabled, `.zip` files are stored in the run's **Key-Value Store**. Each matching dataset row includes a `sourceCode` object with the store key, file size, and download URL.

***

### Output fields

#### Core identity and listing

| Field | Description |
| --- | --- |
| `extensionId` | 32-character Chrome extension ID |
| `name` | Extension name |
| `shortDescription` | Short listing description |
| `longDescription` | Full description (full-detail records only) |
| `publisherName` | Publisher display name |
| `category` | Store category slug |
| `categoryDisplayName` | Human-readable category name (full-detail records) |
| `categoryRank` | Rank within category when available |
| `rating` | Average star rating |
| `ratingCount` | Number of ratings |
| `userCount` | Reported install / user count |
| `featured` | Whether the listing is marked featured |
| `establishedPublisher` | Whether the publisher is marked established |
| `verifiedDeveloper` | Verified developer flag |
| `hasDeveloperEmail` | Whether a developer email is published |
| `version` | Published extension version |
| `manifestVersion` | Manifest version (2 or 3) |
| `size` | Package size string (full-detail records) |
| `iconUrl` | Extension icon URL |
| `coverUrl` | Cover / promo image URL |
| `screenshots` | Screenshot and video embed URLs (full-detail records) |
| `storeUrl` | Chrome Web Store detail page URL |
| `lastUpdated` | Last update timestamp when published |
| `scrapedAt` | ISO timestamp when the row was collected |

#### Developer and publisher (full-detail records)

| Field | Description |
| --- | --- |
| `developerName` | Developer display name |
| `developerLegalName` | Legal entity name when published |
| `developerEmail` | Contact email when published |
| `developerAddress` | Mailing address when published |
| `developerPhone` | Phone number when published |
| `developerWebsite` | Developer or product website |
| `publisherId` | Internal publisher identifier when available |
| `dunsNumber` | D-U-N-S number when published |
| `isEuTrader` | EU trader declaration flag |

#### Manifest and privacy (full-detail records)

| Field | Description |
| --- | --- |
| `manifestSummary` | Parsed manifest fields — permissions, host permissions, homepage, etc. |
| `languages` / `locales` | Supported languages |
| `relatedExtensions` | Related extension suggestions from the store |
| `privacyPolicyUrl` | Link to privacy policy |
| `supportUrl` | Support or contact URL |
| `privacyDataTypes` | Declared data types collected |
| `privacyDeclarations` | Privacy practice declarations |

#### Reviews (when enabled)

| Field | Description |
| --- | --- |
| `reviews` | Array of review objects |
| `reviewCount` | Number of reviews saved for this extension |

Each review object may include:

| Field | Description |
| --- | --- |
| `reviewId` | Review identifier |
| `authorName` | Reviewer display name |
| `rating` | Star rating (1–5) |
| `text` | Review body |
| `createdAt` / `updatedAt` | Review timestamps |
| `helpfulUp` / `helpfulDown` | Helpful vote counts when shown |
| `locale` | Review language code |

#### Source code (when enabled)

| Field | Description |
| --- | --- |
| `sourceCode.key` | Key-Value Store record name (`.zip`) |
| `sourceCode.sizeBytes` | Archive size in bytes |
| `sourceCode.downloadUrl` | Apify download URL for the archive |

#### Provenance

| Field | Description |
| --- | --- |
| `sourceType` | `search`, `category`, `direct`, or `source-code` |
| `sourceInput` | Original input string (query, URL, or extension ID) |
| `sourceUrl` | Store URL used for collection (includes active filters when applicable) |
| `searchQuery` | Parsed search query when `sourceType` is `search` |
| `categorySlug` | Parsed category path when `sourceType` is `category` |

#### `warnings`

| Value | Meaning |
| --- | --- |
| `Extension details could not be loaded.` | Full detail page was unavailable; listing fields may still be present |
| `Reviews could not be loaded.` | Review fetch failed; other fields may still be present |
| `Source code could not be downloaded.` | Source archive was unavailable for this extension |

***

### Example output

The excerpts below come from a real run using **Request Country: United States**, search query **`ai`**, category **Productivity → Communication**, **Featured** filter, rating/user thresholds, and a direct extension with reviews and source download. Full output is available in the run dataset.

#### Example input

```json
{
  "proxyCountry": "us",
  "searchUrls": ["ai"],
  "predefinedCategories": [
    "https://chromewebstore.google.com/category/extensions/productivity/communication"
  ],
  "directExtensions": ["fmbicfmfmangckllfaomfkhdankgapfk"],
  "maxExtensionsPerSearch": 100,
  "maxExtensionsPerCategory": 100,
  "filterBy": "featured",
  "minRating": 3.8,
  "maxRating": 4.5,
  "minUsers": 1000,
  "maxUsers": 50000,
  "fetchDetails": true,
  "fetchReviews": true,
  "maxReviews": 5,
  "sourceCodeExtensions": ["fmbicfmfmangckllfaomfkhdankgapfk"]
}
```

#### Excerpt — listing record from a search result

```json
{
  "extensionId": "jldogdgepmcedfdhgnmclgemehfhpomg",
  "name": "Retriever: AI Web Agent",
  "shortDescription": "Turn your browser into a self-driving AI Agent. Automate scraping, form filling and monitoring with simple prompting.",
  "publisherName": "Retriever: AI Web Agent",
  "category": "productivity/workflow",
  "categoryRank": 4,
  "rating": 3.9,
  "ratingCount": 57,
  "userCount": 10000,
  "verifiedDeveloper": true,
  "hasDeveloperEmail": true,
  "featured": true,
  "establishedPublisher": true,
  "developerWebsite": "https://rtrvr.ai",
  "version": "33.2.0",
  "manifestVersion": 3,
  "iconUrl": "https://lh3.googleusercontent.com/xzbpUe8Yd4MyD5zbxVmyhu3Ool0H8JO2pMd-AMqSSav5YxsJPW7zDhwe9Kv7ERjJEs6oXJwzK5GMUpY2jpeOJkMDVLc",
  "coverUrl": "https://lh3.googleusercontent.com/1eMACFjmvnGQlaNPSQC5Hv1ZV0gvNU4tKOMGFa0m5hQ7461QbWe8MNOtgdl4HbE8ybA1Yr-ITYbGR2SOS68ceC1KeJQ",
  "storeUrl": "https://chromewebstore.google.com/detail/x/jldogdgepmcedfdhgnmclgemehfhpomg",
  "lastUpdated": "2024-09-25T10:06:55.745Z",
  "sourceType": "search",
  "sourceInput": "ai",
  "sourceUrl": "https://chromewebstore.google.com/search/ai?filter=featured&filterBy=featured",
  "searchQuery": "ai",
  "categorySlug": null,
  "scrapedAt": "2026-06-21T14:19:12.879Z"
}
```

#### Excerpt — listing record from a category result

```json
{
  "extensionId": "ioinaaeeacahcmbgfmeaaofhfkijpdeb",
  "name": "HTML Editor for Gmail by cloudHQ",
  "shortDescription": "HTML Editor for Gmail™ - code HTML email directly from Gmail",
  "publisherName": "HTML Editor for Gmail by cloudHQ",
  "category": "productivity/communication",
  "categoryRank": 3,
  "rating": 4.1,
  "ratingCount": 191,
  "userCount": 50000,
  "verifiedDeveloper": true,
  "hasDeveloperEmail": true,
  "featured": true,
  "establishedPublisher": true,
  "developerWebsite": "https://www.html-editor-for-gmail.com/",
  "version": "2.0.2.7",
  "manifestVersion": 3,
  "storeUrl": "https://chromewebstore.google.com/detail/x/ioinaaeeacahcmbgfmeaaofhfkijpdeb",
  "lastUpdated": "2017-07-05T04:58:52.502Z",
  "sourceType": "category",
  "sourceInput": "https://chromewebstore.google.com/category/extensions/productivity/communication",
  "sourceUrl": "https://chromewebstore.google.com/category/extensions/productivity/communication?filter=featured&filterBy=featured",
  "searchQuery": null,
  "categorySlug": "productivity/communication",
  "scrapedAt": "2026-06-21T14:19:12.465Z"
}
```

#### Excerpt — full detail record with reviews and source code (direct extension)

```json
{
  "extensionId": "fmbicfmfmangckllfaomfkhdankgapfk",
  "name": "CrackTech - Tech Interview Preparation",
  "shortDescription": "A tool that can help candidate to prepare for a tech interview preparation.",
  "rating": 3.8,
  "ratingCount": 19,
  "userCount": 10000,
  "featured": true,
  "verifiedDeveloper": true,
  "developerName": "Avik Sarkar",
  "developerEmail": "ssavi.ict@gmail.com",
  "developerWebsite": "https://github.com/ssavi-ict/LeetCode-Which-Company",
  "version": "2.2.0",
  "manifestVersion": 3,
  "storeUrl": "https://chromewebstore.google.com/detail/x/fmbicfmfmangckllfaomfkhdankgapfk",
  "manifestSummary": {
    "manifestVersion": 3,
    "permissions": ["tabs", "notifications", "alarms", "storage", "activeTab"],
    "hostPermissions": ["<all_urls>", "https://leetcode.com/*"]
  },
  "reviews": [
    {
      "reviewId": "62e97a00-cdb4-4d2e-819b-c17785d1f828",
      "authorName": "Suryakant Bharti",
      "rating": 5,
      "text": "works as expected 👍",
      "createdAt": "2025-11-29T17:06:40.114Z",
      "locale": "en"
    }
  ],
  "reviewCount": 5,
  "sourceCode": {
    "key": "fmbicfmfmangckllfaomfkhdankgapfk.zip",
    "sizeBytes": 511700,
    "downloadUrl": "https://api.apify.com/v2/key-value-stores/STORE_ID/records/fmbicfmfmangckllfaomfkhdankgapfk.zip"
  },
  "sourceType": "direct",
  "sourceInput": "fmbicfmfmangckllfaomfkhdankgapfk",
  "sourceUrl": "https://chromewebstore.google.com/detail/x/fmbicfmfmangckllfaomfkhdankgapfk",
  "warnings": [],
  "scrapedAt": "2026-06-21T14:19:12.056Z"
}
```

> **Note:** Replace `STORE_ID` in `sourceCode.downloadUrl` with your run's Key-Value Store ID from the Apify Console.

***

### Combining search, category, and direct inputs

You can mix all input modes in a single run.

```json
{
  "proxyCountry": "us",
  "searchUrls": ["ai", "vpn"],
  "predefinedCategories": [
    "https://chromewebstore.google.com/category/extensions/productivity/tools"
  ],
  "directExtensions": ["fmbicfmfmangckllfaomfkhdankgapfk"],
  "maxExtensionsPerSearch": 50,
  "maxExtensionsPerCategory": 50,
  "filterBy": "featured",
  "fetchDetails": true,
  "fetchReviews": true,
  "maxReviews": 10
}
```

- Each search and category input is processed independently, up to its respective maximum
- The same extension ID is deduplicated within a run — it is saved once even if it appears in multiple lists
- Use **`sourceType`** and **`sourceUrl`** on each row to trace where it was discovered
- If one list input fails, others can still complete

***

### Free plan limits

On the Apify **free plan**, the Actor may automatically apply:

| Limit | Value |
| --- | --- |
| Search URLs / queries per run | **2** (only the first entries in your list) |
| Category URLs per run | **2** (only the first entries in your list) |
| Direct extensions per run | **5** |
| Source code downloads per run | **1** |
| Max extensions per search | **10** |
| Max extensions per category | **10** |
| Max reviews per extension | **5** |

Paid Apify plans can use the full input without these caps. If limits apply, the run log will include a short notice.

***

### Data quality and limitations

**Public store listing data**\
The Actor reads the same extension data shown on Chrome Web Store search, category, and detail pages. It does not access private publisher dashboards or unpublished listings.

**Regional differences**\
Search results, category ordering, and available extensions depend on **Request Country**. Use the same country across runs when comparing results over time.

**Filter behavior**\
**Filter By** and rating/user thresholds apply to search and category collection only. Direct extensions bypass list filters.

**Partial list results**\
A category or search may return fewer extensions than your maximum because the store has no more matching pages, or because your filters excluded remaining listings. The run log will note when collection stops early.

**Field coverage varies**\
Developer contact details, screenshots, privacy declarations, and reviews are not published for every extension. Some fields may be `null` or empty even when the extension is live on the store.

**Source code availability**\
Source download depends on the extension being available as a CRX package from the store. Some extensions cannot be downloaded even when listed publicly.

**Store changes over time**\
Extensions are updated, featured, and removed on the live store. Re-run on a schedule to track changes.

**Compliance**\
You are responsible for using collected data in line with applicable laws and [Google's Chrome Web Store terms](https://developer.chrome.com/docs/webstore/program-policies/).

***

### Tips for best results

1. **Set Request Country first** — Pick the region whose market you are researching before comparing runs.
2. **Start with small limits** — Test with `10` extensions per search/category before large exports.
3. **Use keywords for quick searches** — Enter plain terms like `ai` or `ad blocker` instead of building URLs manually.
4. **Use predefined categories** — Faster than pasting full category URLs for common store sections.
5. **Enable details only when needed** — Listing mode is faster; turn on **Fetch Extension Details** when you need developer contacts, manifest permissions, or screenshots.
6. **Deduplicate with `extensionId`** — The same extension can match both a search and a category; the Actor saves one row per ID per run.
7. **Trace rows with `sourceUrl`** — Keep provenance fields when merging results from multiple inputs.
8. **Schedule recurring runs** — Monitor new extensions in a category or search over time.
9. **Export and filter in your tool of choice** — Dataset exports to JSON, CSV, or Excel for analysis on `rating`, `userCount`, `featured`, or `category`.

***

### Frequently asked questions

**Why do I get fewer extensions than my maximum?**\
The store may have no more matching listing pages, or your rating/user/**Filter By** settings excluded remaining rows. Check the run log for a partial-collection notice.

**Why do results differ between runs?**\
Store listings change, and **Request Country** affects what is shown. Use the same country and inputs when comparing runs.

**Why is `longDescription` empty on some rows?**\
Listing-only mode (`fetchDetails: false`) saves search/category summary fields. Enable **Fetch Extension Details** or add the extension as a **Direct Extension** for full detail pages.

**Why are reviews empty?**\
Reviews are only fetched when **Fetch Reviews** is enabled and extension details are loaded. Check **`warnings`** on the row if review fetching failed.

**Why is source code missing?**\
Source is downloaded only for extensions listed under **Source Code Download**. Some extensions cannot be packaged even when their store page is public.

**Will the same extension appear twice from search and category?**\
It can be discovered from both inputs, but the Actor saves **one row per extension ID** per run.

**Do direct extensions use my search filters?**\
No. Direct extension inputs ignore **Filter By** and rating/user thresholds.

**What does `featured` mean on a row?**\
It reflects the store's featured flag on the listing at scrape time, subject to your **Filter By** setting for list inputs.

***

### Support

For Actor-specific issues, use the **Issues** tab on the Apify store listing or contact the publisher through Apify.

For platform questions (runs, billing, API, schedules), see [Apify documentation](https://docs.apify.com) and Apify support.

# Actor input Schema

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

Country used for Chrome Web Store requests. Listings, rankings, and available extensions can differ by region, so choose the market you want to scrape.

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

Enter Chrome Web Store search URLs or plain search keywords.

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

The maximum number of extensions to scrape per search query or URL.

## `categoryLinks` (type: `array`):

Enter custom Chrome Web Store category URLs.

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

Select from standard Chrome Web Store categories.

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

The maximum number of extensions to scrape from each category.

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

Enter direct Chrome Web Store extension URLs or IDs to scrape them directly.

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

Filter search and category listing results by publisher status. Applied to every search query, category URL, and predefined category — including full Chrome Web Store URLs. If a pasted URL already contains a different filter (`?filterBy=...`), this input overrides it.

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

Minimum rating threshold (e.g., 4.5).

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

Maximum rating threshold (e.g., 5.0).

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

Minimum number of users installed.

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

Maximum number of users installed.

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

Fetch deep details for extensions found in search or category pages. Direct extensions are always fetched with full details.

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

Fetch user reviews for each extension. Applies when extension details are loaded (via Fetch Extension Details or Direct Extension URLs).

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

Maximum number of reviews to fetch per extension when Fetch Reviews is enabled.

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

Enter extension URLs or IDs to download source code (.zip). Only extensions listed here will have source downloaded — not search or category results.

## Actor input object example

```json
{
  "proxyCountry": "us",
  "maxExtensionsPerSearch": 10,
  "maxExtensionsPerCategory": 10,
  "filterBy": "all",
  "fetchDetails": false,
  "fetchReviews": false,
  "maxReviews": 10
}
```

# Actor output Schema

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

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("calm_builder/chrome-extension-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("calm_builder/chrome-extension-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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 calm_builder/chrome-extension-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=calm_builder/chrome-extension-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Chrome Extension & Source Code Scraper",
        "description": "Scrape Chrome Web Store extensions from search, categories, or direct URLs. Filter by featured status, ratings, and users. Get full metadata, reviews, and optional source .zip files. Pick a region — results vary by country.",
        "version": "0.0",
        "x-build-id": "USAJRfFCYECPn7HFX"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/calm_builder~chrome-extension-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-calm_builder-chrome-extension-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/calm_builder~chrome-extension-scraper/runs": {
            "post": {
                "operationId": "runs-sync-calm_builder-chrome-extension-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/calm_builder~chrome-extension-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-calm_builder-chrome-extension-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "proxyCountry"
                ],
                "properties": {
                    "proxyCountry": {
                        "title": "Request Country",
                        "enum": [
                            "us",
                            "af",
                            "al",
                            "dz",
                            "as",
                            "ad",
                            "ao",
                            "ai",
                            "ag",
                            "ar",
                            "am",
                            "aw",
                            "au",
                            "at",
                            "az",
                            "bs",
                            "bh",
                            "bd",
                            "bb",
                            "by",
                            "be",
                            "bz",
                            "bj",
                            "bm",
                            "bt",
                            "bo",
                            "bq",
                            "ba",
                            "bw",
                            "br",
                            "io",
                            "vg",
                            "bn",
                            "bg",
                            "bf",
                            "bi",
                            "kh",
                            "cm",
                            "ca",
                            "cv",
                            "ky",
                            "cf",
                            "td",
                            "cl",
                            "cn",
                            "co",
                            "km",
                            "cg",
                            "cr",
                            "hr",
                            "cu",
                            "cw",
                            "cy",
                            "cz",
                            "cd",
                            "dk",
                            "dj",
                            "dm",
                            "do",
                            "ec",
                            "eg",
                            "sv",
                            "gq",
                            "ee",
                            "et",
                            "fk",
                            "fj",
                            "fi",
                            "fr",
                            "gf",
                            "pf",
                            "ga",
                            "gm",
                            "ge",
                            "de",
                            "gh",
                            "gi",
                            "gr",
                            "gl",
                            "gd",
                            "gp",
                            "gu",
                            "gt",
                            "gg",
                            "gn",
                            "gw",
                            "gy",
                            "ht",
                            "hn",
                            "hk",
                            "hu",
                            "is",
                            "in",
                            "id",
                            "ir",
                            "iq",
                            "ie",
                            "im",
                            "il",
                            "it",
                            "ci",
                            "jm",
                            "jp",
                            "je",
                            "jo",
                            "kz",
                            "ke",
                            "xk",
                            "kw",
                            "kg",
                            "la",
                            "lv",
                            "lb",
                            "ls",
                            "lr",
                            "ly",
                            "li",
                            "lt",
                            "lu",
                            "mo",
                            "mk",
                            "mg",
                            "mw",
                            "my",
                            "mv",
                            "ml",
                            "mt",
                            "mq",
                            "mr",
                            "mu",
                            "yt",
                            "mx",
                            "fm",
                            "md",
                            "mc",
                            "mn",
                            "me",
                            "ms",
                            "ma",
                            "mz",
                            "mm",
                            "na",
                            "np",
                            "nl",
                            "nc",
                            "nz",
                            "ni",
                            "ne",
                            "ng",
                            "mp",
                            "no",
                            "om",
                            "pk",
                            "pw",
                            "ps",
                            "pa",
                            "pg",
                            "py",
                            "pe",
                            "ph",
                            "pl",
                            "pt",
                            "pr",
                            "qa",
                            "re",
                            "ro",
                            "ru",
                            "rw",
                            "sh",
                            "kn",
                            "lc",
                            "mf",
                            "pm",
                            "vc",
                            "ws",
                            "sm",
                            "st",
                            "sa",
                            "sn",
                            "rs",
                            "sc",
                            "sl",
                            "sg",
                            "sx",
                            "sk",
                            "si",
                            "so",
                            "za",
                            "kr",
                            "ss",
                            "es",
                            "lk",
                            "sd",
                            "sr",
                            "sz",
                            "se",
                            "ch",
                            "sy",
                            "tw",
                            "tj",
                            "tz",
                            "th",
                            "tl",
                            "tg",
                            "to",
                            "tt",
                            "tn",
                            "tr",
                            "tm",
                            "tc",
                            "ug",
                            "ua",
                            "ae",
                            "gb",
                            "uy",
                            "uz",
                            "ve",
                            "vn",
                            "vi",
                            "wf",
                            "ye",
                            "zm",
                            "zw"
                        ],
                        "type": "string",
                        "description": "Country used for Chrome Web Store requests. Listings, rankings, and available extensions can differ by region, so choose the market you want to scrape.",
                        "default": "us"
                    },
                    "searchUrls": {
                        "title": "Search URLs & Queries",
                        "type": "array",
                        "description": "Enter Chrome Web Store search URLs or plain search keywords.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxExtensionsPerSearch": {
                        "title": "Max Extensions Per Search",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "The maximum number of extensions to scrape per search query or URL.",
                        "default": 10
                    },
                    "categoryLinks": {
                        "title": "Custom Category URLs",
                        "type": "array",
                        "description": "Enter custom Chrome Web Store category URLs.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "predefinedCategories": {
                        "title": "Predefined Categories",
                        "type": "array",
                        "description": "Select from standard Chrome Web Store categories.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "https://chromewebstore.google.com/category/extensions/productivity/communication",
                                "https://chromewebstore.google.com/category/extensions/productivity/developer",
                                "https://chromewebstore.google.com/category/extensions/productivity/education",
                                "https://chromewebstore.google.com/category/extensions/productivity/tools",
                                "https://chromewebstore.google.com/category/extensions/productivity/workflow",
                                "https://chromewebstore.google.com/category/extensions/lifestyle/art",
                                "https://chromewebstore.google.com/category/extensions/lifestyle/entertainment",
                                "https://chromewebstore.google.com/category/extensions/lifestyle/games",
                                "https://chromewebstore.google.com/category/extensions/lifestyle/household",
                                "https://chromewebstore.google.com/category/extensions/lifestyle/fun",
                                "https://chromewebstore.google.com/category/extensions/lifestyle/news",
                                "https://chromewebstore.google.com/category/extensions/lifestyle/shopping",
                                "https://chromewebstore.google.com/category/extensions/lifestyle/social",
                                "https://chromewebstore.google.com/category/extensions/lifestyle/travel",
                                "https://chromewebstore.google.com/category/extensions/lifestyle/well_being",
                                "https://chromewebstore.google.com/category/extensions/make_chrome_yours/accessibility",
                                "https://chromewebstore.google.com/category/extensions/make_chrome_yours/functionality",
                                "https://chromewebstore.google.com/category/extensions/make_chrome_yours/privacy"
                            ],
                            "enumTitles": [
                                "Productivity - Communication",
                                "Productivity - Developer Tools",
                                "Productivity - Education",
                                "Productivity - Tools",
                                "Productivity - Workflow & Planning",
                                "Lifestyle - Art & Design",
                                "Lifestyle - Entertainment",
                                "Lifestyle - Games",
                                "Lifestyle - Household",
                                "Lifestyle - Just for Fun",
                                "Lifestyle - News & Weather",
                                "Lifestyle - Shopping",
                                "Lifestyle - Social Networking",
                                "Lifestyle - Travel",
                                "Lifestyle - Well-being",
                                "Make Chrome Yours - Accessibility",
                                "Make Chrome Yours - Functionality & UI",
                                "Make Chrome Yours - Privacy & Security"
                            ]
                        }
                    },
                    "maxExtensionsPerCategory": {
                        "title": "Max Extensions Per Category",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "The maximum number of extensions to scrape from each category.",
                        "default": 10
                    },
                    "directExtensions": {
                        "title": "Direct Extension URLs or IDs",
                        "type": "array",
                        "description": "Enter direct Chrome Web Store extension URLs or IDs to scrape them directly.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "filterBy": {
                        "title": "Filter By (Search & Category Only)",
                        "enum": [
                            "all",
                            "featured",
                            "established_publishers"
                        ],
                        "type": "string",
                        "description": "Filter search and category listing results by publisher status. Applied to every search query, category URL, and predefined category — including full Chrome Web Store URLs. If a pasted URL already contains a different filter (`?filterBy=...`), this input overrides it.",
                        "default": "all"
                    },
                    "minRating": {
                        "title": "Minimum Rating",
                        "minimum": 0.1,
                        "maximum": 5,
                        "type": "number",
                        "description": "Minimum rating threshold (e.g., 4.5)."
                    },
                    "maxRating": {
                        "title": "Maximum Rating",
                        "minimum": 0.1,
                        "maximum": 5,
                        "type": "number",
                        "description": "Maximum rating threshold (e.g., 5.0)."
                    },
                    "minUsers": {
                        "title": "Minimum Users",
                        "type": "integer",
                        "description": "Minimum number of users installed."
                    },
                    "maxUsers": {
                        "title": "Maximum Users",
                        "type": "integer",
                        "description": "Maximum number of users installed."
                    },
                    "fetchDetails": {
                        "title": "Fetch Extension Details",
                        "type": "boolean",
                        "description": "Fetch deep details for extensions found in search or category pages. Direct extensions are always fetched with full details.",
                        "default": false
                    },
                    "fetchReviews": {
                        "title": "Fetch Reviews",
                        "type": "boolean",
                        "description": "Fetch user reviews for each extension. Applies when extension details are loaded (via Fetch Extension Details or Direct Extension URLs).",
                        "default": false
                    },
                    "maxReviews": {
                        "title": "Max Reviews Per Extension",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Maximum number of reviews to fetch per extension when Fetch Reviews is enabled.",
                        "default": 10
                    },
                    "sourceCodeExtensions": {
                        "title": "Extension URLs or IDs for Source Download",
                        "type": "array",
                        "description": "Enter extension URLs or IDs to download source code (.zip). Only extensions listed here will have source downloaded — not search or category results.",
                        "items": {
                            "type": "string"
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
