# WordPress Plugins Scraper · Plugins, Installs & Ratings (`reapx/wordpress-plugins-scraper`) Actor

Scrape WordPress plugins directory by tags, search queries, author accounts, install bands, and rating filters. Extract ratings, active installs, tags, release details, and author links.

- **URL**: https://apify.com/reapx/wordpress-plugins-scraper.md
- **Developed by:** [Tarek Etman](https://apify.com/reapx) (community)
- **Categories:** Developer tools, Business, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.85 / 1,000 wordpress plugin record scrapeds

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

![reapX — public sources in, addressable records out](https://reapx.dev/reapx.gif)

## WordPress Plugins Scraper · Plugins, Installs & Ratings

The **WordPress Plugins Scraper** extracts public metadata, rating breakdowns, active installation estimates, tag classifications, author credentials, and version update details from the official WordPress.org plugin directory (`api.wordpress.org`). Whether you need to monitor e-commerce plugin adoption, analyze SEO tool ratings, track Gutenberg block library updates, or audit top open-source authors, this actor delivers clean, structured JSON records directly into your default dataset.

> Maintained by **reapX**. Every row cites the Apify run that produced it — nothing is inferred, modelled or filled in, and a field absent from the source is absent from the row. The extracted archive for this source is browsable at [reapx.dev/data/wordpress-plugins-scraper/](https://reapx.dev/data/wordpress-plugins-scraper/) and mirrored as an open dataset on [Hugging Face](https://huggingface.co/datasets/reapxdev/wordpress-plugins-scraper) and [Kaggle](https://www.kaggle.com/datasets/reapxdev/wordpress-plugins-scraper). Questions: reapxdev@proton.me

***

### Features

- **Search & Tag Filtering**: Scrape plugins matching keyword queries (e.g., `seo`, `contact form`, `caching`), tag slugs (`woocommerce`, `elementor`, `security`), or specific author profiles (`automattic`, `yoast`, `awesome-motive`).
- **Directory Browse Sections**: Explore WordPress plugin directory collections including `popular`, `featured`, `updated`, and `new` releases.
- **Install & Rating Thresholds**: Set minimum active installation counts (e.g., 10,000+) and rating score floors (e.g., 80% / 4-star rating) to focus on top-performing plugins.
- **Rich Metadata Extraction**: Includes plugin slug, title, version, author profile URL, star rating breakdown (1 to 5 stars), total ratings, support thread resolution metrics, active install counts, total download counts, last update timestamp, release date, homepage URL, short description, tags dictionary, minimum required WordPress core version, tested core version, and required PHP version.
- **Pay-Per-Event Billing**: Charged per plugin record scraped ($0.001 per record) with automatic tier discounts across Free, Bronze, Silver, Gold, Platinum, and Diamond levels.

***

### How it works

1. **API Integration**: Connects directly to `https://api.wordpress.org/plugins/info/1.2/` via high-speed HTTP requests without headless browser overhead.
2. **Paginated Retrieval**: Automatically iterates through paginated result sets using native `query_plugins` requests.
3. **Filtering & Cleaning**: Filters records against configured minimum install and rating thresholds, while sanitizing HTML tags from author and description fields.
4. **Streaming Push**: Emits clean records to the default dataset incrementally with per-event charging, preserving data even if runs are stopped early.

***

### ⬇️ Input

The actor accepts the following configuration parameters via its input schema:

| Parameter | Type | Default / Prefill | Description |
|---|---|---|---|
| `searchQuery` | String | `"seo"` | Keyword or phrase to search within the WordPress plugins directory. E.g., `seo`, `woocommerce`, `contact form`. |
| `tag` | String | `"woocommerce"` | Tag or category slug to filter plugins by on wordpress.org. E.g., `woocommerce`, `security`, `forms`. |
| `author` | String | `""` | WordPress.org author username to filter plugins by. E.g., `automattic`, `yoast`, `elementor`. |
| `browse` | String | `"popular"` | Directory section to browse. Options: `popular`, `featured`, `updated`, `new`. |
| `minActiveInstalls` | Integer | `0` | Filter out plugins with fewer active installations than this threshold. E.g., `10000`. |
| `minRating` | Integer | `0` | Filter out plugins with a rating score below this percentage (0 to 100). E.g., `80`. |
| `maxItems` | Integer | `100` | Maximum number of plugin records to extract and save (1 to 5,000). |

#### Example Input JSON

```json
{
  "tag": "woocommerce",
  "browse": "popular",
  "minActiveInstalls": 10000,
  "minRating": 80,
  "maxItems": 100
}
```

***

### ⬆️ Output

Scraped records are saved to the default dataset. Each record contains the following fields:

| Field Name | Type | Description | Example |
|---|---|---|---|
| `slug` | String | Unique URL identifier for the plugin | `"elementor"` |
| `name` | String | Display title of the plugin | `"Elementor Website Builder"` |
| `version` | String | Latest published version string | `"3.23.0"` |
| `author` | String | Clean author display name | `"Elementor.com"` |
| `authorProfile` | String | URL to author profile on wordpress.org | `"https://profiles.wordpress.org/elementor/"` |
| `rating` | Number | Average user rating score out of 100 | `94` |
| `ratings` | Object | Star rating breakdown dictionary (1-5 stars) | `{"5": 5800, "4": 400, "3": 200, "2": 100, "1": 300}` |
| `numRatings` | Integer | Total number of user ratings submitted | `6800` |
| `supportThreads` | Integer | Total count of community support forum threads | `250` |
| `supportThreadsResolved` | Integer | Count of support forum threads marked resolved | `210` |
| `activeInstalls` | Integer | Estimated active installation count | `5000000` |
| `downloaded` | Integer | All-time total downloads count | `150000000` |
| `lastUpdated` | String | Date string of last update | `"2026-07-28 14:30pm GMT"` |
| `added` | String | Date plugin was added to WordPress directory | `"2016-05-30"` |
| `homepage` | String | Official homepage or documentation URL | `"https://elementor.com"` |
| `shortDescription` | String | Summary blurb of plugin features and purpose | `"The Elementor Website Builder has it all..."` |
| `downloadLink` | String | Direct download URL for the plugin ZIP file | `"https://downloads.wordpress.org/plugin/elementor.3.23.0.zip"` |
| `tags` | Object | Dictionary of tags assigned to this plugin | `{"builder": "builder", "page-builder": "page builder"}` |
| `requires` | String | Minimum required WordPress core version | `"6.0"` |
| `tested` | String | Highest tested WordPress core version | `"6.6"` |
| `requiresPhp` | String | Minimum required PHP version | `"7.4"` |

#### Sample Output Record

```json
{
  "slug": "elementor",
  "name": "Elementor Website Builder",
  "version": "3.23.0",
  "author": "Elementor.com",
  "authorProfile": "https://profiles.wordpress.org/elementor/",
  "rating": 94,
  "ratings": {
    "1": 300,
    "2": 100,
    "3": 200,
    "4": 400,
    "5": 5800
  },
  "numRatings": 6800,
  "supportThreads": 250,
  "supportThreadsResolved": 210,
  "activeInstalls": 5000000,
  "downloaded": 150000000,
  "lastUpdated": "2026-07-28 14:30pm GMT",
  "added": "2016-05-30",
  "homepage": "https://elementor.com",
  "shortDescription": "The Elementor Website Builder has it all: drag and drop page builder, pixel perfect design, mobile editing, and more.",
  "downloadLink": "https://downloads.wordpress.org/plugin/elementor.3.23.0.zip",
  "tags": {
    "builder": "builder",
    "page-builder": "page builder"
  },
  "requires": "6.0",
  "tested": "6.6",
  "requiresPhp": "7.4"
}
```

***

### Use Cases

1. **E-Commerce Ecosystem Research**: Track active install growth, rating distributions, and competitor releases across WooCommerce payment, shipping, and marketing add-ons.
2. **WordPress Plugin Market Analysis**: Analyze top-performing plugins in competitive niches such as SEO, security, form builders, and Gutenberg block packs.
3. **Security & Maintenance Audits**: Identify plugins with low active installation counts, stagnant last-updated dates, or unmaintained PHP/WordPress compatibility ranges.
4. **Developer Portfolio Tracking**: Monitor rating feedback, review volume, and support thread resolution rates across your company's WordPress plugin catalog.

***

### ❓ FAQ

##### How are active installations estimated?

WordPress.org reports active installations in standardized threshold bands (e.g., 10,000, 50,000, 100,000, 1,000,000+). The `activeInstalls` field reflects the exact active install metric returned by the official API.

##### Does this scraper require login or API keys?

No. The scraper accesses the public `api.wordpress.org` endpoints without requiring authentication or API keys.

##### Can I filter by multiple tags or search terms in one run?

You can search by keyword or filter by tag/author per run. To run multi-category extraction at scale, launch multiple tasks using pre-configured task definitions in `TASKS.json`.

***

### 💬 Your feedback

Have feature requests, custom dataset requirements, or questions? Contact the maintainers directly at **reapxdev@proton.me** or browse our public data archives on [reapx.dev](https://reapx.dev).

***

*Unofficial - not affiliated with WordPress or the WordPress Foundation. Collects public data only. reapx. Contact reapxdev@proton.me.*

### 🧪 Example input

A real, runnable configuration — this is an actual input this Actor has run with.

```json
{
  "tag": "woocommerce",
  "browse": "popular",
  "maxItems": 50
}
```

### 📄 Sample output

One real row from a real run of this Actor, unedited.

```json
{
  "slug": "google-listings-and-ads",
  "name": "Google for WooCommerce",
  "version": "3.8.1",
  "author": "WooCommerce",
  "authorProfile": "https://profiles.wordpress.org/woocommerce/",
  "rating": 54,
  "ratings": {
    "5": 95,
    "4": 8,
    "3": 16,
    "2": 15,
    "1": 132
  },
  "numRatings": 266,
  "supportThreads": 38,
  "supportThreadsResolved": 25,
  "activeInstalls": 800000,
  "downloaded": 43029960,
  "lastUpdated": "2026-07-23 3:45pm GMT",
  "added": "2021-05-10",
  "homepage": "",
  "shortDescription": "Native integration with Google that allows merchants to easily display their products across Google’s network.",
  "downloadLink": "https://downloads.wordpress.org/plugin/google-listings-and-ads.3.8.1.zip",
  "tags": {
    "ads": "ads",
    "google": "google",
    "listings": "listings",
    "product-feed": "product feed",
    "woocommerce": "woocommerce"
  },
  "requires": "6.6",
  "tested": "7.0.2",
  "requiresPhp": "7.4"
}
```

### ⚠️ Run outcomes and error handling

This Actor reports what happened in the run's **status message**, and it always keeps whatever it collected. These are the outcomes you can get and what each one means.

| Outcome | What it means |
|---|---|
| **Success** | Rows were returned and you were charged `plugin-scraped` at $0.001 per row. |
| **No matches** | The source returned nothing for your filters. **Nothing is charged.** Widen the date window or drop a filter. |
| **Partial - source refused** | The source rate-limited or refused some requests. The affected items are skipped and named in the log, and **everything already collected is still pushed**. A block never discards a run's work. |
| **Rejected filter** | The source itself rejected the filter combination. The run fails fast with the source's own reason and **nothing is charged.** |

#### What is guaranteed either way

- **Every row is pushed as it is built**, not buffered to the end of the run. Anything that buffers output loses everything to a timeout, a block or a migration; this does not.
- **A field absent from the source is absent from the row.** Nothing is inferred, modelled or filled in to make a row look complete.

# Actor input Schema

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

Keyword or phrase to search within the WordPress plugins directory. For example, "seo", "woocommerce", or "contact form". Leave this field empty if filtering by tag or author instead.<br><br><b>Consequence:</b> Broader searches return more plugins and take longer to run.

## `tag` (type: `string`):

Tag or category slug to filter plugins by on wordpress.org. For example, "woocommerce", "security", "forms", or "elementor". Leave this field empty to include plugins across all tags.<br><br><b>Consequence:</b> Filtering by tag restricts results to plugins tagged with that specific term.

## `author` (type: `string`):

WordPress.org author username to filter plugins by. For example, "automattic", "yoast", "elementor", or "awesome-motive". Leave empty to return plugins from all authors.<br><br><b>Consequence:</b> Specifying an author only returns plugins created or maintained by that account.

## `browse` (type: `string`):

Select the WordPress directory section to browse plugins from. Options include popular, featured, recently updated, or new plugins.<br><br><b>Consequence:</b> Changing the browse section determines the default ranking and ordering of returned plugins.<br><br>Options: <code>popular</code>, <code>featured</code>, <code>updated</code>, <code>new</code>.

## `minActiveInstalls` (type: `integer`):

Filter out plugins with fewer active installations than this threshold. For example, set to 10000 to keep only plugins with at least 10,000 active installs.<br><br><b>Consequence:</b> Higher minimum install counts exclude less popular or newly released plugins.

## `minRating` (type: `integer`):

Filter out plugins with a rating score below this percentage (0 to 100). For example, set to 80 to keep only plugins rated 80% (4 out of 5 stars) or higher.<br><br><b>Consequence:</b> Setting a higher minimum rating excludes plugins with low user feedback scores.

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

Maximum number of plugin records to extract and save to the dataset. Min 1, max 5000.<br><br><b>Consequence:</b> Higher item limits increase run time and event charges proportionally.<br><br>The higher the number, the longer the run takes and the more you are charged, because you pay per row returned.

## Actor input object example

```json
{
  "searchQuery": "seo",
  "tag": "woocommerce",
  "browse": "popular",
  "minActiveInstalls": 0,
  "minRating": 0,
  "maxItems": 100
}
```

# Actor output Schema

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

Default dataset containing scraped WordPress plugin records

# 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 = {
    "searchQuery": "seo",
    "tag": "woocommerce",
    "author": "",
    "browse": "popular"
};

// Run the Actor and wait for it to finish
const run = await client.actor("reapx/wordpress-plugins-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 = {
    "searchQuery": "seo",
    "tag": "woocommerce",
    "author": "",
    "browse": "popular",
}

# Run the Actor and wait for it to finish
run = client.actor("reapx/wordpress-plugins-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 '{
  "searchQuery": "seo",
  "tag": "woocommerce",
  "author": "",
  "browse": "popular"
}' |
apify call reapx/wordpress-plugins-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,reapx/wordpress-plugins-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/X2a9LDMVnk59l5N0S/builds/89ULTDkeZW9vErgkg/openapi.json
