# Scraper for Firefox Add-ons — Extensions, Themes & Reviews (`logiover/firefox-addons-scraper`) Actor

Export Firefox extensions, themes, ratings, reviews and version history from Mozilla Add-ons. 600k+ catalog, no key/login/proxy. Not affiliated with or endorsed by Mozilla.

- **URL**: https://apify.com/logiover/firefox-addons-scraper.md
- **Developed by:** [Logiover](https://apify.com/logiover) (community)
- **Categories:** Developer tools
- **Stats:** 1 total users, 1 monthly users, 92.9% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Scraper for Firefox Add-ons — Extensions, Themes, Reviews & Versions

Export structured data from the public Mozilla Add-ons catalog: Firefox extensions, static themes, dictionaries, language packs, ratings, user reviews, version history, permissions, compatibility and direct XPI download links. The catalog contains more than 600,000 searchable add-ons and themes, so the Actor supports anything from a single extension lookup to a 100,000-row research dataset.

No Mozilla account, API key, cookie, proxy or browser is required. This independent Actor uses Mozilla's public Add-ons API v5 and is not affiliated with, endorsed by or sponsored by Mozilla. Firefox and Mozilla marks belong to their respective owners.

### Three output modes

| Mode | One dataset row represents | Best for |
|---|---|---|
| `ADDONS` | One extension, theme, dictionary or language pack | Market maps, competitor intelligence, permission audits, catalog exports |
| `REVIEWS` | One public user rating/review | Sentiment analysis, product research, issue discovery |
| `VERSIONS` | One historical add-on version | Release monitoring, security research, compatibility history |

### Add-on fields

The `ADDONS` mode returns:

- ID, slug, GUID, type, localized name, summary and plain-text description
- listing URL, icon, screenshots, authors, homepage and support URL
- average daily users, weekly downloads, average/Bayesian rating and rating counts
- categories, tags, status, created/updated times and paid/experimental/disabled flags
- recommended/promoted status
- latest version, review time, public XPI URL, file size and SHA-256 hash
- required, optional, host and data-collection permissions
- Firefox and Android minimum/maximum compatibility
- license name/slug/URL and privacy-policy/EULA flags
- optional nested recent reviews and versions
- optional full localization maps and raw Mozilla API record

### Input examples

#### Top 1,000 extensions by users

```json
{
  "dataType": "ADDONS",
  "addonType": "extension",
  "sortBy": "users",
  "maxResults": 1000
}
```

Leave `searchQueries` empty to browse the complete catalog. This is the empty-input behavior and currently exposes over 95,000 extensions plus more than 500,000 themes.

#### Search privacy tools with quality filters

```json
{
  "dataType": "ADDONS",
  "searchQueries": ["privacy", "password manager", "ad blocker"],
  "addonType": "extension",
  "sortBy": "users",
  "minAverageDailyUsers": 1000,
  "minAverageRating": 4,
  "maxResults": 500
}
```

#### Export reviews for specific add-ons

```json
{
  "dataType": "REVIEWS",
  "addonSlugs": ["ublock-origin", "privacy-badger17"],
  "maxItemsPerAddon": 1000,
  "maxResults": 2000
}
```

#### Export version history

```json
{
  "dataType": "VERSIONS",
  "startUrls": [
    { "url": "https://addons.mozilla.org/en-US/firefox/addon/ublock-origin/" }
  ],
  "maxResults": 500
}
```

### Important input behavior

- `startUrls` or `addonSlugs` select exact add-ons and take precedence over search.
- Empty `searchQueries` means the full catalog, not an empty run.
- `sourceAddonLimit` controls how many search-discovered add-ons feed `REVIEWS` or `VERSIONS` mode.
- `maxItemsPerAddon` prevents one popular extension from consuming an entire child-record run.
- `maxResults` is always the final global dataset cap.
- `locale` flattens Mozilla's localized objects; `includeAllLocales` preserves all variants when needed.
- User/rating filters are applied honestly after the API response and pagination continues until the requested number of qualifying records is found or the catalog ends.

### Example add-on output

```json
{
  "recordType": "addon",
  "addonId": 607454,
  "slug": "ublock-origin",
  "guid": "uBlock0@raymondhill.net",
  "addonType": "extension",
  "name": "uBlock Origin",
  "averageDailyUsers": 10626315,
  "weeklyDownloads": 215240,
  "averageRating": 4.8006,
  "ratingCount": 21961,
  "currentVersion": "1.72.2",
  "downloadUrl": "https://addons.mozilla.org/firefox/downloads/file/...xpi",
  "fileSizeBytes": 4585322,
  "permissions": ["storage", "tabs", "webRequest", "<all_urls>"],
  "firefoxMinVersion": "115.0",
  "licenseSlug": "GPL-3.0-only",
  "updatedAt": "2026-07-30T16:06:09Z",
  "sourceEngine": "mozilla_addons_api_v5"
}
```

Review rows include score, body, user, target version, developer reply and timestamps. Version rows include file URL/hash/size, permissions, compatibility, license and release notes.

### Why buyers use this data

- Browser-extension market sizing and competitor discovery
- Popularity and download trend snapshots on a schedule
- Permission and host-access audits across thousands of extensions
- Review sentiment, complaint and feature-request mining
- Security research based on historical XPI hashes and permissions
- Theme/category catalog exports for discovery products
- Extension lead lists using author and support/homepage fields
- AI/RAG datasets grounded in current extension metadata

### Reliability

The engine is pure HTTP against Mozilla's public production API. It follows official pagination links, validates their origin, retries transient 429/5xx/timeouts with bounded backoff, de-duplicates catalog records across queries and fails explicitly instead of reporting a false-success empty dataset. No anti-bot bypass, residential proxy or browser is involved.

### API example

```bash
curl -X POST "https://api.apify.com/v2/acts/logiover~firefox-addons-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"dataType":"ADDONS","addonType":"extension","sortBy":"users","maxResults":1000}'
```

### Responsible use

The Actor reads public catalog information. Review rows may contain public usernames and user-written text; process personal data only for a lawful purpose and respect applicable privacy, copyright and platform rules.

### Changelog

#### 2026-08-02 — complete repurpose

- Retired the blocked Ozon storefront implementation and removed every Ozon-specific proxy, cookie-handshake, product parser, schema and documentation component.
- Rebuilt the same Actor slot as a Firefox Add-ons catalog, reviews and version-history scraper powered by Mozilla's public API v5.
- Added full-catalog pagination for 95k+ extensions and 500k+ themes, multi-query de-duplication and exact add-on URL/slug lookup.
- Added separate high-volume `ADDONS`, `REVIEWS` and `VERSIONS` output modes.
- Added locale flattening, rich permissions/compatibility/file/license fields, quality filters and optional nested enrichment.
- Replaced 4 GB residential-proxy runs with a browserless, proxyless HTTP actor designed for 512 MB.

# Actor input Schema

## `dataType` (type: `string`):

Add-ons outputs extension/theme records. Reviews and Versions output one dataset row per child record.

## `searchQueries` (type: `array`):

Keywords to search in Mozilla Add-ons. Leave empty to browse the full catalog ordered by the selected sort.

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

Mozilla Add-ons URLs to fetch directly. When supplied, search queries are ignored.

## `addonSlugs` (type: `array`):

Alternative to URLs, for example ublock-origin. Mozilla API add-on GUIDs are also accepted.

## `addonType` (type: `string`):

Limit catalog searches to extensions, themes, dictionaries or language packs.

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

Mozilla's server-side result ordering. Users is best for popular catalog exports.

## `maxResults` (type: `integer`):

Global dataset row cap across all queries and source add-ons.

## `sourceAddonLimit` (type: `integer`):

For Reviews or Versions mode, maximum number of add-ons discovered from searches before child records are collected.

## `maxItemsPerAddon` (type: `integer`):

Per-add-on cap in Reviews or Versions mode. The global maxResults cap still applies.

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

Preferred locale used to flatten Mozilla's localized names, summaries, descriptions, licenses and release notes.

## `minAverageDailyUsers` (type: `integer`):

Client-side quality filter for catalog results. Zero disables the filter.

## `minAverageRating` (type: `number`):

Client-side rating filter from 0 to 5. Zero disables the filter.

## `includeRecentReviews` (type: `boolean`):

ADDONS mode only. Fetch recent reviews and place them in recentReviews\[]. Use REVIEWS mode for one row per review.

## `maxRecentReviews` (type: `integer`):

Maximum recent reviews embedded in each add-on row when enrichment is enabled.

## `includeRecentVersions` (type: `boolean`):

ADDONS mode only. Fetch recent versions into recentVersions\[]. Use VERSIONS mode for one row per version.

## `maxRecentVersions` (type: `integer`):

Maximum recent versions embedded in each add-on row when enrichment is enabled.

## `includeAllLocales` (type: `boolean`):

Add Mozilla's complete name, summary and description locale maps to ADDONS rows.

## `includeRawRecord` (type: `boolean`):

Add the original Mozilla API object to each dataset row for advanced use.

## Actor input object example

```json
{
  "dataType": "ADDONS",
  "searchQueries": [
    "ad blocker"
  ],
  "startUrls": [
    {
      "url": "https://addons.mozilla.org/en-US/firefox/addon/ublock-origin/"
    }
  ],
  "addonType": "extension",
  "sortBy": "users",
  "maxResults": 100,
  "sourceAddonLimit": 10,
  "maxItemsPerAddon": 100,
  "locale": "en-US",
  "minAverageDailyUsers": 0,
  "minAverageRating": 0,
  "includeRecentReviews": false,
  "maxRecentReviews": 5,
  "includeRecentVersions": false,
  "maxRecentVersions": 5,
  "includeAllLocales": false,
  "includeRawRecord": false
}
```

# Actor output Schema

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

Browse and export the output dataset as JSON, CSV, Excel or other supported formats.

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

Open the dataset in Apify Console.

# 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 = {
    "searchQueries": [
        "ad blocker"
    ],
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/firefox-addons-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 = {
    "searchQueries": ["ad blocker"],
    "maxResults": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("logiover/firefox-addons-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "searchQueries": [
    "ad blocker"
  ],
  "maxResults": 100
}' |
apify call logiover/firefox-addons-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=logiover/firefox-addons-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

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