# VS Code Marketplace Scraper · Extensions, Installs & Publishers (`reapx/vscode-marketplace-scraper`) Actor

Scrape Visual Studio Code Marketplace extensions, install counts, publishers, ratings, categories, tags, and versions via official gallery API. Returns addressable extension dataset records.

- **URL**: https://apify.com/reapx/vscode-marketplace-scraper.md
- **Developed by:** [Tarek Etman](https://apify.com/reapx) (community)
- **Categories:** Developer tools, Business, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.85 / 1,000 vs code extension record scrapeds

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

![reapX — public sources in, addressable records out](https://reapx.dev/reapx.gif)

## VS Code Marketplace Scraper · Extensions, Installs & Publishers

Scrape Visual Studio Code Marketplace extensions, install counts, ratings, reviews, publishers, categories, tags, and version release dates via the official VS Code gallery API. Extract structured extension datasets without authentication, headless browser overhead, or rate limits.

> Maintained by **reapX**. Every row cites the Apify run that produced it — nothing is inferred, modelled or filled in, and a field absent from the source is absent from the row. The extracted archive for this source is browsable at [reapx.dev/data/vscode-marketplace-scraper/](https://reapx.dev/data/vscode-marketplace-scraper/) and mirrored as an open dataset on [Hugging Face](https://huggingface.co/datasets/reapxdev/vscode-marketplace-scraper) and [Kaggle](https://www.kaggle.com/datasets/reapxdev/vscode-marketplace-scraper). Questions: reapxdev@proton.me

***

### Features & Capabilities

- **Complete VS Code Extension Datasets**: Scrape extension metadata, display titles, publisher organization profiles, verified status, short descriptions, categories, and manifest tags.
- **Real-Time Extension Metrics**: Extract total installation counts, download counts, average star ratings (1.0 to 5.0), total rating counts, weighted rating scores, daily trending growth, weekly trending velocity, and monthly trending velocity.
- **Publisher Analysis**: Filter extensions by specific publisher handles (e.g. `ms-python`, `ms-vscode`, `github`, `redhat`, `esbenp`, `eamodio`, `hashicorp`, `golang`, `salesforce`, `vscjava`) or inspect verified domain ownership.
- **Category & Tag Filters**: Narrow search results by official VS Code categories (`Programming Languages`, `Themes`, `Linters`, `Debuggers`, `Formatters`, `Snippets`, `Testing`, `Extension Packs`, `Data Science`, `Machine Learning`, `Keymaps`, `SCM Providers`, `Notebooks`, `Visualization`) or target specific tags (e.g. `python`, `react`, `docker`, `rust`, `copilot`, `ai`, `tailwind`).
- **Flexible Ordering**: Sort marketplace items by total installs (`Installs`), search relevance (`Relevance`), last updated timestamp (`LastUpdated`), original release date (`ReleaseDate`), user star ratings (`AverageRating`), or trending velocity.
- **Addressable Data Records**: Emits standard clean JSON records with stable `slug` identifiers (`publisherName.extensionName`) that directly map to entity pages on reapx.dev.
- **Fast & Cost-Effective**: Uses lightweight HTTP REST requests directly to the official VS Code gallery API (`extensionquery`). Runs in seconds with low memory consumption (512 MB).

***

### How it works

The **VS Code Marketplace Scraper** connects directly to the Visual Studio Code Gallery API endpoint (`POST https://marketplace.visualstudio.com/_apis/public/gallery/extensionquery`). It executes structured search requests using target criteria flags (`Microsoft.VisualStudio.Code`) and filters results based on your specified search keywords, categories, publishers, tags, minimum install thresholds, and sorting parameters.

The scraper automatically pages through gallery result sets, applies exponential backoff retry handling on transient network hiccups (429/5xx status codes), and streams extracted extension records item-by-item into your Apify Actor default dataset.

Every scraped extension record is assigned a canonical addressable `slug` identifier (`publisherName.extensionName`, e.g., `ms-python.python` or `github.copilot`).

***

### ⬇️ Input

The actor accepts structured JSON input parameters to control query filtering, sorting, install thresholds, and result limits.

#### Input Parameters

| Parameter | Type | Required | Default | Prefill | Description |
| :--- | :--- | :--- | :--- | :--- | :--- |
| `search` | String | No | `""` | `""` | Search keyword query to filter extensions (e.g. `python`, `react`, `linter`, `theme`). Leave empty to disable keyword filtering. |
| `category` | String | No | `""` | `"Programming Languages"` | Filter by VS Code Marketplace category (`Programming Languages`, `Themes`, `Linters`, `Debuggers`, `Formatters`, `Snippets`, `Testing`, `Extension Packs`, `Data Science`, `Machine Learning`, `Keymaps`, `SCM Providers`, `Notebooks`, `Visualization`, `Other`). Leave empty to include all categories. |
| `publisher` | String | No | `""` | `""` | Restrict extraction to extensions published by a specific publisher handle (e.g. `ms-python`, `ms-vscode`, `github`, `redhat`, `esbenp`). |
| `tag` | String | No | `""` | `""` | Filter extensions by manifest tag keyword (e.g. `python`, `javascript`, `docker`, `copilot`, `tailwind`). |
| `sortBy` | String | No | `"Installs"` | `"Installs"` | Sorting metric: `Installs`, `Relevance`, `LastUpdated`, `ReleaseDate`, `AverageRating`, `TrendingDaily`, `TrendingWeekly`, `TrendingMonthly`. |
| `minInstalls` | Integer | No | `0` | `0` | Minimum total install count filter (e.g. `10000`). Extensions below this threshold are skipped. |
| `maxItems` | Integer | No | `50` | `50` | Maximum number of extension records to extract and push (1 to 10,000). The higher the number, the longer the run takes and the more it costs in pay-per-event fees. |

#### Worked Example 1: Extract Top Programming Languages Extensions

To extract the 50 most installed extensions in the Programming Languages category:

```json
{
  "category": "Programming Languages",
  "sortBy": "Installs",
  "maxItems": 50,
  "minInstalls": 0
}
```

#### Worked Example 2: Scrape Official Microsoft Python Extensions

To extract extensions published by `ms-python`:

```json
{
  "publisher": "ms-python",
  "sortBy": "Installs",
  "maxItems": 50
}
```

#### Worked Example 3: Search AI Coding Assistants

To search for AI coding extensions tagged with `copilot` and sort by daily trending velocity:

```json
{
  "search": "copilot",
  "tag": "copilot",
  "sortBy": "TrendingDaily",
  "maxItems": 50
}
```

#### Worked Example 4: Extract Popular Color Themes

To extract dark themes with over 100,000 installs:

```json
{
  "category": "Themes",
  "tag": "dark-theme",
  "minInstalls": 100000,
  "sortBy": "Installs",
  "maxItems": 50
}
```

***

### ⬆️ Output

Scraped extension records are streamed directly to the default dataset. Each row represents a single Visual Studio Code extension with total installs, ratings, publisher information, and manifest metadata.

#### Output Field Specification

| Field Name | Data Type | Description | Example |
| :--- | :--- | :--- | :--- |
| `slug` | String | Unique addressable identifier formatted as `publisherName.extensionName` | `"ms-python.python"` |
| `extensionId` | String | Internal UUID string assigned to extension by VS Code Gallery | `"998b010b-e2af-44a5-a6cd-0b5fd3b9b6f8"` |
| `extensionName` | String | Technical extension name identifier | `"python"` |
| `displayName` | String | Human-readable display name of the extension | `"Python"` |
| `title` | String | Marketplace title matching display name | `"Python"` |
| `publisherName` | String | Unique publisher identifier handle | `"ms-python"` |
| `publisherDisplayName` | String | Official display name of publisher organization | `"Microsoft"` |
| `publisherDomain` | String | Verified domain URL associated with publisher | `"https://microsoft.com"` |
| `isPublisherVerified` | Boolean | Flag indicating whether publisher identity/domain is verified | `true` |
| `installs` | Number | Total cumulative installation count | `230469262` |
| `averageRating` | Number | Average user rating score out of 5.0 | `4.2` |
| `ratingCount` | Number | Total number of ratings/reviews submitted | `630` |
| `trendingDaily` | Number | Daily trending growth velocity metric | `0.0012` |
| `trendingWeekly` | Number | Weekly trending growth velocity metric | `0.3904` |
| `trendingMonthly` | Number | Monthly trending growth velocity metric | `1.9129` |
| `weightedRating` | Number | Bayesian weighted average rating score | `4.2086` |
| `downloadCount` | Number | Total package VSIX download count | `3318772` |
| `version` | String | Latest published version SemVer string | `"2026.5.2026070801"` |
| `lastUpdated` | String | ISO 8601 UTC timestamp of most recent update | `"2026-07-08T00:00:00Z"` |
| `publishedDate` | String | ISO 8601 UTC timestamp when extension was first published | `"2017-08-01T00:00:00Z"` |
| `releaseDate` | String | ISO 8601 UTC timestamp of initial marketplace release | `"2017-08-01T00:00:00Z"` |
| `shortDescription` | String | Summary description blurb | `"Python extension for Visual Studio Code"` |
| `categories` | Array | Categories assigned to extension | `["Programming Languages", "Debuggers"]` |
| `tags` | Array | Keywords and tags assigned in manifest | `["python", "django", "flask"]` |
| `marketplaceUrl` | String | Direct web URL to marketplace extension listing | `"https://marketplace.visualstudio.com/items?itemName=ms-python.python"` |

#### Sample Output Record (JSON)

```json
{
  "slug": "ms-python.python",
  "extensionId": "998b010b-e2af-44a5-a6cd-0b5fd3b9b6f8",
  "extensionName": "python",
  "displayName": "Python",
  "title": "Python",
  "publisherName": "ms-python",
  "publisherDisplayName": "Microsoft",
  "publisherDomain": "https://microsoft.com",
  "isPublisherVerified": true,
  "installs": 230469262,
  "averageRating": 4.2,
  "ratingCount": 630,
  "trendingDaily": 0.0012,
  "trendingWeekly": 0.3904,
  "trendingMonthly": 1.9129,
  "weightedRating": 4.2086,
  "downloadCount": 3318772,
  "version": "2026.5.2026070801",
  "lastUpdated": "2026-07-08T00:00:00Z",
  "publishedDate": "2017-08-01T00:00:00Z",
  "releaseDate": "2017-08-01T00:00:00Z",
  "shortDescription": "Python extension for Visual Studio Code",
  "categories": [
    "Programming Languages",
    "Debuggers"
  ],
  "tags": [
    "python",
    "django",
    "flask",
    "jupyter"
  ],
  "marketplaceUrl": "https://marketplace.visualstudio.com/items?itemName=ms-python.python"
}
```

***

### Pre-configured Tasks (TASKS.json)

This actor includes **50 pre-configured task definitions** stored in `TASKS.json`. These tasks span distinct operational categories, publisher profiles, programming languages, themes, and install thresholds:

1. **Category Tasks (15 tasks)**: Programming Languages, Themes, Linters, Debuggers, Formatters, Snippets, Testing, Extension Packs, Data Science, Machine Learning, Keymaps, SCM Providers, Notebooks, Visualization, Other.
2. **Major Publisher Tasks (15 tasks)**: Microsoft Python (`ms-python`), Microsoft VS Code Core (`ms-vscode`), GitHub (`github`), Red Hat (`redhat`), Prettier (`esbenp`), GitLens (`eamodio`), HashiCorp (`hashicorp`), Go Team (`golang`), Salesforce (`salesforce`), Java Team (`vscjava`), FormulaHendry (`formulahendry`), PlatformIO (`platformio`), AWS Toolkit (`AWS-Toolkit-Team`), Google Cloud (`GoogleCloudTools`), Docker (`Docker`).
3. **Tag & Keyword Tasks (15 tasks)**: React, Python, Rust, Docker, Copilot, AI Assistants, Tailwind CSS, Prettier, Kubernetes, Flutter, Vue.js, TypeScript, Markdown, Dark Themes, C# / .NET.
4. **Sort & Install Threshold Tasks (5 tasks)**: Remote Development, Daily Trending Velocity, Weekly Trending Velocity, Newly Published Releases, High-Tier Verified Extensions (10M+ Installs).

***

### Use Cases & Applications

- **Developer Tooling Research**: Analyze adoption rates, star ratings, and release frequency across different programming language ecosystems (Python, JavaScript, Rust, Go, Java, C++).
- **Competitor Intelligence**: Monitor competitor extension installs, rating shifts, daily/weekly trending velocity, and update cadence in real-time.
- **AI Coding Assistant Analytics**: Track market share growth and user adoption of AI coding tools (GitHub Copilot, Tabnine, Codeium, AWS CodeWhisperer).
- **Marketplace Publishing Strategy**: Benchmark your own extension's install volume and rating counts against category leaders to optimize tags, categories, and descriptions.
- **Developer Trend Forecasting**: Identify emerging developer tools, frameworks, and productivity extensions before they go mainstream by analyzing daily and weekly trending velocity metrics.

***

### Pricing & Pay-Per-Event

The **VS Code Marketplace Scraper** operates on Apify's **Pay-Per-Event (PPE)** pricing model. You are charged a flat rate per extracted extension record pushed to your dataset ($0.001 per record), with automatic volume tier discounts applied based on your Apify subscription level:

- **FREE**: $0.00100 per record
- **BRONZE**: $0.00095 per record (5% discount)
- **SILVER**: $0.00090 per record (10% discount)
- **GOLD**: $0.00085 per record (15% discount)
- **PLATINUM**: $0.00080 per record (20% discount)
- **DIAMOND**: $0.00075 per record (25% discount)

Compute resource usage (RAM/CPU) is fully absorbed into the event price—you pay only for the exact rows returned.

***

### ❓ FAQ

##### Q: Does this scraper require a Microsoft or Visual Studio Code API token?

No. The scraper accesses the public VS Code Gallery REST API (`extensionquery`) directly without requiring any login credentials, OAuth tokens, or API keys.

##### Q: How fast is the extraction process?

Extremely fast. Because the scraper relies on direct HTTP REST requests rather than a headless browser, extracting 50 extension records completes in under 3 seconds.

##### Q: Can I extract all extensions from a specific publisher?

Yes. Simply set the `publisher` parameter to the publisher handle (for example, `ms-python` or `github`).

##### Q: What is the `slug` field and why is it important?

The `slug` field (`publisherName.extensionName`) is the canonical addressable identifier used by Visual Studio Code Marketplace and reapX entity pages (`https://reapx.dev/data/vscode-marketplace-scraper/`). It uniquely identifies every extension across all runs.

##### Q: Can I cap my maximum spending on a run?

Yes. Set the `maxItems` parameter (e.g., `maxItems: 100`) to guarantee that the run extracts no more than that specified number of extension records.

***

### 💬 Your feedback

We actively maintain this actor and welcome bug reports, feature requests, or dataset inquiries. Feel free to reach out via email at `reapxdev@proton.me` or visit [reapx.dev](https://reapx.dev).

***

*Disclaimer: Unofficial - not affiliated with Microsoft or Visual Studio Code. Collects public data only. reapx. Contact reapxdev@proton.me.*

### 🧪 Example input

A real, runnable configuration — this is an actual input this Actor has run with.

```json
{
  "category": "Programming Languages",
  "sortBy": "Installs",
  "maxItems": 50,
  "minInstalls": 0
}
```

### 📄 Sample output

One real row from a real run of this Actor, unedited.

```json
{
  "slug": "ms-python.python",
  "extensionId": "f1f59ae4-9318-4f3c-a9b5-81b2eaa5f8a5",
  "extensionName": "python",
  "displayName": "Python",
  "title": "Python",
  "publisherName": "ms-python",
  "publisherDisplayName": "Microsoft",
  "publisherDomain": "https://microsoft.com",
  "isPublisherVerified": true,
  "installs": 230517750,
  "averageRating": 4.2,
  "ratingCount": 630,
  "trendingDaily": 0.0012099933209497086,
  "trendingWeekly": 0.3903837551374847,
  "trendingMonthly": 1.9129484299043078,
  "weightedRating": 4.208616482345023,
  "downloadCount": 3319099,
  "version": "2026.5.2026070801",
  "lastUpdated": "2026-07-08T11:35:23.263Z",
  "publishedDate": "2016-01-19T15:03:11.337Z",
  "releaseDate": "2016-01-19T15:03:11.337Z",
  "shortDescription": "Python language support with extension access points for IntelliSense (Pylance), Debugging (Python Debugger), linting, formatting, refactoring, unit tests, and more.",
  "categories": [],
  "tags": [],
  "marketplaceUrl": "https://marketplace.visualstudio.com/items?itemName=ms-python.python"
}
```

### ⚠️ Run outcomes and error handling

This Actor reports what happened in the run's **status message**, and it always keeps whatever it collected. These are the outcomes you can get and what each one means.

| Outcome | What it means |
|---|---|
| **Success** | Rows were returned and you were charged `extension-scraped` at $0.001 per row. |
| **No matches** | The source returned nothing for your filters. **Nothing is charged.** Widen the date window or drop a filter. |

#### What is guaranteed either way

- **Every row is pushed as it is built**, not buffered to the end of the run. Anything that buffers output loses everything to a timeout, a block or a migration; this does not.
- **A field absent from the source is absent from the row.** Nothing is inferred, modelled or filled in to make a row look complete.

# Actor input Schema

## `search` (type: `string`):

Specify a search query string to filter VS Code extensions by keyword (e.g., <code>python</code>, <code>react</code>, <code>copilot</code>). <b>Leave empty</b> to disable keyword filtering and return all extensions matching other criteria. <br><br><i>Note: Broader searches match more extensions, increasing run duration and pay-per-event costs.</i>

## `category` (type: `string`):

Filter VS Code extensions by primary category in the Visual Studio Code Marketplace (e.g., <code>Programming Languages</code>, <code>Themes</code>, <code>Linters</code>, <code>Debuggers</code>). <b>Leave empty</b> to include extensions from all categories. <br><br><i>Selecting broad categories increases returned extension volume and total event charges.</i>

## `publisher` (type: `string`):

Specify a VS Code Marketplace publisher handle to restrict results to extensions created by that specific publisher (e.g., <code>ms-python</code>, <code>ms-vscode</code>, <code>github</code>, <code>redhat</code>). <b>Leave empty</b> to include extensions from all publishers.

## `tag` (type: `string`):

Filter extensions by specific tag metadata assigned in the marketplace manifest (e.g., <code>python</code>, <code>javascript</code>, <code>docker</code>, <code>linter</code>, <code>ai</code>). <b>Leave empty</b> to ignore tag restrictions during extraction.

## `sortBy` (type: `string`):

Select the sorting metric for extension results: <code>Installs</code> (most downloaded), <code>Relevance</code> (keyword relevance), <code>LastUpdated</code> (recently updated), <code>ReleaseDate</code> (newest), <code>AverageRating</code> (highest rated), or trending metrics. Default is <code>Installs</code>.

## `minInstalls` (type: `integer`):

Set a minimum threshold for extension install counts (e.g., <code>10000</code>). Extensions with fewer installs than this threshold will be excluded. <b>Leave as 0</b> to include extensions regardless of download count.

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

Specify the maximum total number of extension records to extract and push to the default dataset (1 to 10,000). <b>The higher the number, the longer the run takes and the more it costs in pay-per-event fees.</b><br><br>The higher the number, the longer the run takes and the more you are charged, because you pay per row returned.

## Actor input object example

```json
{
  "search": "python",
  "category": "Programming Languages",
  "publisher": "ms-python",
  "tag": "python",
  "sortBy": "Installs",
  "minInstalls": 1000,
  "maxItems": 50
}
```

# Actor output Schema

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

Default dataset containing extracted Visual Studio Code extension records

# 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 = {
    "search": "",
    "category": "Programming Languages",
    "publisher": "",
    "tag": "",
    "sortBy": "Installs",
    "minInstalls": 0,
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("reapx/vscode-marketplace-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 = {
    "search": "",
    "category": "Programming Languages",
    "publisher": "",
    "tag": "",
    "sortBy": "Installs",
    "minInstalls": 0,
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("reapx/vscode-marketplace-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 '{
  "search": "",
  "category": "Programming Languages",
  "publisher": "",
  "tag": "",
  "sortBy": "Installs",
  "minInstalls": 0,
  "maxItems": 50
}' |
apify call reapx/vscode-marketplace-scraper --silent --output-dataset

```

## MCP server setup

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