# Chrome Extension Permissions Scraper (`googleapi/chrome-extension-permissions-scraper`) Actor

Inventory public Chrome extension permissions and host-access declarations.

- **URL**: https://apify.com/googleapi/chrome-extension-permissions-scraper.md
- **Developed by:** [Google API](https://apify.com/googleapi) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.99 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

This Actor extracts public Chrome Web Store permission and host-access declarations while also returning a rich extension listing record. One normal dataset row represents one extension and includes the full public Overview, developer/contact data, listing metrics, privacy disclosures, technical metadata, media, version information, and the structured permission profile.

### Scope and access boundary

Only public Chrome Web Store pages are in scope. The Actor does not log in, solve CAPTCHAs, access private APIs, or infer permissions not present in the listing. If a page is blocked or unavailable, the run summary and logs report the issue without adding an invalid extension record.

### Inputs

Use `extensionId` or `extensionIds` for known extensions, or provide public Chrome Web Store detail, search, or category URLs with `startUrls`, `sourceUrls`, or `urls`. For discovery, use `queries`, `query`, or `searchQuery` with optional category paths. `page` selects the starting page for search/category sources, and `maxPages` sets the page limit per source; ID lookups start from the first search page. `maxItems`, `maxRequests`, and `maxDetailRequests` bound records and public pages collected. `proxyConfiguration` can route permitted public requests through Apify Proxy.

### Output

Each dataset row represents an extension and can include its canonical identity and URLs; overview, category, and publisher details; ratings and user counts; version and update information; required and optional API or host permissions; content-script access; privacy disclosures; support links; related extensions; features, media, and version history. `permissionCategory` groups permission names into site access, browsing activity, storage, clipboard, device/system, or browser-feature categories.

Required permissions, optional permissions, host permissions, and optional host permissions remain separate. `permissionDataAvailable`, `hasAllSitesAccess`, and `broadHostAccess` preserve unknown source coverage instead of interpreting an absent declaration as a negative permission.

All-site access includes `<all_urls>`, `*://*/*`, `http://*/*`, and `https://*/*`. Exact schemes remain in `hostPermissionDetails`; an HTTP-only wildcard is not silently described as granting HTTPS access. Wildcard subdomains of one named domain are broad access, but not all-site access.

You can download the dataset in formats such as JSON, HTML, CSV, or Excel. The run summary is available alongside it in the Output tab.

### Example public listing

The [AdBlock Chrome Web Store listing](https://chromewebstore.google.com/detail/adblock-%E2%80%94-block-ads-acros/gighmmpiobklfepjocnamgkkbiglidom) is an example public detail page. Permission data is included only when the public listing exposes it; the Actor does not infer missing permissions or access hidden APIs.

# Actor input Schema

## `extensionId` (type: `string`):

One 32-character public Chrome extension ID. The Actor searches the official Chrome Web Store and opens the matching result's canonical detail link.

## `extensionIds` (type: `array`):

Public Chrome extension IDs to find through official Chrome Web Store search, then open using the matching result's canonical detail link.

## `startUrls` (type: `array`):

Public Chrome Web Store detail, search, or category URLs. Detail URLs are fetched once; ID-only inputs use official search to discover the canonical detail URL.

## `sourceUrls` (type: `array`):

Alias for startUrls.

## `urls` (type: `array`):

Alias for startUrls.

## `queries` (type: `array`):

Public Chrome Web Store search terms.

## `query` (type: `string`):

One search term.

## `searchQuery` (type: `string`):

Alias for query.

## `category` (type: `string`):

Optional Chrome Web Store category slug.

## `locale` (type: `string`):

Accepted for compatibility with locale-aware callers.

## `language` (type: `string`):

Alias for locale.

## `maxItems` (type: `integer`):

Maximum number of normal extension records.

## `maxPages` (type: `integer`):

Maximum public listing pages to inspect per source. ID-only lookup starts at the first result page regardless of Page.

## `maxRequests` (type: `integer`):

Maximum direct public page requests.

## `maxDetailRequests` (type: `integer`):

Maximum extension detail pages to inspect.

## `requestTimeoutSecs` (type: `integer`):

Maximum wait for each public request.

## `timeoutSecs` (type: `integer`):

Alias for requestTimeoutSecs.

## `requestTimeoutMs` (type: `integer`):

Millisecond form of the request timeout.

## `requestDelayMs` (type: `integer`):

Delay between public requests.

## `maxRetries` (type: `integer`):

Maximum retry attempts for failed requests.

## `userAgent` (type: `string`):

Optional ordinary browser user agent.

## `proxyConfiguration` (type: `object`):

Optional Apify proxy configuration for permitted public requests.

## `page` (type: `integer`):

One-based starting page for search or category start URLs. ID-only lookup always starts at page 1; detail URLs are fetched once.

## Actor input object example

```json
{
  "maxItems": 25,
  "maxPages": 1,
  "maxRequests": 50,
  "maxDetailRequests": 25,
  "requestTimeoutSecs": 25,
  "requestDelayMs": 0,
  "maxRetries": 1,
  "page": 1
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

## `runSummary` (type: `string`):

No description

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("googleapi/chrome-extension-permissions-scraper").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("googleapi/chrome-extension-permissions-scraper").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 '{}' |
apify call googleapi/chrome-extension-permissions-scraper --silent --output-dataset

```

## MCP server setup

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

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/mLT8nkMbG1Ov9eNnf/builds/gbB6ghu4Z0CunhRCf/openapi.json
