# Chrome & Edge Extension Intel + Permission Alerts (`mediapro-tools/chrome-edge-extension-intel`) Actor

Users, ratings, versions, update dates, developer and (Edge) permissions for any Chrome or Edge extension by ID or URL. Input: extensions, stores. Output (JSON/CSV): one row per item with store, discovery, id, found, name, url, shortDescription, developer, developerWebsite, category.

- **URL**: https://apify.com/mediapro-tools/chrome-edge-extension-intel.md
- **Developed by:** [Jeremy Yarbrough](https://apify.com/mediapro-tools) (community)
- **Categories:** Developer tools, Automation, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Chrome Web Store + Edge Add-ons Extension Intel

Look up any browser extension by ID or store URL and get clean, structured data from **both** the Chrome Web Store and Microsoft Edge Add-ons: users, rating, rating count, version, last update, size, category, developer, featured badge, EU trader status, and for Edge the full **permission list with risk flags**. Turn on **monitor mode** to get alerts when an extension ships a new version, gains or loses users, changes owner, or **adds new permissions**, the classic sign of a sold or hijacked extension.

### Who it's for

- **Extension developers:** track competitors' installs, ratings and release cadence.
- **Security / IT teams:** watch the extensions your org allows and get flagged on permission creep or a developer change.
- **Investors and acquirers:** size extension businesses by install base.

### Input

| Field | Description |
|---|---|
| `extensions` | 32-char IDs or store URLs (Chrome or Edge) |
| `stores` | Stores to check for bare IDs (default both) |
| `monitorMode` / `onlyChanged` | Diff against the previous run; optionally output only changes |
| `includeDescription` | Full description (Edge) |

### Find extensions by keyword or category

You don't need IDs:

- **`searchKeywords`** search **Edge Add-ons** (the same public search the store site uses). You can add an `edgeCategory` filter, sort by relevance, rating or installs, and get up to 1,000 hits per keyword.
- **`chromeCategories`** (e.g. `make_chrome_yours/privacy`, `productivity/developer`) return the Chrome Web Store's listed extensions for each category. If you also give `searchKeywords`, Chrome rows are filtered to ones whose name or summary contains the keyword. We don't query Chrome's search page, because its robots.txt disallows it.
- Each discovered row carries `discovery` (`source`, `keyword` or `category`, `rank`, `totalMatches`), so you can track **search rank over time** together with monitor mode.
- Set `enrichDetails: false` for a fast listing-only pass (name, developer, rating, ratingCount).

```json
{"searchKeywords":["password manager"],"sortBy":"installs","maxResultsPerSearch":50,"chromeCategories":["make_chrome_yours/privacy"]}
```

### Output (one row per extension per store)

```json
{"store":"edge","id":"odfafepnkmbhccpbejgmiehpchacaeak","name":"uBlock Origin","users":14531821,"rating":4.5,"ratingCount":2680,
 "version":"1.75.0","lastUpdated":"2026-09-16","developer":"Raymond Hill (gorhill)","category":"Productivity",
 "permissions":["alarms","contextMenus","privacy","storage","tabs","unlimitedStorage","webNavigation","webRequest","webRequestBlocking"],
 "riskFlags":["tabs","webRequest","webRequestBlocking","all-sites-access"],"changed":false,"changes":{}}
```

In monitor mode, `changes` lists each changed field as `{from, to}`, and `addedPermissions` lists any new permissions.

### Notes and limits

- Only public store listing pages and Edge's public product-details endpoint are read. No login.
- **No reviews and no personal data.** Developer email, phone and address are deliberately left out. The Chrome store's robots.txt disallows review pages, and we respect that.
- The Chrome Web Store doesn't publish permissions on its listing page, so `permissions` is null for Chrome rows. Chrome user counts are rounded by Google (e.g. "21,000,000+").
- Extensions that are missing or removed return `found: false`, which is useful for spotting takedowns.

### Related tools

- [Shopify App Store Scraper: Apps, Pricing, Reviews & Ranks](https://apify.com/mediapro-tools/shopify-app-store-scraper)
- [Apple App Store Top Charts & Rank Tracker](https://apify.com/mediapro-tools/app-store-charts-tracker)
- [GitHub Repo Stats & Release Tracker (official API)](https://apify.com/mediapro-tools/github-repo-release-tracker)
- [npm & PyPI Package Stats, Downloads & Release Monitor](https://apify.com/mediapro-tools/npm-pypi-package-intel)
- [Hugging Face Models, Datasets & Spaces Scraper + Trend Tracker](https://apify.com/mediapro-tools/hugging-face-models-datasets-tracker)

# Actor input Schema

## `extensions` (type: `array`):

32-character extension IDs or Chrome Web Store / Edge Add-ons URLs. Optional if you use keyword search or category browse below.

## `stores` (type: `array`):

A URL input is checked only in its own store.

## `searchKeywords` (type: `array`):

Find extensions by keyword. Searches Edge Add-ons directly; for Chrome, used as a filter on the categories you pick below (Chrome's own search page is off-limits per its robots.txt).

## `edgeCategory` (type: `string`):

Optional: limit Edge keyword search to one category.

## `chromeCategories` (type: `array`):

Returns the store's listed extensions for each category (about 32 each), with full details.

## `sortBy` (type: `string`):

Order of Edge keyword results.

## `maxResultsPerSearch` (type: `integer`):

Edge results per keyword (20 per page).

## `enrichDetails` (type: `boolean`):

On: users, version, permissions, etc. for every hit (1 extra request each). Off: faster, listing fields only (name, developer, rating).

## `includeDescription` (type: `boolean`):

Edge only (Chrome gives the short description).

## `monitorMode` (type: `boolean`):

Stores a snapshot and reports changes in version, users, rating, permissions, developer, name.

## `onlyChanged` (type: `boolean`):

Monitor mode only.

## `stateStoreName` (type: `string`):

Named key-value store holding snapshots.

## `maxConcurrency` (type: `integer`):

Kept low to stay polite.

## Actor input object example

```json
{
  "extensions": [
    "ddkjiahejlhfcafbddmgiahcphecmpfh",
    "https://microsoftedge.microsoft.com/addons/detail/odfafepnkmbhccpbejgmiehpchacaeak"
  ],
  "stores": [
    "chrome",
    "edge"
  ],
  "searchKeywords": [
    "password manager"
  ],
  "sortBy": "relevance",
  "maxResultsPerSearch": 50,
  "enrichDetails": true,
  "includeDescription": false,
  "monitorMode": false,
  "onlyChanged": false,
  "stateStoreName": "extension-store-monitor",
  "maxConcurrency": 4
}
```

# Actor output Schema

## `results` (type: `string`):

All result records in the default dataset (table view: overview).

## `files` (type: `string`):

Files saved by this run (download links are also in each result record).

## `summary` (type: `string`):

Counts and stats for this run (JSON).

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "extensions": [
        "ddkjiahejlhfcafbddmgiahcphecmpfh",
        "https://microsoftedge.microsoft.com/addons/detail/odfafepnkmbhccpbejgmiehpchacaeak"
    ],
    "searchKeywords": [
        "password manager"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("mediapro-tools/chrome-edge-extension-intel").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "extensions": [
        "ddkjiahejlhfcafbddmgiahcphecmpfh",
        "https://microsoftedge.microsoft.com/addons/detail/odfafepnkmbhccpbejgmiehpchacaeak",
    ],
    "searchKeywords": ["password manager"],
}

# Run the Actor and wait for it to finish
run = client.actor("mediapro-tools/chrome-edge-extension-intel").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "extensions": [
    "ddkjiahejlhfcafbddmgiahcphecmpfh",
    "https://microsoftedge.microsoft.com/addons/detail/odfafepnkmbhccpbejgmiehpchacaeak"
  ],
  "searchKeywords": [
    "password manager"
  ]
}' |
apify call mediapro-tools/chrome-edge-extension-intel --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,mediapro-tools/chrome-edge-extension-intel"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/gma7aHBgeST98EVjI/builds/zrrRICnt2cbRe225b/openapi.json
