Chrome Web Store Extensions Scraper
Pricing
from $1.40 / 1,000 results
Go to Apify Store
Chrome Web Store Extensions Scraper
Chrome extension records: name, rating, install count, version, size, developer and contact email, languages, screenshots — and the complete extension manifest with its permissions and host permissions. Look up by ID, or discover by search, category or collection.
Pricing
from $1.40 / 1,000 results
Rating
0.0
(0)
Developer
Ibnu Adzim
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Chrome extension records — name, rating, install count, version, size, developer and contact email, languages, screenshots, and the complete extension manifest with its permissions.
Why use this actor
- You get the manifest. Every row carries the extension's real
manifest.json, parsed, withpermissionsandhost_permissionsbroken out as lists you can filter on. That is the answer to "which of these extensions can read every page I visit?" — and it comes back even on search results, without opening a single extension page. - Developer name and contact email on every record.
- Look up as many extensions as you like. Paste ids or store URLs; there is no cap on that path. Search and category pages are limited to their first page by Google itself, and the output says so rather than quietly returning the same ten rows over and over.
- Rounded numbers are labelled as rounded. Google publishes install counts
as buckets (20,000,000 — not 20,143,882), so the field is named
installCountApproxand flagged. Nobody should build a market-share model on it by accident. - No account, no API key, no login.
How it works
- You give it extension ids or URLs, search terms, or category/collection pages.
- It reads the structured record Google already embeds in each page — no screen-scraping of layout, so a redesign does not break it.
- For discovered extensions it optionally opens each one's page to add the version, size, languages, developer and long description.
- Results land in your dataset as JSON, CSV or Excel, with a summary row per query.
Input
{"extensionIds": ["ddkjiahejlhfcafbddmgiahcphecmpfh"],"searchTerms": ["adblock"],"listingUrls": ["https://chromewebstore.google.com/category/extensions/productivity/workflow"],"includeDetails": true,"includeRawPayload": false,"maxItemsPerQuery": 200,"maxConcurrency": 4,"minRequestInterval": 0.6,"proxyConfiguration": { "useApifyProxy": true }}
| Field | Type | Description |
|---|---|---|
extensionIds | array | The 32-letter id from a store URL, or the full URL. The only input with no result cap. |
searchTerms | array | Store search. Google serves 10 results per term and no more. |
listingUrls | array | A category page (~32 extensions) or collection page (~16). First page only. |
includeDetails | boolean | Open each discovered extension's own page for version, size, languages, developer and the long description. One request per extension. Default true. |
includeRawPayload | boolean | Attach Google's untouched data array to every row — the only complete copy of what was sent, since the source has no field names. Roughly doubles row size. Default false. |
maxItemsPerQuery | integer | Cap per search term or listing URL. 0 = no cap, though Google's first-page limit still applies. Default 200. |
maxConcurrency | integer | Requests in flight. Default 4. |
minRequestInterval | number | Seconds between request starts. Default 0.6. |
proxyConfiguration | object | Apify Proxy. Datacenter is the default and is sufficient. |
Output
Three record types share one dataset, told apart by recordType.
EXTENSION
{"_input": "id=ddkjiahejlhfcafbddmgiahcphecmpfh","_source": "S1-detail-dsdata","_scrapedAt": "2026-09-16T04:47:36Z","recordType": "EXTENSION","extensionId": "ddkjiahejlhfcafbddmgiahcphecmpfh","name": "uBlock Origin Lite","extensionUrl": "https://chromewebstore.google.com/detail/ddkjiahejlhfcafbddmgiahcphecmpfh","rating": 4.49859075535513,"ratingCount": 3548,"installCountApprox": 20000000,"categoryPath": "make_chrome_yours/privacy","shortDescription": "An efficient content blocker. Blocks ads, trackers, miners, and more…","fullDescription": "uBO Lite (uBOL) is an efficient MV3-based content blocker…","version": "2026.914.1325","size": "9.23MiB","minimumChromeVersion": "122.0","supportUrl": "https://github.com/uBlockOrigin/uBOL-issues","privacyPolicyUrl": "https://github.com/gorhill/uBlock/wiki/Privacy-policy","developerName": "Raymond Hill (gorhill)","developerEmail": "ubo@raymondhill.net","firstPublishedAt": "2022-09-08T13:10:25Z","lastUpdatedAt": "2026-09-14T14:48:01Z","manifestVersion": 3,"permissions": ["activeTab", "alarms", "declarativeNetRequest", "offscreen", "scripting", "storage", "unlimitedStorage", "userScripts"],"hostPermissions": ["<all_urls>"],"manifest": { "…the full manifest.json, parsed…" },"languages": ["Deutsch", "English", "Filipino", "… 57 more"],"iconUrl": "https://lh3.googleusercontent.com/…","screenshotUrls": ["https://lh3.googleusercontent.com/…"]}
| Field | Description |
|---|---|
extensionId / extensionUrl | The id and a direct store link. |
name / shortDescription / fullDescription | Listing copy. |
rating / ratingCount | Average score and how many ratings it rests on. |
installCountApprox | A rounded bucket, not an exact figure. |
categoryPath | e.g. make_chrome_yours/privacy. |
version / size / minimumChromeVersion | Release detail (detail pass). |
developerName / developerEmail | Publisher and contact (detail pass). |
firstPublishedAt / lastUpdatedAt | ISO 8601 UTC. |
manifest / manifestRaw / manifestVersion | The extension's real manifest, parsed and raw. |
permissions / hostPermissions | Pulled out of the manifest so you can filter on them. |
languages / languageCodes | Supported locales (detail pass). |
iconUrl / bannerUrl / tileUrl / screenshotUrls | Imagery. |
websiteUrl / supportUrl / privacyPolicyUrl | Publisher links. |
rawCard | Google's untouched array, when includeRawPayload is on. |
_detailError | Present only when an extension's own page could not be read. |
SEARCH_SUMMARY
| Field | Description |
|---|---|
surface | detail, search or listing. |
requested / extensionsReturned / failures | What the query did. |
upstreamServesFixedFirstPage | true for search and listing — Google's own cap, not this actor's. |
installCountIsApproximate | Always true. |
decodedFromPositionalArray | Always true — see Known limits. |
ERROR
_error | Meaning |
|---|---|
invalid_input | A malformed extension id, or a URL that is not a Chrome Web Store page. |
not_found | The extension page carried no record — removed, unpublished, or a wrong id. |
unexpected_shape | The page loaded but the data was not where this actor expects it. |
fetch_failed | Network or server trouble after retries. |
Known limits
- Search returns 10 results, categories about 32. That is Google's own first-page limit; the store loads more over a private channel this actor does not use. For coverage, feed extension ids directly — that path has no cap.
- Install counts are rounded to public buckets.
- Reviews are not included — only the rating and the number of ratings.
- Google publishes these records without field names, as bare positional
arrays. This actor decodes the positions it can justify and leaves the rest
untouched; turn on
includeRawPayloadto see everything that was sent. If Google ever reorders the array, the actor fails with an error rather than reporting wrong numbers.