Tony Wang5 min readHow to Scrape the Chrome Web Store in 2026 (API & Python)
Scrape Chrome Web Store extension data in 2026 — search, ratings, reviews, permissions, and privacy disclosures — DIY, no-code, or a structured API.
The fastest way to scrape the Chrome Web Store in 2026 is to call a structured API that returns normalized JSON — search results, listing detail, user reviews, declared permissions, and privacy disclosures — instead of parsing the store's client-rendered pages yourself. There's no public developer API for this data, and Google's general terms restrict automated access. This guide covers all three approaches, what each returns, where DIY breaks, and the legal basics.
Why scrape the Chrome Web Store?
Chrome Web Store listing and permission data powers:
- Extension market intelligence — track category leaders, fast growers, and install-count trends over time.
- Competitor and ASO research — compare listings, keywords, ratings, and review velocity for a category.
- Security inventory — monitor which extensions request broad host access (
<all_urls>), track MV2-to-MV3 migration, and flag permission changes between versions. - Trust and privacy research — read an extension's own declared data-collection disclosure before recommending or allowlisting it.
- Publisher and portfolio research — see everything one developer account has published.
Is it legal to scrape the Chrome Web Store?
Option 1: DIY in Python (and why it breaks)
The store's item pages render client-side, so a DIY scraper has to reach the data embedded in the page or the store's internal endpoints:
import requests
resp = requests.get(
"https://chromewebstore.google.com/detail/cjpalhdlnbpafiamejdnhcphjbkeiagm",
headers={"User-Agent": "Mozilla/5.0 (compatible; research-bot/1.0)"},
)
# Rating, install count, and permissions live in an embedded JSON blob,
# not selectable markup — and /reviews and /privacy are separate,
# robots.txt-disallowed sub-pages you'd have to fetch individually
It demos and then breaks:
robots.txtexplicitly carves out the interesting parts. The sitemap covers base item pages, but/searchand an item's/reviewsand/privacysub-pages are disallowed — exactly the endpoints a market-intelligence or security-research use case needs most.- No stable markup. Ratings, install counts, and permissions live in an embedded JSON blob that shifts shape with store redesigns.
- Full-catalog scale is real. The store's own sitemap spans 30+ shards covering roughly 250K+ extensions — a full sweep is tens of gigabytes of responses before you even parse anything, so a naive per-page loop doesn't scale to a full census.
- Permissions and privacy data need separate requests. Detail, reviews, permissions, and privacy disclosures are four different fetches per extension, each with its own shape.
Option 2: No-code tools
Marketplace scraper actors exist for individual extension lookups and suit one-off pulls, but a full-catalog or security-monitoring use case needs the same per-item fan-out across four endpoints regardless of the tool.
Option 3: A structured Chrome Web Store API
For a repeatable workflow, a Chrome Web Store scraping API returns normalized JSON with no page parsing. Search for extensions:
curl "https://api.crawlora.net/api/v1/chromewebstore/search?term=vpn" \
-H "x-api-key: $CRAWLORA_API_KEY"
Pull detail, permissions, and privacy disclosure for a result in Python:
import requests
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1/chromewebstore"
hits = requests.get(f"{base}/search", headers=h, params={"term": "ad blocker"}).json()["data"]["results"]
ext_id = hits[0]["id"]
item = requests.get(f"{base}/item", headers=h, params={"id": ext_id}).json()["data"]
permissions = requests.get(f"{base}/permissions", headers=h, params={"id": ext_id}).json()["data"]
privacy = requests.get(f"{base}/privacy", headers=h, params={"id": ext_id}).json()["data"]
reviews = requests.get(f"{base}/reviews", headers=h, params={"id": ext_id, "num": 20}).json()["data"]
A search response is normalized JSON (real fields — check the docs):
{
"code": 200,
"msg": "OK",
"data": {
"query": "vpn",
"count": 1,
"results": [
{ "id": "majdfhpaihoncoakbjgbdhglocklcgno", "name": "Free VPN for Chrome - VPN Proxy VeePN", "rating": 4.5, "rating_count": 50285, "publisher": "veepn.com", "url": "https://chromewebstore.google.com/detail/majdfhpaihoncoakbjgbdhglocklcgno" }
]
}
}
Permissions return the extension's declared access, including any broad host permission:
{
"data": {
"id": "cjpalhdlnbpafiamejdnhcphjbkeiagm",
"manifest_version": 2,
"permissions": ["alarms", "contextMenus", "storage", "tabs", "webNavigation", "webRequest", "webRequestBlocking", "<all_urls>"]
}
}
And the privacy endpoint returns the developer's own disclosure — what data categories they've declared collecting, and their stated use commitments:
{
"data": {
"id": "kbfnbcaeplbcioakkpcpgfkobkghlhen",
"collects_data": true,
"data_collected": ["Personally identifiable information", "Personal communications", "Location", "User activity", "Website content"],
"declarations": ["Not being sold to third parties, outside of the approved use cases"]
}
}
Store one row per extension per pull, and re-run on a schedule to track rating, install-count, permission, and version drift over time.
What you can collect
Public extension data: search results (id, name, rating, rating count, publisher); listing detail (description, category, developer, size, version, update date, install count, screenshots, support/privacy links); user reviews (author, rating, text, version, date); declared permissions and host permissions, including optional ones; privacy disclosures (data categories collected, developer declarations); plus categories, curated collections, top charts, publisher profiles, and related-item suggestions. Public listing and review data only.
Limitations and common challenges
robots.txtdisallows search and the reviews/privacy sub-pages. Budget for a structured API rather than crawling those paths directly.- Four separate calls per extension. Detail, reviews, permissions, and privacy each need their own fetch — plan the fan-out if you're covering a category or a full census.
- Full-catalog scale. The public sitemap spans 30+ shards and roughly a quarter-million extensions — treat a full sweep as a durable, resumable crawl, not a single script run.
- Permission heuristics aren't a security score.
<all_urls>or a broad permission set is a signal, not proof of malicious intent — don't label a derived heuristic "malware" without a real methodology. - Public data only. This returns listing metadata, not the extension's actual code package (the
.crxfile) — downloading and analyzing that is a separate, much heavier undertaking with its own review.
Where this gets used
- Extension market intelligence — category leaders, fast growers, and abandoned high-install extensions.
- Security inventory — MV2-to-MV3 migration tracking, permission and host-access drift, privacy disclosure changes.
- Competitor and ASO research — keyword and rating comparisons within a category.
Sources
Start collecting
Try it first, free: run any public URL through the Free Web Scraper, or check whether a site blocks bots with the Anti-Bot Checker — no signup.
Test the search, item, and permissions endpoints in the Playground, check the schema in the API docs, and review pricing. Extensions are one distribution surface for a product; how to scrape Google Play and how to scrape App Store reviews cover the mobile-app side with the same search-then-detail-then-reviews shape. See also how to choose a web scraping API and is web scraping legal.
Part of our how-to-scrape guide series — every platform we cover, in one index.
Frequently asked questions
Is there an official Chrome Web Store API for extension metadata?
No public developer API for search or listing data. Google's general terms restrict automated access, and the store's own robots.txt disallows crawling /search and an item's /reviews and /privacy sub-pages directly, even though it publishes a sitemap for the base catalog.
Is scraping the Chrome Web Store legal?
Public listing facts (name, rating, install count, declared permissions) aren't copyrightable, but Google's terms restrict automated access, and robots.txt specifically disallows crawling search and the reviews/privacy sub-pages. Reviewer names and text are personal data under GDPR/CCPA. Use public, factual fields and respect rate limits. Not legal advice.
Can I check an extension's permissions before installing it?
Yes — /chromewebstore/permissions returns an extension's declared permissions and host permissions, including any broad <all_urls> access, plus its manifest version (MV2 vs MV3).
Can I see an extension's privacy disclosure?
Yes — /chromewebstore/privacy returns the developer's own declared data-collection categories and use-commitment statements, the same disclosure shown on the store listing.
How many extensions does the Chrome Web Store have?
The store's public sitemap spans 30+ shards covering roughly a quarter-million extensions. Treat a full census as a durable, resumable crawl rather than a single script run.
Can I get an extension's reviews?
Yes — /chromewebstore/reviews returns individual review rows (author, rating, text, version, date) for a given extension id, sortable and paginated.
Can I see everything one developer has published?
Yes — /chromewebstore/developer returns a publisher's profile and their other listed items, useful for portfolio and publisher-risk research.