A Chrome extension with <all_urls> host access can read your banking session, your email, your internal admin panels — every page you open. Most orgs have no idea which of the extensions their people installed request that level of access. The Chrome Web Store won't tell you in bulk: permission info lives inside each extension's manifest, one listing at a time.
I kept seeing the same manual workflow: a security reviewer opens 40 extension pages, clicks through to the details, squints at the permission list, pastes findings into a sheet. Next quarter, repeat, because versions and permissions changed.
That's a scraping problem, so I built Chrome Web Store Intelligence & Permission-Risk Scraper — it turns any list of extensions, search queries, or whole categories into structured rows with a documented 0–100 permission-risk score. $2.40 per 1,000 extensions, HTTP-only, no login, no API key.
What you get per extension
One row per extension with the fields a review actually needs:
| Field | Example |
|---|---|
name / extensionId
|
uBlock Origin / cjpalhdl…
|
rating / ratingCount / userCount
|
4.7 / 35450 / 11000000
|
version / lastUpdatedDays / isAbandoned
|
1.74.0 / 0.3 / false
|
apiPermissions |
["scripting","tabs","cookies"] |
hostPermissions |
["https://*/*"] |
permissionRiskScore |
86 |
riskLevel |
critical |
riskFlags |
["broad_host_access","reads_cookies"] |
The risk model is transparent: broad host access (<all_urls>, *://*/*), debugger, nativeMessaging, proxy, management, cookies, webRequest, history and friends each carry documented weights. Every score comes with human-readable flags so you can see why something is critical, not just that it is. It handles both Manifest V2 and V3, and flags extensions abandoned for over a year — the quiet way risky code stays installed forever.
Three input modes
{
"searchQueries": ["password manager"],
"categories": ["extensions/productivity/tools"],
"maxExtensions": 200,
"minUsers": 10000,
"onlyRiskLevels": ["high", "critical"]
}
Paste explicit extension URLs/IDs, run search queries, or enumerate whole categories — mixed in one run. Filters (minUsers, minRating, onlyRiskLevels, requireBroadHostAccess) run before charging: filtered-out extensions are free. The example above returns exactly the shortlist a security reviewer wants — popular extensions with dangerous permission sets.
It's not only for security teams. Extension developers use the same rows to track competitor ratings, user growth and update cadence; acquirers screen for abandoned extensions with big install bases.
Put it on a schedule
The data rots fast — versions ship weekly, permissions change silently on update, new extensions appear daily. The useful setup is not one run, it's a standing audit:
- Run once with your allowlist (or a category) as input, sanity-check the output.
- On the actor page: ⋯ menu → Schedule Actor, cron
0 7 * * 1(weekly Monday morning fits most review cadences). - Add a Google Sheets or Slack integration on Run succeeded, filtered to
riskLevelinhigh/critical.
From then on, a permission escalation in an extension your org uses shows up in Slack Monday morning instead of in an incident report.
MCP / AI-agent angle
The actor is exposed via Apify's MCP server, so an AI agent can call it as a tool: "audit these 30 extensions and summarize which ones can read cookies on all sites" becomes one tool call returning structured JSON the agent can reason over. Agent-driven security reviews are exactly the kind of repetitive, structured task this was built for.
I build pay-per-event scrapers for boards people refresh manually — the full portfolio is here. If you try the extension scraper and something's missing, open an issue on the actor; field requests routinely ship within days.
Top comments (0)