# Wordpress Org Plugins Scraper (`real-estate-api/wordpress-org-plugins-scraper-202610120341`) Actor

WordPress.org Plugins Scraper is a Python tool designed to extract plugin names, active installation counts, user ratings, author metadata, tested WP versions, and update histories from the WordPress.org Plugin Directory. It exports structured opensource plugin datasets into clean CSV or JSON format

- **URL**: https://apify.com/real-estate-api/wordpress-org-plugins-scraper-202610120341.md
- **Developed by:** [real-estate-api](https://apify.com/real-estate-api) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.99 / 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/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

### WordPress.org Plugins Scraper — Plugin Search, Installs, and Ratings

### Overview

WordPress.org Plugins Scraper collects publicly available plugin information from the WordPress.org plugin directory. It helps you discover plugins, compare active installations and ratings, review compatibility information, and examine plugin details.

Search by keyword, author, or tag, browse popular or recently updated plugins, or retrieve details for specific plugin slugs. Results are saved in an Apify dataset that you can export as JSON, CSV, or Excel.

### Features

- **Keyword search:** Find plugins using search terms such as `seo`.
- **Author catalogs:** Collect plugins associated with specified WordPress.org usernames.
- **Tag-based discovery:** Find plugins categorized under selected directory tags.
- **Plugin browsing:** Browse popular, new, or recently updated plugins.
- **Detailed plugin information:** Retrieve metadata for known plugin slugs.
- **Installation and rating statistics:** Collect active installation counts, downloads, ratings, and rating breakdowns when available.
- **Compatibility information:** Review required WordPress and PHP versions and required plugins.
- **Duplicate reduction:** Store each plugin slug only once during a run.
- **Structured exports:** Download the collected dataset as JSON, CSV, or Excel.

### Use Cases

- **Plugin shortlists:** Compare plugins by active installations, downloads, and user ratings.
- **Author research:** Build catalogs of plugins published by selected developers.
- **Category research:** Discover plugins associated with specific directory tags.
- **Plugin maintenance:** Review version numbers, update dates, and compatibility requirements.
- **Directory monitoring:** Compare repeated exports to identify changes in plugin statistics.
- **WordPress site audits:** Prepare plugin research data for evaluating dependencies and alternatives.

### Input Parameters

| Parameter | Type | Default | Description |
|---|---|---|---|
| `searchQueries` | Array | `["seo"]` | Keywords used to search the plugin directory. |
| `authors` | Array | `[]` | WordPress.org author usernames. |
| `tags` | Array | `[]` | Plugin directory tags to search. |
| `browse` | String | `""` | Browse category: `popular`, `new`, or `updated`. An empty string skips browsing. |
| `pluginSlugs` | Array | `[]` | Plugin slugs for retrieving detailed records. |
| `maxItems` | Integer | `100` | Maximum number of plugin records to collect. Maximum: `1000`. |

### Example Input

```json id="5x9d2q"
{
  "searchQueries": ["seo"],
  "authors": ["automattic"],
  "tags": [],
  "browse": "",
  "pluginSlugs": ["akismet"],
  "maxItems": 100
}
```

To search for different plugin categories, add keywords to `searchQueries`.

To retrieve specific plugin details, add their directory slugs to `pluginSlugs`.

To browse popular plugins, set `browse` to `popular`. Use `new` or `updated` to select the corresponding directory listing.

### What Data Does This Actor Extract?

The actor collects plugin metadata and statistics returned by the WordPress.org plugin directory. Available fields depend on the selected collection method and the information provided for each plugin.

#### Extracted Data Fields

| Field | Type | Description |
|---|---|---|
| `name` | String | Plugin display name. |
| `slug` | String | Unique plugin directory slug. |
| `version` | String | Current plugin version. |
| `author` | String | Plugin author credit. |
| `author_profile` | String | Author profile reference, when available. |
| `requires` | String | Minimum required WordPress version. |
| `tested` | String | WordPress version against which the plugin was tested. |
| `requires_php` | String | Minimum required PHP version, when available. |
| `requires_plugins` | Array | Slugs of other required plugins, when specified. |
| `rating` | Integer | Plugin rating score. |
| `ratings` | Object | Counts of ratings by star level. |
| `num_ratings` | Integer | Total number of ratings. |
| `support_threads` | Integer | Number of support threads. |
| `support_threads_resolved` | Integer | Number of resolved support threads. |
| `active_installs` | Integer | Reported number of active installations. |
| `downloaded` | Integer | Total downloads reported by the directory. |
| `last_updated` | String | Date or timestamp of the latest update. |
| `added` | String | Date the plugin was added to the directory. |
| `homepage` | String | Plugin homepage reference, when available. |
| `short_description` | String | Brief plugin description. |
| `pluginDescription` | String | Longer plugin description. |
| `tags` | Object | Plugin tag names and associated values. |
| `mode` | String | Collection method, such as `search`, `author`, `tag`, `browse`, or `detail`. |
| `scraped_at` | String | Timestamp when the record was saved, in UTC. |

Additional fields may be present when returned by the directory and retained by the actor.

### Example Output

A plugin record may look like this:

```json id="m8k3vp"
{
  "name": "Rank Math SEO - AI SEO Tools to Dominate SEO Rankings",
  "slug": "seo-by-rank-math",
  "version": "1.0.280",
  "author": "Rank Math SEO",
  "requires": "6.7",
  "tested": "7.1.3",
  "requires_php": "7.4",
  "requires_plugins": [],
  "rating": 96,
  "ratings": {
    "5": 7075,
    "4": 144,
    "3": 53,
    "2": 43,
    "1": 196
  },
  "num_ratings": 7511,
  "support_threads": 46,
  "support_threads_resolved": 39,
  "active_installs": 4000000,
  "downloaded": 200256922,
  "last_updated": "2026-10-06 12:43pm GMT",
  "added": "2018-11-19",
  "short_description": "SEO plugin",
  "pluginDescription": "Longer description text from the directory.",
  "tags": {
    "seo": "seo"
  },
  "mode": "search",
  "scraped_at": "2026-10-12T00:00:00Z"
}
```

The values are illustrative and may not reflect the plugin's current directory information.

### Working with Your Dataset

1. Run the actor with your search terms, authors, tags, browse category, or plugin slugs.
2. Open the resulting dataset.
3. Review plugin details, installation counts, ratings, and compatibility information.
4. Export the dataset as JSON, CSV, or Excel.
5. Compare exports from different runs to review changes over time.

### Important Notes

- Plugin information reflects the directory data available when the actor runs.
- Some fields may be empty or unavailable for particular plugins.
- The `maxItems` setting limits the number of plugin records collected.
- Duplicate plugin slugs are stored only once during a run.
- Search and browse results depend on the directory's available listings and ranking.
- Installation counts, downloads, ratings, and update information can change over time.

### FAQ

**Can I search for plugins by keyword?**

Yes. Add your keywords to the `searchQueries` array.

**Can I collect plugins from a specific author?**

Yes. Add the author's WordPress.org username to the `authors` array.

**Can I retrieve details for a known plugin?**

Yes. Add the plugin slug to `pluginSlugs`.

**Can I browse newly added or updated plugins?**

Yes. Set `browse` to `new` or `updated`. You can also use `popular` for popular plugin listings.

**Does the actor collect active installations and ratings?**

Yes. These statistics are included when they are available in the directory results.

**Can I export the results to a spreadsheet?**

Yes. Export the Apify dataset as CSV or Excel, or download it as JSON.

### Disclaimer

This actor is an independent data collection tool and is not affiliated with or endorsed by WordPress.org or the WordPress project. Plugin information and statistics may change, and the completeness of each record depends on the publicly available directory data.

### Is Web Scraping Legal?

Collecting information that is already public is generally legal. Scraping is not the same thing as hacking, and there is no single law that bans it. The limits are the usual ones: do not break into accounts, do not take private or confidential data, and be careful with personal data and copyrighted works. A site's terms can also restrict how you access it. Facts such as a public name, price, or rating are not the same thing as republishing someone's article or photo.

This actor collects information from public pages. It does not log in and it does not bypass access controls.

For a longer explanation, see Apify's article [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/).

# Actor input Schema

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

Keywords passed to the WordPress.org plugin directory search. Each keyword is queried separately.

## `authors` (type: `array`):

WordPress.org profile usernames. Each username loads the plugins listed under that author.

## `tags` (type: `array`):

Plugin directory tags. Each tag loads plugins filed under that tag.

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

Directory browse list. Leave empty to skip. Allowed values are popular, new, and updated.

## `pluginSlugs` (type: `array`):

Plugin slugs for a full directory detail record, such as akismet.

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

Maximum plugin records to save in one run. The free cap is 1000.

## `requestDelaySecs` (type: `number`):

Seconds to wait between directory requests. Values below 0.3 are raised to 0.3.

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

Overall run time limit in seconds. The actor stops starting new requests after this elapses.

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

Per-request timeout in seconds for each call to the WordPress.org plugin directory API.

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

Optional proxies for directory requests. Leave Apify Proxy off unless the directory blocks your IP.

## Actor input object example

```json
{
  "searchQueries": [
    "seo"
  ],
  "authors": [
    "automattic"
  ],
  "tags": [
    "security"
  ],
  "browse": "popular",
  "pluginSlugs": [
    "akismet"
  ],
  "maxItems": 100,
  "requestDelaySecs": 0.3,
  "timeoutSecs": 300,
  "requestTimeoutSecs": 30,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `datasetUrl` (type: `string`):

Default dataset for this run.

## `overview` (type: `string`):

Table of plugin names, slugs, ratings, and install counts.

## `items` (type: `string`):

All dataset rows as 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 = {
    "searchQueries": [
        "seo"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("real-estate-api/wordpress-org-plugins-scraper-202610120341").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": ["seo"],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("real-estate-api/wordpress-org-plugins-scraper-202610120341").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 '{
  "searchQueries": [
    "seo"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call real-estate-api/wordpress-org-plugins-scraper-202610120341 --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,real-estate-api/wordpress-org-plugins-scraper-202610120341"
        }
    }
}
```

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/gZAc0UhT1r2hJaaVv/builds/8pKffdai0RPdk4WMA/openapi.json
