Chrome Web Store Scraper
Pricing
from $4.99 / 1,000 results
Chrome Web Store Scraper
π Chrome Web Store Scraper extracts app details from Chrome Web Storeβtitles, ratings, pricing, reviews, screenshots & more. β‘ Automate competitor research, SEO analysis & lead gen with reliable scraping. Perfect for developers & marketers. π
Pricing
from $4.99 / 1,000 results
Rating
0.0
(0)
Developer
Scraper Engine
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Chrome Web Store Extension Scraper β Ratings, Users and Manifest Data
Chrome Web Store Extension Scraper pulls a full structured record for any Chrome extension or theme β rating, install count, developer contact block, permissions, and the complete manifest.json β straight from chromewebstore.google.com into clean JSON, with no HTML parsing on your end. Feed it a category URL, a search keyword, or a list of listing URLs and it returns one record per extension, including fields the store page never renders as visible text. Start a run from the Apify Console or call it from your own code with the examples below.
What is Chrome Web Store Scraper?
Chrome Web Store Scraper is an Apify Actor that crawls Chrome Web Store category, collection, and search pages, then opens each extension's own detail page to pull its full record β ratings, install counts, manifest, and developer contact details β into an Apify dataset. It reads the store's own server-rendered page data and internal RPC endpoints directly, so no Chrome Web Store account or Google login is needed to run it. It's built for browser-extension market researchers, security and IT teams auditing what's installed across an org, and developers assembling extension directories or AI training/RAG datasets.
What Chrome Web Store extension data is publicly available to scrape?
Everything Chrome Web Store Scraper returns is visible to any visitor without signing in β the store bakes extension name, rating, install count, manifest, and developer contact details into the page's own data before a login wall ever appears.
| Data Category | Publicly available (no login) | Restricted |
|---|---|---|
| Listing basics β name, category, short/full description, icon, screenshots | β | |
| Quality signals β rating, ratingCount, users, Featured / Established Publisher badges | β | |
Manifest & permissions β version, manifestVersion, permissions, full manifest.json | β (embedded in the page's own data before rendering) | |
| Developer contact block β email, address, phone, legal entity, registration number | β (Google's publisher-transparency disclosure) | |
| Individual review text and reviewer names | β β not exposed on the pages this Actor reads | |
| Install analytics, revenue, developer-dashboard metrics | β β Chrome Web Store Developer Dashboard login only | |
Packaged extension source code (.crx contents) | β β outside what a listing page serves |
Chrome Web Store Scraper only returns publicly visible data β what any visitor's browser already downloads. Nothing behind a login wall.
What data can I extract with Chrome Web Store Scraper?
Chrome Web Store Scraper returns three groups of fields for every extension: listing/identity fields, ratings and trust signals, and manifest/developer fields.
π§© Listing & identity fields
| Field | Description |
|---|---|
extensionId | The extension's 32-character Chrome Web Store ID |
name | Extension name, whitespace-normalized |
category | Store category the extension is listed under |
shortDescription | One-line summary shown on listing/search cards |
description | Full description text from the extension's detail page |
url | Canonical https://chromewebstore.google.com/detail/{extensionId} link |
websiteUrl | Developer-supplied website link surfaced on the listing card |
iconUrl | Extension icon image URL |
promoTileUrl | Small promotional tile image URL, when the listing has one |
marqueeTileUrl | Large marquee/banner image URL, when the listing has one |
screenshots | Array of screenshot image URLs from the detail page |
π Ratings, install and trust signals
| Field | Description |
|---|---|
rating | Average star rating (0β5) |
ratingCount | Number of ratings the average is based on |
users | Install count, as Chrome Web Store reports it |
isFeatured | true if the listing carries the store's "Featured" badge |
isEstablishedPublisher | true if Google's established-publisher badge ("no history of violations") is present |
scrapedAt | ISO-8601 UTC timestamp, millisecond precision, of when the record was captured |
βοΈ Manifest & developer fields
| Field | Description |
|---|---|
version | Extension version string, read from the manifest |
manifestVersion | Chrome extension manifest version (2 or 3) |
permissions | Array of permission strings declared in the manifest |
manifest | Full manifest.json dictionary β present only when extractManifest is true; the key is omitted entirely, not set to null, when it's false |
author | Manifest-declared author; falls back to the developer's disclosed email when the manifest doesn't declare one |
developer | Object with the store's publisher-transparency fields: email, displayName, address, phone, legalEntity, registrationNumber, developerId |
developerWebsite | Developer's website link from the transparency block |
privacyPolicyUrl | Extension's privacy policy URL |
π€ Add-on: Need additional Chrome Web Store data?
Need the same install-count-and-rating pattern for Android apps instead of browser extensions? Google Play Scraper covers that ground. If your workflow also needs raw Google result pages alongside your extension research, Google Search Results Scraper and Google Search Results (SERP) Scraper pull structured search data from the same account.
Why not build this yourself?
Chrome Web Store's own Chrome Web Store API only lets a developer publish and manage extensions they own β there's no endpoint for browsing or reading other publishers' listings, ratings, or manifests. There is no official, public read API for the data this Actor returns.
Building this in-house means reverse-engineering Google's AF_initDataCallback bootstrap format and the batchexecute RPC protocol the store's own frontend uses for pagination β both unversioned, and both prone to silent minified-key renames. You'd also need to build and maintain a proxy-escalation ladder for when Google starts blocking the scraping IP, and re-test the parser every time the store ships a frontend update. Chrome Web Store Scraper already does all three: it discovers the RPC IDs and session identifiers at runtime instead of hardcoding them, and it auto-escalates through direct β datacenter β residential proxy tiers when it hits a block.
How to use Chrome Web Store Scraper
Chrome Web Store Scraper runs as an Apify Actor β no separate signup or API key beyond your Apify account.
- Open Chrome Web Store Scraper on the Apify Store and click Run to open it in the Apify Console.
- Pick a Run Mode: π URL list to paste one or more Chrome Web Store category, collection, or search-result URLs into
startUrls, or π Search keyword to type asearchQueryinstead. - In Search mode, narrow results with
itemTypes,filterBy, andminimalRating; in either mode, setmaxItemsto cap how many extensions the run collects. - Turn on
extractManifestif you need the fullmanifest.jsonper record, and adjustdetailConcurrencyif you want the detail-fetching phase to run faster or more conservatively. - Click Start. Records land in the run's dataset live, as each extension finishes parsing β export as JSON, CSV, or Excel once the run completes, or stream items via the API while it's still running.
How to scale to bulk extension extraction
startUrls is an array β add multiple category, collection, or search-result URLs to one run, and Chrome Web Store Scraper walks each of them in turn, discovering extensions up to the single maxItems cap for the whole run. Search mode builds one search URL from one searchQuery per run, so covering several keywords means either separate runs or gathering each keyword's already-built search URL into startUrls instead. detailConcurrency (default 8, max 32) controls how many detail pages fetch in parallel once discovery finishes.
What can you do with Chrome Web Store extension data?
- π A browser-security engineer auditing what's installed across the org uses
permissionsandmanifestto flag extensions requesting broad host access or clipboard permissions before they're approved. - π A market researcher sizing a niche uses
usersandratingCountacross acategoryto rank which extension segments have real install traction versus long-tail noise. - π΅οΈ A competitive analyst tracking a rival's extension uses
versionandscrapedAtacross repeated runs to detect exactly when they ship an update. - π A partnerships or outreach lead building a contact list uses
developer.emailanddeveloperWebsiteto reach publishers directly instead of hunting for a contact form. - π€ An AI engineer building a RAG index of browser-extension capabilities feeds
description,permissions, andmanifestinto a vector store so an agent can answer "which installed extensions can read clipboard data" from a natural-language query.
How does Chrome Web Store Scraper handle rate limits and blocking?
Every run starts direct β no proxy β and only reaches for one if the store pushes back. Requests go through a curl_cffi session that impersonates a real Chrome TLS/HTTP2 fingerprint. On an HTTP 403/429/503, or a response body that looks like Google's anti-abuse interstitial ("unusual traffic", /sorry/, a CAPTCHA page), the Actor escalates one proxy tier at a time β direct β Apify datacenter β Apify residential β and sticks with the first tier that works instead of re-testing lower ones. On residential, it gets three extra same-tier retries, each with a fresh exit IP, before giving up on that request. You can also pin the starting tier yourself via proxyConfiguration β for example, force residential from the very first request instead of waiting for the ladder to escalate there.
Network errors and 5xx responses get up to three retries with linear backoff; a 4xx status other than 429 is not retried. detailConcurrency (default 8, max 32) caps how many detail pages fetch in parallel. If one extension's detail page keeps failing after retries, that extension is skipped β logged, left out of the dataset, and not charged β while the rest of the run continues. β οΈ The Actor does not solve CAPTCHAs; if a full residential retry budget is exhausted mid-block, remaining fetches in that batch will keep failing until the block clears.
β¬οΈ Input
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
mode | No | string | url β scrape one or more listing URLs. search β build the search URL from the keyword + filters below. Default: "url" | "search" |
startUrls | No | array | Chrome Web Store category / collection / search-result URLs to crawl. Used only in URL mode. | ["https://chromewebstore.google.com/category/extensions/lifestyle/travel"] |
searchQuery | No | string | Keyword to search the Chrome Web Store for. Used only in Search mode. Default: "ai" | "ai writing assistant" |
itemTypes | No | array | Filter search results by item type: EXTENSION, THEME. Leave empty for no filter. Default: ["EXTENSION"] | ["EXTENSION"] |
filterBy | No | array | Restrict to featured and/or establishedPublisher listings. Leave empty for no filter. Default: [] | ["featured"] |
minimalRating | No | integer | Only include results rated at or above this many stars (0β5). 0 disables the filter. Default: 0 | 4 |
maxItems | No | integer | Hard cap on how many extensions the run collects (1β50000). Default: 10 | 200 |
extractManifest | No | boolean | When true, every record carries the full manifest dictionary. When false, the manifest key is dropped (summary fields stay either way). Default: false | true |
detailConcurrency | No | integer | How many detail pages fetch at the same time during Phase 2 (1β32). Default: 8 | 8 |
proxyConfiguration | No | object | Override the starting proxy tier. Leave useApifyProxy off to start direct; turn it on and pick RESIDENTIAL to start there straight away. | {"useApifyProxy": false} |
Example input
{"mode": "search","startUrls": [],"searchQuery": "ai writing assistant","itemTypes": ["EXTENSION"],"filterBy": ["featured", "establishedPublisher"],"minimalRating": 4,"maxItems": 200,"extractManifest": true,"detailConcurrency": 8,"proxyConfiguration": { "useApifyProxy": false }}
β¬οΈ Output
Every extension is pushed to the run's default dataset as one typed, normalized JSON record, with the same field names on every run. Export it as JSON, JSONL, CSV, or Excel from the Apify Console, or pull it through the API while the run is still going β records are pushed live as each detail page finishes parsing.
Example output
{"extensionId": "kembcdlbgbcnnchcnbdhbmbhbejnedjf","iconUrl": "https://lh3.googleusercontent.com/example-icon-128.png","promoTileUrl": "https://lh3.googleusercontent.com/example-promo-440x280.png","marqueeTileUrl": null,"name": "QuickDraft AI Writing Assistant","rating": 4.6,"ratingCount": 3821,"users": 200000,"version": "3.2.1","category": "Productivity","shortDescription": "AI-powered writing assistant for emails, docs, and forms.","websiteUrl": "https://quickdraft.example.com","permissions": ["storage", "activeTab", "scripting"],"manifestVersion": 3,"manifest": {"manifest_version": 3,"name": "QuickDraft AI Writing Assistant","version": "3.2.1","permissions": ["storage", "activeTab", "scripting"],"host_permissions": ["https://*/*"],"author": { "email": "dev@quickdraft.example.com" }},"author": "dev@quickdraft.example.com","url": "https://chromewebstore.google.com/detail/kembcdlbgbcnnchcnbdhbmbhbejnedjf","scrapedAt": "2026-08-16T09:41:02.117Z","description": "QuickDraft drafts, rewrites, and proofreads text anywhere you type on the web, with tone and length controls built into a right-click menu.","screenshots": ["https://lh3.googleusercontent.com/example-screenshot-1.png","https://lh3.googleusercontent.com/example-screenshot-2.png"],"developer": {"email": "dev@quickdraft.example.com","displayName": "QuickDraft Labs Inc.","address": "548 Market St, San Francisco, CA 94104, US","phone": "+1-415-555-0114","legalEntity": "QuickDraft Labs Inc.","registrationNumber": "US-DE-7788214","developerId": "114782093456712345678"},"developerWebsite": "https://quickdraft.example.com","privacyPolicyUrl": "https://quickdraft.example.com/privacy","isFeatured": true,"isEstablishedPublisher": true}
How does it work?
Chrome Web Store Scraper never opens a browser. Listing pages ship their results inside Google's own AF_initDataCallback bootstrap data, and "load more" pagination runs through the store's internal batchexecute RPC β the same mechanism the store's own frontend uses. The Actor discovers each page's RPC ID, request template, and session identifiers (WIZ_global_data) by their shape at runtime rather than hardcoding them, so it keeps working when Google renames its minified keys. Detail pages are read the same way, from the ds:0 data block embedded in the page. Requests go out through a curl_cffi session impersonating a real Chrome TLS/HTTP2 fingerprint, with the proxy ladder above kicking in only on a block. Because everything comes from data Google's own frontend already downloads to render the page, only publicly visible information is returned, and the output schema stays the same regardless of how the store's HTML or CSS changes.
Integrations
Chrome Web Store Scraper runs on Apify, so it works with whatever already calls the Apify API in your stack.
Calling Chrome Web Store Scraper programmatically
from apify_client import ApifyClientclient = ApifyClient("<APIFY_API_TOKEN>")run = client.actor("chrome-web-store-scraper").call(run_input={"mode": "search","searchQuery": "ai writing assistant","maxItems": 100,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["name"], item["rating"], item["users"])
Works in Go, Ruby, Node.js, cURL β any language that can make an HTTP request.
MCP integration for AI agents
Chrome Web Store Scraper is reachable through Apify's Actors MCP Server, which exposes any public Apify Actor as an MCP tool. Point an MCP-compatible client (Claude Desktop, Claude Code, Cursor) at:
npx -y @apify/actors-mcp-server --actors chrome-web-store-scraper
with APIFY_TOKEN set in the environment, and the agent can call the Actor and read its dataset like any other MCP tool.
No-code tools (n8n, Make, LangChain)
In n8n, use Apify's integration node β or a generic HTTP Request node pointed at the Actor's run endpoint β to trigger a scrape from a workflow. In Make, the Apify app's "Run Actor" module does the same, feeding dataset items straight into downstream scenario steps. In LangChain, ApifyWrapper calls the Actor by name and loads its dataset directly into a document loader for RAG pipelines.
Is it legal to scrape Chrome Web Store extension listings?
Scraping publicly available Chrome Web Store listings is generally lawful β this is business and product-catalogue data (extension names, ratings, manifests, publisher contact blocks), not personal data pulled from private profiles, so GDPR's data-subject framework does not attach to it. Chrome Web Store Scraper only returns what's already rendered into the store's public page data β nothing behind Google's Developer Dashboard login. What does apply is Google's own Chrome Web Store Terms of Service and any database rights Google holds over the catalogue, so review those before scraping at scale or redistributing the dataset. The developer block can carry an individual publisher's name, email, and phone rather than a company's, so treat bulk storage of that field with care. Consult legal counsel if your use case involves bulk storage of personal data.
Frequently asked questions
What Chrome Web Store extension fields does Chrome Web Store Scraper return?
name, rating, users, permissions, and developer are the top fields most users start with, alongside the full manifest when extractManifest is on. See What data can I extract for the complete list.
Does Chrome Web Store Scraper require a Chrome Web Store account or login?
No. Every field is read from Chrome Web Store pages fetched anonymously β the Actor never authenticates as a Google account.
How many extensions can I extract in one run?
Up to maxItems, which accepts 1β50,000 and defaults to 10. Detail scraping stops as soon as the cap is reached, whichever run mode you're in.
What happens if an extension is removed, unlisted, or its detail page fails to load?
That extension is skipped β the Actor logs it, leaves it out of the dataset, and doesn't charge for it β while the rest of the run keeps going. If a listing page returns zero discovered extensions at all (an empty or renamed category/search URL), the run finishes cleanly with an empty dataset rather than failing.
Can I scrape multiple Chrome Web Store listing pages at once?
Yes, in URL mode β startUrls is an array, and the Actor walks every URL in it. Search mode builds a single search URL from one searchQuery per run.
Does Chrome Web Store Scraper work with Claude, ChatGPT, and other AI agent tools?
Yes β it's reachable through Apify's Actors MCP Server (see Integrations above), and callable as a standard HTTP endpoint by any agent framework that can make a request.
How does Chrome Web Store Scraper compare to other Chrome Web Store scrapers?
As observed on the Apify Store on 2026-08-16: klondikeking's Chrome Web Store scraper also pulls reviews and charges per review event, something this Actor does not do; vujeen's version offers a fetchDetails toggle for ID-only, detail-free runs; datamule's extension scraper is ID/URL-only, with no category, collection, or search-URL crawling and no manifest or developer-contact fields documented. Chrome Web Store Scraper's category/collection/search-URL crawling plus its full manifest.json and developer-transparency block (email, phone, legalEntity, registrationNumber) together are not documented on any of the three at that date.
Does Chrome Web Store Scraper return data in a format LLMs can use directly?
Yes. Every record is typed, normalized JSON with consistent field names across runs β no HTML, no selectors. Pass it directly to an LLM, index it into a vector store, or feed it to an agent tool.
What happens when Chrome Web Store changes its layout or anti-bot system?
The Actor is maintained, and its output schema stays stable across store changes β the parser locates RPC IDs, pagination templates, and session identifiers by their shape at runtime rather than by hardcoded keys, so most minification and layout changes are absorbed automatically. No specific update turnaround time is published.
Can I use Chrome Web Store Scraper without managing proxies or browser infrastructure?
Yes. There's no headless browser to run or maintain β requests go through a lightweight HTTP client β and the built-in proxy ladder escalates automatically on a block, so you don't need to configure or rotate proxies yourself unless you want to pin a starting tier.
Which Chrome Web Store extension fields work best for AI training data and RAG indexing?
For RAG, index description, shortDescription, and permissions β the high-information text fields. For structured training data, extensionId, rating, ratingCount, users, and manifestVersion are the most consistently typed across records; every field returns as a typed primitive (string, number, boolean, or array), never a formatted display string.
Related scrapers
| Scraper | What it extracts |
|---|---|
| Google Play Scraper | Android app listings β install count, rating, developer, category |
| Google Search Results Scraper | Organic Google search result pages |
| Google Search Results (SERP) Scraper | Structured SERP data from Google search |
| Google Scholar Scraper | Academic paper metadata from OpenAlex and Semantic Scholar |
Your feedback
Found a bug, or need a field this record doesn't carry yet? Open an issue from the Issues tab on this Actor's Apify Store page β reports go straight to the Scraper-Engine maintainers, and it's the fastest way to get a fix or a field added.