# VS Code Marketplace Scraper (`crawlerbros/vscode-marketplace-scraper`) Actor

Scrape the Visual Studio Code Marketplace, search extensions by keyword, category, publisher, or exact ID. Returns install counts, ratings, version history, repository links, and icon URLs for any VS Code extension.

- **URL**: https://apify.com/crawlerbros/vscode-marketplace-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** Developer tools, Automation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 7 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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

## VS Code Marketplace Scraper

Extract data from the Visual Studio Code Marketplace for any extension — install counts, ratings, version history, repository links, icon URLs, and full metadata. No authentication or API key required.

### What you can scrape

- **Search by keyword** — find extensions matching a free-text query
- **Browse by category** — list all extensions in a specific category (Programming Languages, Themes, Linters, etc.)
- **By publisher** — all extensions from a named publisher (e.g., `ms-python`, `esbenp`)
- **By extension ID** — look up one or more specific extensions by their full ID (e.g., `ms-python.python`)

### Use cases

| Goal | Mode |
|---|---|
| Monitor most-downloaded extensions for a keyword | `search` + `sortBy: InstallCount` |
| Track new releases in a category | `byCategory` + `sortBy: PublishedDate` |
| Audit all extensions from a publisher | `byPublisher` |
| Get metadata for a known extension | `byExtensionId` |
| Build a competitor analysis report | `search` + multiple runs |
| Monitor installs & ratings over time | Any mode, scheduled |

---

### Input parameters

| Parameter | Type | Description | Required |
|---|---|---|---|
| `mode` | select | Query mode: `search`, `byCategory`, `byPublisher`, `byExtensionId` | Yes |
| `searchQuery` | string | Free-text keyword (mode=search) | For search |
| `category` | select | Marketplace category (mode=byCategory or optional filter in search) | For byCategory |
| `publisherId` | string | Publisher slug, e.g. `ms-python` (mode=byPublisher) | For byPublisher |
| `extensionIds` | array | List of full IDs like `ms-python.python` (mode=byExtensionId) | For byExtensionId |
| `sortBy` | select | Sort order: `InstallCount`, `Relevance`, `PublishedDate`, `AverageRating`, `UpdatedDate`, `WeightedRating` | No (default: InstallCount) |
| `maxItems` | integer | Maximum extensions to return (1–500, default 50) | No |

#### Available categories

`Programming Languages`, `Snippets`, `Linters`, `Themes`, `Debuggers`, `Formatters`, `Keymaps`, `SCM Providers`, `Other`, `Azure`, `Data Science`, `Machine Learning`, `Visualization`, `Notebooks`, `Education`, `Testing`, `Extension Packs`, `Language Packs`, `Chat`

---

### Output fields

Each record in the dataset contains:

| Field | Type | Description |
|---|---|---|
| `extensionId` | string | Internal GUID of the extension |
| `extensionName` | string | Short name (e.g., `python`) |
| `displayName` | string | Human-readable name (e.g., `Python`) |
| `publisherId` | string | Publisher GUID |
| `publisherName` | string | Publisher slug (e.g., `ms-python`) |
| `publisherDisplayName` | string | Publisher display name (e.g., `Microsoft`) |
| `description` | string | Short description of the extension |
| `version` | string | Latest version string (e.g., `2026.5.1`) |
| `publishedDate` | string | ISO-8601 date first published |
| `lastUpdated` | string | ISO-8601 date last updated |
| `categories` | array | Category list (e.g., `["Programming Languages", "Debuggers"]`) |
| `tags` | array | Searchable tags (internal `__` tags are excluded) |
| `installCount` | integer | Total install count |
| `rating` | float | Average user rating (0–5) |
| `ratingCount` | integer | Number of ratings |
| `trendingWeekly` | float | Weekly trending score |
| `extensionUrl` | string | Marketplace page URL |
| `iconUrl` | string | Extension icon URL (PNG/SVG) |
| `repositoryUrl` | string | Source repository URL (when provided) |
| `licenseUrl` | string | License file URL (when provided) |
| `scrapedAt` | string | ISO-8601 timestamp when the record was scraped |

---

### Sample output

```json
{
  "extensionId": "aaaabbbb-cccc-dddd-eeee-ffffffffffff",
  "extensionName": "python",
  "displayName": "Python",
  "publisherName": "ms-python",
  "publisherDisplayName": "Microsoft",
  "description": "Python language support with IntelliSense (Pylance), Debugging (Python Debugger).",
  "version": "2026.5.1",
  "publishedDate": "2016-01-19T15:03:11.337+00:00",
  "lastUpdated": "2026-05-15T11:00:54.387+00:00",
  "categories": ["Programming Languages", "Debuggers", "Data Science", "Machine Learning"],
  "tags": ["python", "django", "flask"],
  "installCount": 218969362,
  "rating": 4.2,
  "ratingCount": 628,
  "trendingWeekly": 0.425,
  "extensionUrl": "https://marketplace.visualstudio.com/items?itemName=ms-python.python",
  "iconUrl": "https://ms-python.gallerycdn.vsassets.io/extensions/ms-python/python/.../Microsoft.VisualStudio.Services.Icons.Default",
  "repositoryUrl": "https://github.com/Microsoft/vscode-python",
  "scrapedAt": "2026-05-20T10:00:00.000000+00:00"
}
````

***

### FAQ

**Do I need an API key or account?**
No. The VS Code Marketplace Gallery API is publicly accessible with no authentication.

**Is proxy required?**
No. The API works reliably from datacenter IPs.

**How many extensions can I scrape?**
Up to 500 per run (configurable via `maxItems`). For larger datasets, run multiple times with different search queries or categories.

**Which sortBy should I use?**
Use `InstallCount` for most-popular extensions, `UpdatedDate` for recently updated, `PublishedDate` for newest, and `WeightedRating` for highest-quality extensions.

**Can I filter by category and keyword at the same time?**
Yes — in `search` mode, set both `searchQuery` and `category` to filter by both simultaneously.

**Why are some fields missing from certain records?**
Fields like `repositoryUrl` and `licenseUrl` are only included when the publisher has provided them. The actor never emits null or empty values.

**What are the `__` tags excluded from output?**
VS Code Marketplace uses internal tags prefixed with `__` (e.g., `__web_extension`) for platform features — these are not meaningful to end users and are excluded.

***

### Data source

This actor uses the [VS Code Marketplace Gallery API](https://marketplace.visualstudio.com/_apis/public/gallery/extensionquery) — the same API used by VS Code itself to browse and install extensions. It is publicly accessible, freely available, and does not require authentication.

# Actor input Schema

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

How to query the marketplace.

## `searchQuery` (type: `string`):

Free-text keyword to search extensions (mode=search).

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

VS Code Marketplace category to browse (mode=byCategory). Also works as optional filter in search mode.

## `publisherId` (type: `string`):

Publisher slug/name to fetch all extensions for (mode=byPublisher). E.g. ms-python, esbenp, streetsidesoftware.

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

One or more fully-qualified extension IDs in the format publisher.extensionName, e.g. ms-python.python (mode=byExtensionId).

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

How to sort results (not applicable for byExtensionId).

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

Maximum number of extensions to return.

## Actor input object example

```json
{
  "mode": "search",
  "searchQuery": "python",
  "extensionIds": [],
  "sortBy": "InstallCount",
  "maxItems": 50
}
```

# Actor output Schema

## `extensions` (type: `string`):

Dataset containing all scraped VS Code Marketplace extensions.

# API

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

## JavaScript example

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

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

// Prepare Actor input
const input = {
    "mode": "search",
    "searchQuery": "python",
    "extensionIds": [],
    "sortBy": "InstallCount",
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/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 = {
    "mode": "search",
    "searchQuery": "python",
    "extensionIds": [],
    "sortBy": "InstallCount",
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/vscode-marketplace-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 '{
  "mode": "search",
  "searchQuery": "python",
  "extensionIds": [],
  "sortBy": "InstallCount",
  "maxItems": 50
}' |
apify call crawlerbros/vscode-marketplace-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "VS Code Marketplace Scraper",
        "description": "Scrape the Visual Studio Code Marketplace, search extensions by keyword, category, publisher, or exact ID. Returns install counts, ratings, version history, repository links, and icon URLs for any VS Code extension.",
        "version": "1.0",
        "x-build-id": "40TjfRcBYaDXt88vF"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/crawlerbros~vscode-marketplace-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-crawlerbros-vscode-marketplace-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/crawlerbros~vscode-marketplace-scraper/runs": {
            "post": {
                "operationId": "runs-sync-crawlerbros-vscode-marketplace-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/crawlerbros~vscode-marketplace-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-crawlerbros-vscode-marketplace-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": [
                    "mode"
                ],
                "properties": {
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "search",
                            "byCategory",
                            "byPublisher",
                            "byExtensionId"
                        ],
                        "type": "string",
                        "description": "How to query the marketplace.",
                        "default": "search"
                    },
                    "searchQuery": {
                        "title": "Search query (mode=search)",
                        "type": "string",
                        "description": "Free-text keyword to search extensions (mode=search).",
                        "default": "python"
                    },
                    "category": {
                        "title": "Category (mode=byCategory)",
                        "enum": [
                            "Programming Languages",
                            "Snippets",
                            "Linters",
                            "Themes",
                            "Debuggers",
                            "Formatters",
                            "Keymaps",
                            "SCM Providers",
                            "Other",
                            "Azure",
                            "Data Science",
                            "Machine Learning",
                            "Visualization",
                            "Notebooks",
                            "Education",
                            "Testing",
                            "Extension Packs",
                            "Language Packs",
                            "Chat"
                        ],
                        "type": "string",
                        "description": "VS Code Marketplace category to browse (mode=byCategory). Also works as optional filter in search mode."
                    },
                    "publisherId": {
                        "title": "Publisher ID (mode=byPublisher)",
                        "type": "string",
                        "description": "Publisher slug/name to fetch all extensions for (mode=byPublisher). E.g. ms-python, esbenp, streetsidesoftware."
                    },
                    "extensionIds": {
                        "title": "Extension IDs (mode=byExtensionId)",
                        "type": "array",
                        "description": "One or more fully-qualified extension IDs in the format publisher.extensionName, e.g. ms-python.python (mode=byExtensionId).",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "sortBy": {
                        "title": "Sort by",
                        "enum": [
                            "InstallCount",
                            "Relevance",
                            "PublishedDate",
                            "AverageRating",
                            "UpdatedDate",
                            "WeightedRating"
                        ],
                        "type": "string",
                        "description": "How to sort results (not applicable for byExtensionId).",
                        "default": "InstallCount"
                    },
                    "maxItems": {
                        "title": "Max items",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum number of extensions to return.",
                        "default": 50
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
