WordPress Plugin Directory Scraper
Pricing
from $0.40 / 1,000 results
WordPress Plugin Directory Scraper
Extract the WordPress.org plugin directory with derived maintenance signals — staleness, support resolution rate and an opportunity score that surfaces popular but neglected plugins.
Pricing
from $0.40 / 1,000 results
Rating
0.0
(0)
Developer
Isaac Shipman
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a month ago
Last modified
Categories
Share
What does WordPress Plugin Directory Scraper do?
It extracts the WordPress.org plugin directory — roughly 65,000 plugins — as a clean, structured dataset, and adds the maintenance and opportunity signals the official API doesn't give you: how long since the last release, whether the plugin is stale, how much of its support queue actually gets resolved, and a single opportunity_score that ranks popular but neglected plugins.
Run it with no configuration at all and you get the 100 most-installed plugins with every derived signal attached. Change one number and you get the whole directory.
Because it runs on Apify you get scheduled runs, a REST API, webhooks, and export to JSON, CSV, Excel or HTML without writing any glue code.
Why use WordPress Plugin Directory Scraper?
- Find a gap before you build. Sort by
opportunity_scoreto surface plugins with a large install base, a mediocre rating, no release in years and an unanswered support forum. That is a market, not a data dump. - Competitive research. Pull every plugin for a tag or an author and compare install counts, ratings, versions and WordPress compatibility side by side.
- Track abandonment.
days_since_updateandis_staleturn "is this plugin still maintained?" into a filterable column across the whole directory. - Security and compatibility inventories.
version,tested,requiresandrequires_phpfor every plugin, refreshed on a schedule. - Lead lists for agencies. Authors of large, ageing plugins are people who may need help.
How to use WordPress Plugin Directory Scraper
- Click Try for free / Start.
- Leave everything on its default to get the 100 most popular plugins, or pick a Mode — search a keyword, filter by tag or author, or name exact plugin slugs.
- Set Max results. 100 is the default; the whole directory is about 65,000.
- Optionally set Minimum active installs to ignore the long tail of tiny plugins.
- Click Save & Start, then open the Output tab or download the dataset as JSON, CSV, HTML or Excel.
To keep a dataset current, schedule the Actor daily or weekly — the directory changes constantly.
Input
Configure it on the Input tab, or via the API:
| Field | Type | Default | Notes |
|---|---|---|---|
mode | enum | browse | browse, search, tag, author, or slugs |
browseType | enum | popular | Used with browse: popular, new, beta, recommended |
searchQuery | string | — | Required for mode: search |
tag | string | — | Required for mode: tag, e.g. woocommerce |
author | string | — | Required for mode: author, e.g. automattic |
slugs | string[] | — | Required for mode: slugs, e.g. ["akismet"] |
maxResults | integer | 100 | Hard cap on records pushed |
minActiveInstalls | integer | 0 | Skip plugins below this install count |
includeFullDescription | boolean | false | Adds the full HTML description; ~9× larger records |
A missing required field fails the run immediately with a clear message rather than quietly falling back to a different mode.
{"mode": "browse","browseType": "popular","maxResults": 5000,"minActiveInstalls": 10000}
Output
One record per plugin. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.
{"slug": "health-check","name": "Health Check & Troubleshooting","version": "1.7.1","author_name": "WordPress.org","author_profile_url": "https://profiles.wordpress.org/wordpressdotorg/","requires": "4.4","tested": "6.6.5","requires_php": "5.6","rating": 72,"rating_out_of_5": 3.6,"num_ratings": 181,"support_threads": 6,"support_threads_resolved": 0,"support_resolution_rate": 0.0,"active_installs": 300000,"downloaded": 5336798,"last_updated": "2024-07-25 9:43pm GMT","days_since_update": 742,"is_stale": true,"opportunity_score": 77.98,"opportunity_popularity": 0.7824,"opportunity_rating_gap": 0.28,"opportunity_staleness": 1.0,"opportunity_support_gap": 1.0,"tags_list": ["health check"],"short_description": "Health Check identifies common problems, and helps you troubleshoot plugin and theme conflicts.","homepage": "https://wordpress.org/plugins/health-check/","download_link": "https://downloads.wordpress.org/plugin/health-check.1.7.1.zip","scraped_at": "2026-08-06T05:10:52.867062+00:00"}
Data fields
| Field | Meaning |
|---|---|
slug | Plugin slug, as in the wordpress.org/plugins/<slug>/ URL |
name | Display name, HTML entities decoded |
version | Latest released version |
author_name, author_profile_url | Author name and WordPress.org profile |
requires, tested, requires_php, requires_plugins | Compatibility requirements |
rating, rating_out_of_5, num_ratings, ratings | Rating as a 0–100 percentage, converted to stars, plus the star histogram |
support_threads, support_threads_resolved, support_resolution_rate | Support forum volume and resolved share (null when there are no threads) |
active_installs | Active installs — a bucketed approximation, see caveats |
downloaded | All-time download count |
last_updated, added, days_since_update, is_stale | Release recency; is_stale is true past 365 days |
opportunity_score + four components | See below |
tags_list | Plugin tags as an array |
short_description, description | Summary always; full HTML body only with includeFullDescription |
homepage, download_link, donate_link, icons | Links and assets |
scraped_at | ISO-8601 UTC timestamp of the run |
How the opportunity score works
opportunity_score is 0–100, higher meaning "more attractive to compete with". Four components, each normalised to 0–1, are combined with fixed weights:
| Component | Definition | Weight |
|---|---|---|
opportunity_popularity | log10(active_installs) scaled against the 10,000,000 top bucket — log, because install counts are bucketed powers of ten | 0.35 |
opportunity_staleness | days_since_update over a 730-day ceiling, capped at 1 | 0.30 |
opportunity_rating_gap | 1 - rating/100; a neutral 0.5 below 5 ratings, where the average is noise | 0.20 |
opportunity_support_gap | 1 - support_resolution_rate; a neutral 0.5 when there are no threads | 0.15 |
All four components are emitted on every record, so if you disagree with the weighting you can recompute the score yourself without re-running anything. Popularity and staleness carry most of the weight because the thing worth finding is a plugin lots of people rely on that nobody is looking after.
Caveats worth reading
active_installsis bucketed by WordPress.org, not exact. It reports10,100,1000,10000, ... — a value of1000000means "1 million or more". Treat it as an order of magnitude, never a precise count. This is a limitation of the source data, not of this Actor.ratingis a 0–100 percentage in the source API.rating_out_of_5is the star equivalent.- The directory total drifts while you page through it. Plugins are added and removed live, so consecutive requests report slightly different totals. Records are de-duplicated by
slug, so a long run never emits the same plugin twice — but the exact set of plugins you get for a largemaxResultswill differ slightly run to run. support_resolution_rateisnull, not0, when a plugin has no support threads. No threads means no signal, not perfect support.- Ratings and install counts are self-reported by WordPress.org and reflect what the directory publishes, nothing more.
Cost
The Actor is pay-per-result: you're charged per plugin record pushed to the dataset, with no charge for pages that produce nothing. A 1,000-plugin run is a fixed, predictable cost, and the Apify free tier is enough to try the default 100-plugin run. Current pricing is shown on the Actor's Store page.
To keep costs down: set maxResults to what you actually need, use minActiveInstalls to skip the long tail, and leave includeFullDescription off unless you need the HTML body — it makes records roughly 9× larger for no extra signal.
Tips
- Looking for a gap?
mode: browse,browseType: popular,minActiveInstalls: 10000,maxResults: 5000, then sort the dataset byopportunity_scoredescending. - Auditing one niche?
mode: tagwith the tag slug from any plugin page's sidebar. - Monitoring competitors?
mode: slugswith the handful you care about, on a daily schedule, and watchversionanddays_since_update. browse: betaandbrowse: recommendedare short curated lists — a run will legitimately return only a handful of records.
FAQ
Is scraping the WordPress.org plugin directory legal? This Actor uses the official, public, unauthenticated WordPress.org plugins API — no HTML scraping, no login, no circumvention. The data is published by WordPress.org for exactly this purpose. It contains no personal data beyond the public author names and profile URLs the directory itself displays. You are responsible for how you use the output.
Why did I get fewer results than maxResults? The query ran out of matches. beta and recommended are small lists, and searches or tags with few plugins finish early. The run log says so explicitly.
One of my slugs came back missing. Slugs that don't exist on WordPress.org are logged as a warning and skipped; the rest of the run continues.
Can I get plugin download statistics over time, or theme data? Not from this Actor. Open an issue on the Issues tab if you need it.
Support
Found a bug or need a field that isn't here? Open an issue on the Issues tab of this Actor — that's the fastest route. Custom variants of this Actor can be built on request.