# Chrome Extension Details: Version, Rating & Users (`datalantern/chrome-webstore-details`) Actor

Read direct public Chrome Web Store extension detail URLs or IDs. Export title, description, version, update date, rating and source-displayed counts without reviews or developer contacts.

- **URL**: https://apify.com/datalantern/chrome-webstore-details.md
- **Developed by:** [Data Lantern](https://apify.com/datalantern) (community)
- **Categories:** Developer tools
- **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 Extension Details

Collect public metadata from known Chrome Web Store extension detail pages. Track versions, ratings, and source-displayed user counts without searching the store, collecting reviews, or downloading extensions.

### What can this tool do?

Collect public product metadata for a known list of Chrome extensions. Use it for a competitor inventory or a recurring version, rating, and listing-summary check.

- Accept extension IDs or direct public Chrome Web Store detail URLs.
- Deduplicate repeated IDs in the same input.
- Read up to 100 supplied extension entries, one at a time.
- Keep source-rounded user and rating counts as text instead of inventing exact numbers.
- Stop on access restrictions, challenges, or unsupported page layouts.

The tool does not search the store, export reviews, collect developer contact details, or download CRX packages or source code.

### What data does it return?

One row per successfully parsed extension. Missing optional fields are `null`.

| Field | Meaning |
|---|---|
| `extensionId` | The 32-character extension ID. |
| `url` | Canonical public detail URL requested in English. |
| `title` | Public product title. |
| `description` | Public listing summary, or `null`. |
| `version` | Version displayed on the detail page; required for a valid parsed row. |
| `updatedText` | Source update-date text, not a guessed ISO date. |
| `rating` | Displayed average rating out of five, or `null`. |
| `ratingCountText` | Source text such as a rounded ratings count, or `null`. |
| `usersText` | Source text for the displayed user count, or `null`. |

Developer names, email addresses, telephone numbers, reviewer identities, review text, and private-account data are not dedicated output fields. Personal email addresses are masked in exported title and description text.

### How to use it

Paste a known extension ID into the Actor input:

```json
{
  "extensions": ["aapbdbdomjkkjkaonfhkkikfgjllcleb"]
}
```

The same input also accepts a direct public detail URL:

```json
{
  "extensions": [
    "https://chromewebstore.google.com/detail/google-translate/aapbdbdomjkkjkaonfhkkikfgjllcleb?hl=en"
  ]
}
```

`extensions` must contain 1–100 nonblank strings. Omitted input defaults to the Google Translate ID above; an empty array is invalid. IDs must contain exactly 32 lowercase letters from `a` through `p`.

URLs must use HTTPS on `chromewebstore.google.com` and point directly to a detail page. Search, reviews, support, privacy, preview, related, report, and download pages are not accepted. URL fragments, credentials, custom ports, and all query parameters except `hl` are rejected. This includes `authuser`, tracking parameters, and search queries. Accepted detail URLs are normalized to an English `?hl=en` request.

The tool checks robots.txt before fetching listings, waits one second between listing requests, and processes the deduplicated IDs once each. It does not follow links to related products. Invalid entries reject the input before listing requests are made.

For recurring monitoring, save output keyed by `extensionId` and compare `version`, `updatedText`, `rating`, and count text with the previous snapshot. Previous runs are not remembered automatically. A missing row after an access or parsing failure is not evidence that an extension was removed from the store.

### Pricing

Pay per result: **$3.00 per 1,000 extensions**, plus **$0.001 for a run returning at least one valid extension**.

The one-time `actor-start` event costs $0.001 and is triggered only when the first valid extension row is ready. Each returned row incurs one `extension` event at $0.003. Invalid input or a run with no readable extension metadata emits neither event.

For example, 5 returned extensions incur $0.001 + 5 × $0.003 = **$0.016 in Actor event charges**. A partial-success run charges only for the extension rows returned, plus one start charge for the whole run.

### Is it legal?

The tool reads public product-detail HTML from the Chrome Web Store without logging in. It checks [the source's robots.txt](https://chromewebstore.google.com/robots.txt), avoids the restricted search/review/support-related paths, and stops rather than bypassing challenges or access controls.

Robots permission is not a blanket legal or commercial-use authorization. Review the source's terms and product-content rights for your use case. Chrome's developer publishing APIs are not being used or represented as a public scraping API.

No developer contact fields, review data, account data, CRX packages, or source-code downloads are collected.

### FAQ

**Can it discover extensions by keyword?**

No. Supply extension IDs or known public detail URLs. Search pages are out of scope.

**Why are user counts and rating counts text?**

The store may display rounded values. Returning the source text avoids presenting a rounded display as an exact number. Missing counts remain `null`.

**Why can a page open in my browser but fail here?**

The page may require an interactive session, present a challenge, redirect unexpectedly, or use a layout the parser does not support. The tool does not switch accounts, add a proxy, solve a CAPTCHA, or download an extension to work around it.

**Does a run with no rows count as a successful empty result?**

No. Each valid input requests a specific extension. If no extension metadata can be read, the run fails with a source or layout explanation and emits no start or extension events. If some IDs succeed and others fail, successful rows are returned with notes describing the partial result.

**Are dates normalized or counts exact?**

No. `updatedText` is the source's displayed date text, and count fields preserve source text. The tool does not guess timezone, historical values, or exact users from rounded strings.

**Does it maintain a historical record?**

No. Store your own snapshots keyed by `extensionId`. A source failure must not be interpreted as a removal or a change in rating.

### Feedback

For a reproducible report, include a public detail URL or extension ID, the expected metadata, and the exact error or output note. Do not include cookies, account information, tokens, or private data.

# Actor input Schema

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

1–100 Chrome extension IDs or direct detail URLs. No search, reviews, account/tracking parameters, CRX files or developer contacts.

## Actor input object example

```json
{
  "extensions": [
    "aapbdbdomjkkjkaonfhkkikfgjllcleb"
  ]
}
```

# Actor output Schema

## `results` (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 = {
    "extensions": [
        "aapbdbdomjkkjkaonfhkkikfgjllcleb"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("datalantern/chrome-webstore-details").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": ["aapbdbdomjkkjkaonfhkkikfgjllcleb"] }

# Run the Actor and wait for it to finish
run = client.actor("datalantern/chrome-webstore-details").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": [
    "aapbdbdomjkkjkaonfhkkikfgjllcleb"
  ]
}' |
apify call datalantern/chrome-webstore-details --silent --output-dataset

```

## MCP server setup

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

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/UFjVmC84vHuouU5l7/builds/gL5BOjG2Hyi0o58Sq/openapi.json
