The VS Code Marketplace is the de-facto market map of developer tools — 80,000+ extensions with install counts, ratings, and trending scores. But there's no official stats dashboard and no documented bulk API. Here's the part most people miss: the Marketplace website itself runs on a public gallery JSON service that answers plain HTTP — no API key, no login, no headless browser. In this tutorial we'll pull extension stats, search a category sorted by installs, and fetch reviews — as clean structured JSON, in a few lines of Python.
The endpoint
The Marketplace's own search and listing pages call:
POST https://marketplace.visualstudio.com/_apis/public/gallery/extensionquery
Content-Type: application/json
Accept: application/json;api-version=3.0-preview.1
with a JSON body of filter criteria (search text, exact extension name, or category) plus a flags bitmask that controls what comes back (statistics, versions, categories). The response carries installs, averagerating, ratingcount, and even trendingdaily/weekly/monthly velocity scores per extension. A separate public endpoint serves the newest reviews:
GET https://marketplace.visualstudio.com/_apis/public/gallery/publishers/{publisher}/extensions/{name}/reviews?count=50
So why not just requests.post() it yourself? You can — but then you own the contract: the right flag bits, the statistics-array parsing, the sort codes, the 100-per-page pagination, and fixing it the day Microsoft shifts the payload and your pipeline goes quietly empty. A cleaner path: call an actor that returns one stable schema and is canary-monitored daily. Here's how with the VS Code Marketplace Scraper.
Step 1 — Install the Apify client
pip install apify-client
export APIFY_TOKEN="apify_api_xxx"
(Token: Apify Console → Settings → Integrations.)
Step 2 — Get full stats for specific extensions
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("freshactors/vscode-marketplace-scraper").call(run_input={
"mode": "details",
"extensionIds": ["ms-python.python", "esbenp.prettier-vscode", "github.copilot"],
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["extensionId"], item["installs"], item["averageRating"], item["trendingMonthly"])
A real record looks like this:
{
"extensionId": "ms-python.python",
"name": "Python",
"publisher": "ms-python",
"publisherDisplayName": "Microsoft",
"publisherVerified": true,
"installs": 222361795,
"averageRating": 4.2,
"ratingCount": 630,
"trendingDaily": 0.00215,
"trendingWeekly": 0.41544,
"trendingMonthly": 2.05958,
"version": "2026.5.2026061001",
"lastUpdated": "2026-06-10T11:13:22.933Z",
"categories": ["Programming Languages", "Debuggers", "Data Science", "Machine Learning"],
"repositoryUrl": "https://github.com/Microsoft/vscode-python",
"marketplaceUrl": "https://marketplace.visualstudio.com/items?itemName=ms-python.python"
}
Step 3 — Map a category by install count
run = client.actor("freshactors/vscode-marketplace-scraper").call(run_input={
"mode": "search",
"category": "Data Science",
"sortBy": "installs",
"maxSearchResults": 50,
})
Fifty rows, biggest extensions first — instant competitive map of a niche. searchTerms works the same way for keywords (combine both to filter a category).
Step 4 — Reviews
run = client.actor("freshactors/vscode-marketplace-scraper").call(run_input={
"mode": "reviews",
"extensionIds": ["ms-python.python"],
"maxReviewsPerExtension": 100,
})
Each review carries the rating, text, reviewer display name, extension version, and date. (The public endpoint serves the 100 most recent per extension — that's the endpoint's hard window, so the actor caps honestly.)
Pricing & reliability
Pay-per-result: extension details $0.0025, search rows $0.001, reviews $0.0001 — no subscription, no per-run fee. The actor is monitored by a daily canary (installs numeric, sorts working, reviews parsing) and patched fast when the gallery shifts — the listing shows a "last verified working" date that's actually real.
Three more app-store scrapers share the same shape if you need cross-store data: Apple App Store, Google Play, and Microsoft Store.
Questions or a field you're missing? Open an issue on the actor page — issues are answered fast.
Top comments (0)