Chrome Web Store Extensions Scraper avatar

Chrome Web Store Extensions Scraper

Pricing

$2.00 / 1,000 extensions

Go to Apify Store
Chrome Web Store Extensions Scraper

Chrome Web Store Extensions Scraper

Scrape Chrome Web Store extensions: users, precise rating, rating count, version, update date, category, size and manifest permissions. Fast HTTP, no browser, no login.

Pricing

$2.00 / 1,000 extensions

Rating

0.0

(0)

Developer

Alexandre Bobichon

Alexandre Bobichon

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 hours ago

Last modified

Share

What does Chrome Web Store Extensions Scraper do?

Chrome Web Store Extensions Scraper extracts public data from Chrome Web Store extension pages: user count, precise rating, number of ratings, category, version, last update date, size, languages, Featured badge, website, support and privacy policy links, the full list of permissions declared in the extension manifest and a permission risk level.

Paste Chrome extension IDs or store URLs, or discover the top extensions of any store category filtered by users, rating, keyword or permission risk, click Start, and download clean, structured data in JSON, CSV or Excel. It runs on the Apify platform, so you also get API access, scheduling, integrations (Google Sheets, Zapier, Make, webhooks) and run monitoring.

It is a lightweight HTTP scraper: no browser, no login, no proxy required, and it scrapes up to about 120 extensions per minute.

Why use Chrome Web Store Extensions Scraper?

  • Competitor tracking: schedule a run with change tracking and get only what changed since last time: new versions, user and rating moves, new permissions. Unchanged extensions can be skipped, so you do not pay for them.
  • Security and permission audits: get a permission risk level (low, medium, high) for each extension, see at a glance which ones can access all websites and which request sensitive permissions such as cookies, tabs or webRequest, with the full list of required, optional and host permissions.
  • Market research: discover the top extensions of a store category (e.g. Developer Tools with at least 1,000,000 users) and compare them by adoption, rating, package size and update activity. With change tracking, get the extensions that newly entered the top.
  • Listing monitoring for extension developers: check your own listing (version, update date, Featured badge, rating trend) without opening the store.

How to scrape Chrome Web Store extension data

  1. Open the Input tab.
  2. Add extension IDs or Chrome Web Store URLs, one per line.
  3. Optionally set Max extensions and disable Include full description for lighter results.
  4. Click Start. The run status shows the progress, e.g. Scraped 42 of 100 extensions….
  5. Open the Output tab to view or download the results, and the Run summary to see which extensions were skipped.

Ready-to-use inputs

Copy one of these into the JSON view of the Input tab and replace the extensions with your own.

Get only what changed at your competitors (add a daily or weekly schedule; each run returns only new and changed extensions, with the previous values):

{
"extensions": ["eimadpbcbfnmbkopoojfekhnkhdbieeh", "aapbdbdomjkkjkaonfhkkikfgjllcleb"],
"includeDescription": false,
"onlyChanges": true
}

Audit the permissions of the extensions installed in your company (open the Permissions view of the Output tab and sort by risk level):

{
"extensions": [
"https://chromewebstore.google.com/detail/dark-reader/eimadpbcbfnmbkopoojfekhnkhdbieeh",
"kbfnbcaeplbcioakkpcpgfkobkghlhen",
"gppongmhjkpfnbhagpmjfkannfbllamg"
],
"includeDescription": false
}

Discover the top Developer Tools with at least 1,000,000 users and no high permission risk:

{
"mode": "categories",
"categories": ["productivity/developer"],
"minUsers": 1000000,
"maxPermissionRiskLevel": "medium",
"includeDescription": false
}

Market research on a list of extensions (full descriptions included):

{
"extensions": ["ddkjiahejlhfcafbddmgiahcphecmpfh", "bcjindcccaagfpapjjmafapmmgkkhgoa"],
"maxItems": 1000,
"includeDescription": true
}

Input

FieldDescription
modeextensions (default): scrape your list. categories: discover the top extensions of store categories.
categoriesWith mode: "categories", store categories to scan, e.g. productivity/developer, lifestyle/games, make_chrome_yours/privacy (18 available in the Input tab). Each category page lists its top 32 extensions.
minUsers / minRating / keyword / maxPermissionRiskLevelWith mode: "categories", filters applied to the category listing before any extension page is read, so you only pay for matching extensions. keyword matches the name or short description; maxPermissionRiskLevel is low, medium or high (default, no filter).
extensionsWith mode: "extensions". Extension IDs, e.g. eimadpbcbfnmbkopoojfekhnkhdbieeh, or detail page URLs, e.g. https://chromewebstore.google.com/detail/dark-reader/eimadpbcbfnmbkopoojfekhnkhdbieeh. Legacy https://chrome.google.com/webstore/detail/... URLs work too.
maxItemsMaximum number of extensions to scrape. Default 100, from 1 to 5,000. Extra entries are ignored.
includeDescriptionInclude the full store description. Default true.
trackChangesCompare each extension with its state from the previous tracked run (see Change tracking). Default false.
onlyChangesSave only new and changed extensions; unchanged ones are not saved and not charged. Enables change tracking. Default false.
stateStoreNameKey-value store of your account that keeps the previous state. Use one name per independent list. Default chrome-web-store-extensions-state.
proxyConfigurationOptional, not needed by default. If you use a proxy, avoid EU locations: Google redirects them to a cookie consent page.

Example input:

{
"extensions": [
"https://chromewebstore.google.com/detail/dark-reader/eimadpbcbfnmbkopoojfekhnkhdbieeh",
"aapbdbdomjkkjkaonfhkkikfgjllcleb"
],
"maxItems": 100,
"includeDescription": false
}

Output

Each extension becomes one item in the dataset. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel. The Overview and Permissions views of the Output tab show the most useful columns.

Example item (real data, languages and image URLs shortened):

{
"id": "eimadpbcbfnmbkopoojfekhnkhdbieeh",
"name": "Dark Reader",
"url": "https://chromewebstore.google.com/detail/dark-reader/eimadpbcbfnmbkopoojfekhnkhdbieeh",
"shortDescription": "Dark mode for every website. Take care of your eyes, use dark theme for night and daily browsing.",
"description": null,
"category": "make_chrome_yours/accessibility",
"categoryName": "Accessibility",
"users": 7000000,
"rating": 4.656276071293136,
"ratingCount": 13185,
"version": "4.9.130",
"updatedAt": "2026-09-02T11:25:59.000Z",
"size": "828KiB",
"sizeBytes": 847872,
"languages": ["Deutsch", "English", "English (United Kingdom)", "français", "日本語"],
"featured": true,
"trader": true,
"websiteUrl": "https://darkreader.org/",
"supportUrl": null,
"privacyPolicyUrl": "https://darkreader.org/privacy/",
"minChromeVersion": "106.0.0.0",
"manifestVersion": 3,
"permissions": ["alarms", "fontSettings", "scripting", "storage"],
"optionalPermissions": ["contextMenus"],
"hostPermissions": ["*://*/*"],
"allSitesAccess": true,
"sensitivePermissions": [],
"permissionRiskLevel": "medium",
"iconUrl": "https://lh3.googleusercontent.com/T66wTLk-…",
"screenshotUrls": ["https://lh3.googleusercontent.com/2_eQJ8fW…"],
"videoUrls": ["https://www.youtube.com/embed/849mznBKmIQ?rel=0&wmode=opaque&enablejsapi=1"],
"scrapedAt": "2026-09-14T17:20:12.327Z"
}

Run summary

At the end of each run, a SUMMARY record is saved in the default key-value store (the Run summary link in the Output tab), so you know what is missing without reading the log:

{
"requestedCount": 3,
"scrapedCount": 2,
"notFoundIds": ["abcdefghijklmnopabcdefghijklmnop"],
"unreadableIds": [],
"failedIds": [],
"invalidInputs": ["https://example.com/not-an-extension"],
"budgetReached": false,
"missingKeyFields": { "version": 0, "updatedAt": 0 },
"changes": { "new": 0, "changed": 1, "unchanged": 1 }
}
FieldDescription
requestedCount / scrapedCountExtensions requested (after removing duplicates and applying maxItems) and extensions saved to the dataset.
notFoundIdsRemoved or unlisted extensions (page not found, or store page without the extension).
unreadableIdsExtension pages without readable data: the store page layout may have changed. Please report it in the Issues tab.
failedIdsExtensions that still failed after retries (network errors, blocking).
invalidInputsInput entries that are not extension IDs or Chrome Web Store detail URLs (first 100).
budgetReachedtrue when the run stopped early because your maximum cost per run was reached.
missingKeyFieldsNumber of scraped extensions without version or updatedAt. These fields exist on every listing, so high counts mean the store page layout changed.
changesWith change tracking, number of new, changed and unchanged extensions; null otherwise.
discoveryWith mode: "categories": requested categories, categories scanned, unreadable categories, extensions listed and extensions matching the filters; null otherwise. invalidInputs then lists unknown categories.

Change tracking

Enable Track changes (or Only save new and changed extensions) and schedule the run. Each extension is compared with its state from the previous tracked run, saved in a key-value store of your account (stateStoreName):

  • new: first time this extension is tracked in this store.
  • changed: at least one of these fields changed: name, categoryName, users, rating, ratingCount, version, updatedAt, size, featured, permissions, optionalPermissions, hostPermissions, allSitesAccess, permissionRiskLevel.
  • unchanged: none of them changed. With Only save new and changed extensions, these are not saved to the dataset and not charged.

The precise rating moves slightly all the time, so changes below 0.01 are ignored; a slow drift is still reported once it adds up. The Changes view of the Output tab shows the status, the changed fields and their previous values:

{
"name": "Dark Reader",
"version": "4.9.131",
"users": 7000000,
"changeStatus": "changed",
"changedFields": ["version", "updatedAt"],
"previousValues": { "version": "4.9.130", "updatedAt": "2026-09-02T11:25:59.000Z" },
"previousScrapedAt": "2026-09-08T06:00:12.000Z"
}

Data fields

Every item has the same fields. Missing values are null (or an empty array for lists), never omitted.

FieldDescription
id / name / urlExtension ID, name and store detail URL.
shortDescription / descriptionSummary and full store description (description is null when Include full description is off).
categoryStore category path, e.g. productivity/developer or make_chrome_yours/accessibility.
categoryNameCategory label as displayed by the store, e.g. Developer Tools, Privacy & Security or Accessibility.
usersUser count as displayed by the store (rounded by Google, e.g. 7000000).
rating / ratingCountPrecise average rating (not rounded to one decimal) and number of ratings.
version / updatedAtCurrent version and last update date (ISO 8601).
size / sizeBytesPackage size as shown by the store (e.g. 828KiB) and the same size converted to bytes (e.g. 847872), handy for sorting. sizeBytes is approximate because the store rounds the displayed size.
languagesLanguages supported by the listing.
featuredtrue when the extension has the Featured badge.
traderEU trader status declared by the developer: true (Trader), false (Non-trader), null when not shown.
websiteUrl / supportUrl / privacyPolicyUrlPublic links provided by the developer (e.g. https://support.grammarly.com/), null when the developer did not provide one.
minChromeVersion / manifestVersionMinimum Chrome version and manifest version (2 or 3).
permissions / optionalPermissions / hostPermissionsPermissions from the extension manifest. Host patterns (such as *://*/* or <all_urls>) are always in hostPermissions, including for Manifest V2 extensions.
allSitesAccesstrue when the extension can run on every website, through its host permissions or its content scripts (e.g. <all_urls>, *://*/*). null when the manifest cannot be read.
sensitivePermissionsRequired permissions that reach beyond the visited page: browsing data (cookies, history, tabs, bookmarks…), network traffic (webRequest, proxy…), other apps and browser control (nativeMessaging, debugger, management…). Optional permissions are not included because they are not granted at install.
permissionRiskLevelhigh = all sites access and sensitive permissions, medium = one of the two, low = neither, null when the manifest cannot be read. It reflects what the extension is allowed to do, not what it actually does.
changeStatus / changedFields / previousValues / previousScrapedAtWith change tracking: new, changed or unchanged, the list of changed fields, their previous values and the date of the previous tracked run. null when change tracking is off.
iconUrl / screenshotUrls / videoUrlsStore icon, gallery screenshots and YouTube promotional videos.
scrapedAtDate and time of extraction (ISO 8601).

How much does it cost to scrape the Chrome Web Store?

The scraper sends plain HTTP requests and reads the data embedded in each page, without a browser and without building the page structure, so runs are fast and light. It runs with 512 MB of memory by default. See the Pricing tab for the current price.

Removed, unlisted or unreadable extensions produce no item in the dataset. If you set a maximum cost per run, the Actor stops the crawl as soon as that limit is reached.

Tips

  • Track trends: schedule a daily or weekly run on the same list with Track changes on, and send the results to Google Sheets to build a history. Use Only save new and changed extensions to receive only the updates.
  • Reliable monitoring: the run fails only when the scraper itself is in trouble, so schedules, webhooks and integrations can alert you: no extension could be read (blocking, network errors, unreadable pages), or version or updatedAt is missing on more than half of the extensions (store layout change). Small extensions without a displayed user count never fail the run. Problems on your side do not fail the run: an input without any valid extension, extensions that were all removed, or a stop at your maximum cost per run end with a clear status message and the run summary.
  • Check what was skipped: open the Run summary (SUMMARY record) to get the IDs of removed, unreadable or failed extensions and the invalid input entries.
  • Lighter results: disable Include full description when you only need metrics.
  • Tested at scale: on 500 random extensions from the store sitemap, 487 were scraped and the 13 removed ones were reported as not found, with 0 failed requests, in about 4.5 minutes and 220 MB of memory. Of the 487 extensions, 11 % had a high permission risk level, 28 % medium and 61 % low.
  • No duplicates: duplicate IDs, or different URLs pointing to the same extension, are scraped only once.
  • Speed: to stay gentle with the store, the Actor processes up to about 120 extensions per minute (5 in parallel), so a run of 5,000 extensions (the maximum) takes around 40 minutes or more.
  • Memory: keep the default 512 MB, which is also the minimum (a 500-extension run peaks at about 220 MB). More memory does not make the scraper faster, because the speed is capped.
  • Entries that are not extension IDs or Chrome Web Store detail URLs are skipped with a warning in the log. URLs from other websites are rejected.

FAQ, disclaimers and support

Is it legal to scrape the Chrome Web Store? This Actor only reads public extension detail pages that are allowed by the store's robots.txt. It does not collect reviews or any personal data: developer emails, phone numbers, postal addresses and personal names are deliberately excluded. You are responsible for using the data in compliance with applicable laws and Google's terms.

Can it search the store or scrape a whole category? It discovers the top 32 extensions of each of the 18 store categories, as listed on the public category pages, and filters them. Keyword search of the whole store and complete category listings are not supported.

Why did my run fail? Either no extension could be scraped (for example, requests were blocked or an EU proxy triggered Google's consent page), or the data quality check found key fields missing on most extensions, which means the store page layout changed and the scraper needs an update. The final status message explains what happened, and the SUMMARY record lists the affected extensions. Please report layout changes in the Issues tab.

My run succeeded but the dataset is empty. Why? The input contained no valid extension ID or URL, or all requested extensions were removed from the store. The status message and the SUMMARY record (invalidInputs, notFoundIds) tell you which.

Can I use it with AI agents? Yes. The Actor runs with limited permissions, so AI assistants connected to the Apify MCP server (Claude, Cursor and others) can find it in Apify Store and call it on demand, for example to check the permissions of an extension before installing it.

Known limitations

  • Reviews, search results and related extensions are not supported.
  • Category discovery is limited to the top 32 extensions of each category page (576 extensions across the 18 categories). Filters use the values shown on the category page, which match the extension page.
  • Removed or unlisted extensions are skipped with a warning and listed in the run summary.
  • If an extension's manifest cannot be read, manifestVersion is null and the permission lists are empty.
  • sizeBytes is derived from the rounded size displayed by the store, not from the actual package.
  • The data comes from the store page structure, which Google can change without notice.

Found a bug or need an extra field? Open an issue in the Issues tab. Need a custom Chrome Web Store dataset? Get in touch through the Issues tab as well.