# WordPress Plugins & Themes Directory Scraper (`scrapers_lat/wordpress-plugins-scraper`) Actor

Scrape the WordPress.org plugin and theme directory with active install counts, total downloads, ratings, version, WordPress and PHP compatibility, author profile and last-updated date. Search by keyword, tag or popularity. Export to JSON, CSV or Excel.

- **URL**: https://apify.com/scrapers_lat/wordpress-plugins-scraper.md
- **Developed by:** [Scrapers Lat](https://apify.com/scrapers_lat) (community)
- **Categories:** Developer tools, Business, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $6.80 / 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 Plugins & Themes Directory Scraper](https://scrapers.lat/banners/wordpress-plugins-scraper.png)](https://console.apify.com/actors/8JjhLAMjdoOLh8HGC/input)

## WordPress Plugins & Themes Directory Scraper

Here is one real result (the `contributors` and `tags` arrays are trimmed to the first entries to keep the example short; all values are real):

```json
{
  "name": "Yoast SEO – Advanced SEO with real-time guidance and built-in AI",
  "slug": "wordpress-seo",
  "type": "plugins",
  "url": "https://wordpress.org/plugins/wordpress-seo/",
  "author": "Yoast",
  "authorProfile": "https://profiles.wordpress.org/yoast/",
  "contributors": [
    { "username": "yoast", "displayName": "Yoast", "profile": "https://profiles.wordpress.org/yoast/", "avatar": "https://secure.gravatar.com/avatar/be9ad584631c908275babffbc3fd771d5879ace2c1e00305b17fd2d4361fe80d?s=96&d=monsterid&r=g" },
    { "username": "joostdevalk", "displayName": "Joost de Valk", "profile": "https://profiles.wordpress.org/joostdevalk/", "avatar": "https://secure.gravatar.com/avatar/6b6d1c4d29f1b149da0008917c70b019408d5af404a46bca853e4dd33546e1ed?s=96&d=monsterid&r=g" }
  ],
  "donateLink": "https://yoa.st/1up",
  "supportUrl": "https://wordpress.org/support/plugin/wordpress-seo/",
  "version": "28.2",
  "activeInstalls": 10000000,
  "downloaded": 985377127,
  "rating": 4.8,
  "ratingScore": 96,
  "numRatings": 27817,
  "ratingsBreakdown": { "star5": 25989, "star4": 642, "star3": 202, "star2": 139, "star1": 845 },
  "supportThreads": 49,
  "supportThreadsResolved": 46,
  "lastUpdated": "2026-08-04 5:19am GMT",
  "added": "2010-10-11",
  "requiresWp": "6.8",
  "testedWp": "7.0.3",
  "requiresPhp": "7.4",
  "requiresPlugins": null,
  "homepage": "https://yoa.st/1uj",
  "downloadLink": "https://downloads.wordpress.org/plugin/wordpress-seo.28.2.zip",
  "previewUrl": null,
  "iconUrl": "https://ps.w.org/wordpress-seo/assets/icon-256x256.gif?rev=3419908",
  "bannerUrl": "https://ps.w.org/wordpress-seo/assets/banner-1544x500.png?rev=3257862",
  "shortDescription": "Real-time SEO guidance, schema, and AI built in. Help search engines and AI systems understand your content. All AI tools included, no hidden fees.",
  "tags": ["Content analysis", "Readability", "schema", "seo"],
  "source": "WordPress.org Plugins",
  "observedAt": "2026-08-10T14:29:19.538Z"
}
```

The most complete WordPress.org directory scraper available. It returns every field the plugin or theme directory exposes, from active install count, total downloads, version and rating to the full 5-star ratings breakdown, WordPress and PHP compatibility, support thread stats, dates, and every contributor with their profile link (an author lead), and lets you search by keyword, tag, or browse by popularity across both the plugin and theme directories.

**📥 [Input](https://apify.com/scrapers_lat/wordpress-plugins-scraper/input-schema) · 📤 [Output](https://apify.com/scrapers_lat/wordpress-plugins-scraper/output-schema) · 💰 [Pricing](https://apify.com/scrapers_lat/wordpress-plugins-scraper/pricing) · ▶️ [Examples](https://apify.com/scrapers_lat/wordpress-plugins-scraper/examples)**

![Apify](https://img.shields.io/badge/Platform-Apify-1CE1CE?logo=apify\&logoColor=white)
![Coverage](https://img.shields.io/badge/Coverage-Global-blue)
![Output](https://img.shields.io/badge/Output-JSON%20%7C%20CSV%20%7C%20Excel-orange)
![Billing](https://img.shields.io/badge/Billing-Pay%20per%20result-brightgreen)

### Table of contents

- [What it does](#what-it-does)
- [Quickstart](#quickstart)
- [Input reference](#input-reference)
- [Output reference](#output-reference)
- [Example output record](#example-output-record)
- [Run via API and CLI](#run-via-api-and-cli)
- [Fetch results](#fetch-results)
- [Billing and limits](#billing-and-limits)
- [FAQ and troubleshooting](#faq-and-troubleshooting)

### What it does

The actor queries the official WordPress.org plugin or theme directory and returns one normalized record per plugin or theme. Each record includes the active install count, total downloads, current version, star rating with the full ratings breakdown, WordPress and PHP compatibility, support thread stats, added and last-updated dates, icon and banner images, tags, the short description, and every contributor with their profile link. Numbers are parsed to integers, ratings are exposed both as a raw 0 to 100 score and as 0 to 5 stars, and missing values are returned as `null`.

Search by keyword, restrict to one directory tag, or browse by popularity, featured, newest, or recently updated. Switch `type` to scrape the theme directory instead.

### Quickstart

Open the actor, paste this into the input, and press Run. It returns the 10 top plugins matching `seo`.

```json
{
  "maxPlugins": 10,
  "type": "plugins",
  "searchQuery": "seo",
  "browse": "popular"
}
```

Leave `searchQuery` empty to browse by popularity (or set `browse` to featured, newest, or updated). Every input field is optional.

### Input reference

| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| `maxPlugins` | integer | no | `10` | Maximum number of plugins or themes to collect. |
| `type` | enum | no | `plugins` | Which directory to scrape: `plugins` or `themes`. |
| `searchQuery` | string | no | `seo` | Keyword to search the directory (for example `woocommerce`, `backup`, `security`). Leave empty to browse by popularity or tag. |
| `browse` | enum | no | `popular` | When no keyword is set, list by `popular`, `featured`, `new`, or `updated`. |
| `tag` | string | no | (empty) | Restrict to one directory tag by slug (for example `ecommerce`, `gallery`, `cache`, `forms`). Used only when no search keyword is set. |

All fields are optional. With no keyword and no tag, the actor browses the most popular plugins.

### Output reference

One dataset item per plugin or theme. Types: `string`, `integer`, `number`, `object`, `object[]`, `string[]`, or `null` when the source value is absent.

| Field | Type | Description |
|---|---|---|
| `name` | string | Plugin or theme name. |
| `slug` | string | Directory slug (unique). |
| `type` | string | `plugins` or `themes`. |
| `url` | string | Public directory page URL. |
| `author` | string | Author display name (an author lead). |
| `authorProfile` | string | Author WordPress.org profile URL, or `null`. |
| `contributors` | object\[] | Every contributor with `username`, `displayName`, `profile`, `avatar`. |
| `donateLink` | string | Donation URL, or `null`. |
| `supportUrl` | string | Support forum URL, or `null`. |
| `version` | string | Current version. |
| `activeInstalls` | integer | Active install count, or `null`. |
| `downloaded` | integer | Total downloads, or `null`. |
| `rating` | number | Rating on a 0 to 5 scale, or `null`. |
| `ratingScore` | integer | Raw rating on a 0 to 100 scale, or `null`. |
| `numRatings` | integer | Number of ratings, or `null`. |
| `ratingsBreakdown` | object | Counts per star: `star5` through `star1`, or `null`. |
| `supportThreads` | integer | Number of support threads, or `null`. |
| `supportThreadsResolved` | integer | Number of resolved support threads, or `null`. |
| `lastUpdated` | string | Last updated date, or `null`. |
| `added` | string | Date added to the directory, or `null`. |
| `requiresWp` | string | Minimum WordPress version required, or `null`. |
| `testedWp` | string | Latest WordPress version tested, or `null`. |
| `requiresPhp` | string | Minimum PHP version required, or `null`. |
| `requiresPlugins` | string\[] | Required plugin slugs, or `null`. |
| `homepage` | string | Plugin or theme homepage, or `null`. |
| `downloadLink` | string | Direct download ZIP URL, or `null`. |
| `previewUrl` | string | Live preview URL (themes), or `null`. |
| `iconUrl` | string | Icon image URL, or `null`. |
| `bannerUrl` | string | Banner image URL, or `null`. |
| `shortDescription` | string | Short description, or `null`. |
| `tags` | string\[] | Directory tags, or `null`. |
| `source` | string | Data source label: `WordPress.org Plugins` or `WordPress.org Themes`. |
| `observedAt` | string | ISO 8601 timestamp of when the record was collected. |
| `error` | string | Present only on a failed run; an item with a populated `error` field is written instead. |

### Example output record

See the hero example at the top of this page. It is a real record from a live run with input `{"maxPlugins": 10, "type": "plugins", "searchQuery": "seo", "browse": "popular"}`, with the `contributors` and `tags` arrays trimmed for readability. A live run returns every contributor and tag.

### Run via API and CLI

Start a run and wait for it to finish, then read the dataset. Replace `<TOKEN>` with your Apify API token.

Run synchronously and get dataset items in one call:

```bash
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~wordpress-plugins-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"searchQuery":"woocommerce","type":"plugins","maxPlugins":25}'
```

Start a run asynchronously:

```bash
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~wordpress-plugins-scraper/runs?token=<TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"type":"themes","browse":"popular","maxPlugins":100}'
```

Apify CLI:

```bash
apify call scrapers_lat/wordpress-plugins-scraper \
  --input '{"tag":"cache","type":"plugins"}'
```

### Fetch results

Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing `format`:

```bash
## JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"

## CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"

## Paginate large datasets
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
```

`<DATASET_ID>` is returned as `defaultDatasetId` in the run object. Use `offset` and `limit` to page through large result sets. `clean=true` drops empty and internal fields.

### Billing and limits

- **Pay per result.** You are charged per plugin or theme record returned (`result` event). See the [pricing tab](https://apify.com/scrapers_lat/wordpress-plugins-scraper/pricing) for the current per-result price.
- **No charge on failure.** If the directory is unavailable, the actor writes a single item with a populated `error` field and does not charge for it. Empty runs cost nothing.
- **Spend cap respected.** Set `maxTotalChargeUsd` on the run; once reached, the actor stops emitting and charging further billable results.
- **Free Apify plans** are capped at 10 records per run. Upgrade for higher `maxPlugins`.

### FAQ and troubleshooting

**Can I scrape themes as well as plugins?**
Yes. Set `type` to `themes` to scrape the WordPress.org theme directory with the same fields.

**How do I get the most popular plugins for a topic?**
Set `searchQuery` to your keyword. Leave it empty and set `browse` to `popular` to list the most popular overall.

**What is the difference between `rating` and `ratingScore`?**
`rating` is on a 0 to 5 star scale; `ratingScore` is the raw 0 to 100 score from the directory. `ratingsBreakdown` gives the count per star.

**Why do author leads matter?**
`author`, `authorProfile`, and the full `contributors` list (each with a profile link) let you identify and contact the developers behind popular plugins.

**A run returned 0 records. Why?**
The keyword or tag matched nothing. Try a broader keyword or leave it empty to browse. Zero-result runs are not charged.

**Is this an official WordPress tool?**
No. This actor is independent and has no affiliation with WordPress or Automattic. It reads only data that is publicly available through the WordPress.org directory API. Use it in accordance with the source terms of service.

### Related scrapers

- [VS Code Publishers Scraper](https://apify.com/scrapers_lat/vscode-publishers-scraper): VS Code Marketplace publishers with installs and website leads.
- [Chrome Web Store Scraper](https://apify.com/scrapers_lat/chrome-web-store-scraper): Extensions, ratings and install counts from the Chrome Web Store.
- [GitHub Repositories Scraper](https://apify.com/scrapers_lat/github-repositories-scraper): Repositories with stars, topics and metadata.
- [Website Tech Stack Scraper](https://apify.com/scrapers_lat/website-tech-stack-scraper): Detect the technologies a website runs on.
- [Capterra Scraper](https://apify.com/scrapers_lat/capterra-scraper): Software products with reviews and ratings.

### More scrapers at scrapers.lat

Built and maintained by [scrapers.lat](https://scrapers.lat), where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at [scrapers.lat](https://scrapers.lat).

***

> Independent tool, not affiliated with WordPress or Automattic. Accesses only publicly available WordPress.org directory data. Use in accordance with the source terms of service.

# Actor input Schema

## `maxPlugins` (type: `integer`):

Maximum number of plugins or themes to collect. Optional.

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

Scrape the WordPress plugin directory or the theme directory.

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

Keyword to search the directory (for example 'seo', 'woocommerce', 'backup', 'security'). Leave empty to browse by popularity or tag.

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

When no search keyword is set, list by: most popular, featured, newest, or recently updated.

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

Optional. Restrict to one directory tag by its slug (for example 'ecommerce', 'gallery', 'cache', 'forms'). Used only when no search keyword is set.

## Actor input object example

```json
{
  "maxPlugins": 10,
  "type": "plugins",
  "searchQuery": "seo",
  "browse": "popular"
}
```

# 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 = {
    "maxPlugins": 10,
    "searchQuery": "seo"
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapers_lat/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 = {
    "maxPlugins": 10,
    "searchQuery": "seo",
}

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapers_lat/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/8JjhLAMjdoOLh8HGC/builds/LaWbewVNd7NEtXRRL/openapi.json
