# WordPress Plugin Reviews Scraper (`thescrapelab/wordpress-plugin-review-threads-scraper`) Actor

Export WordPress.org plugin reviews with star ratings, review text, dates and optional public replies. Paste plugin links and download CSV, Excel or JSON.

- **URL**: https://apify.com/thescrapelab/wordpress-plugin-review-threads-scraper.md
- **Developed by:** [Inus Grobler](https://apify.com/thescrapelab) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 saved original reviews

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

Export WordPress.org plugin reviews into a spreadsheet or JSON for product feedback reports, support reviews and plugin comparisons. This WordPress plugin reviews scraper collects review text, star ratings, original publication dates and optional public replies.

Private preview: access is limited to authorized users while publication review is in progress.

### Export plugin reviews in three steps

1. Paste a WordPress.org plugin link, such as `https://wordpress.org/plugins/akismet/`.
2. Choose the maximum number of reviews. Turn on **Include replies** if you need reply context.
3. Start the Actor and open **Reviews**. To download, select **Export**, choose CSV, Excel or JSON, then **Download**.

No WordPress login, API key or proxy configuration is needed. Leave **Optional filters** closed for a first run.

### Inputs

| Input | What to enter |
|---|---|
| **Plugin links** | One or more WordPress.org plugin page links, one per line. Up to 10 links. Plugin review-list links work too. |
| **Maximum reviews** | A total across all supplied plugins, from 1 to 200. The default is 5. This is a ceiling; source availability and safety limits can return fewer. |
| **Include replies** | Off by default. When on, includes up to 10 public replies from each review’s first page. Replies may come from any public forum participant. |

For example:

```json
{
  "startUrls": ["https://wordpress.org/plugins/akismet/"],
  "maxItems": 5,
  "includeReplies": false
}
```

In **Optional filters**, choose a star rating from 1 to 5 or enter publication dates as `YYYY-MM-DD`. Dates are inclusive and refer to the original review, rather than later replies. Leave filters empty to collect any rating and date.

### Results and downloads

Each review is one dataset record. The **Reviews** table shows the plugin, stars, title, review text, original publication date, thread reply count, source link, stable review ID and collection timestamp.

- **CSV and Excel:** select **Export** and choose a format. Use the Reviews view for the nine review fields shown in the table. Exported field names match the JSON keys, including `reviewId` and `extractedAt`.
- **Replies (first page)** shows included replies separately from the original review. It is empty when replies are off or no replies were included.
- **Complete JSON:** choose **All fields**, then export as JSON to preserve nested replies, source dates and coverage information. A JSON export of a selected view contains only that view’s fields.
- **Run summary** explains how many reviews were saved and why collection stopped.

A genuine example, showing selected fields:

```json
{
  "reviewId": "18979055",
  "pluginSlug": "akismet",
  "rating": 5,
  "title": "A reliable plugin",
  "reviewText": "Akismet does what it’s supposed to do — blocks spams effectively. Overall, it’s a reliable plugin that gets the job done.",
  "publishedDate": "2026-07-30",
  "sourceUrl": "https://wordpress.org/support/topic/a-reliable-plugin-2/"
}
```

Missing values remain unknown. In particular, a direct review link can have a null thread reply count even when some replies are visible. The source timestamps do not identify a timezone, so `sourceTimezone` remains null. Public author handles are omitted by default.

### Use cases

- Export feedback on a plugin you maintain for product and support reporting.
- Compare public reviews of several plugins in your own spreadsheet.
- Revisit stable review IDs across exports to identify content changes in your own workflow.

The Actor extracts structured content. It does not assign sentiment, verify reviewer claims or identify developers across platforms.

### WordPress plugin reviews API example

Use an Apify token authorized to access the private Actor:

```python
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("TmegNF3u5NHdDP20M").call(run_input={
    "startUrls": ["https://wordpress.org/plugins/akismet/"],
    "maxItems": 5,
    "includeReplies": False,
})
for review in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(review["rating"], review["title"], review["sourceUrl"])
```

Existing integrations using plugin slugs, direct review URLs or explicit scan limits remain supported. They are not needed for the normal form workflow.

### Limits and FAQ

#### Does it collect every review or a complete thread?

No. Collection is bounded by your maximum and internal safety limits. Optional replies come from the first topic page only. No complete-history or exact incremental-checkpoint guarantee is made.

#### Why are fewer reviews returned than I requested?

The plugin may have fewer matching reviews, filters may exclude records, or a source or safety limit may stop the scan. The run summary gives the reason. The review maximum is shared across plugins; earlier links can use the available total before later links are visited.

#### Are results sorted by review publication date?

They follow the source forum’s page order. A later reply can bring an older review forward, so the Actor does not promise publication-date sorting.

#### What happens if a page fails?

Already saved reviews remain available. Access restrictions, persistent rate limits or incomplete pages stop collection. The Actor respects source robots directives and does not solve access challenges.

#### Can I reuse the review text commercially?

Reviews are third-party user content. Public readability does not establish redistribution rights. Use the data only for an authorized purpose; commercial publication of this Actor remains subject to the outstanding reuse review.

#### What does a run cost?

The introductory Actor price is **$1.50 per 1,000 saved original reviews** ($0.0015 each), plus **$0.00005 per run start** at the supported memory settings. Optional first-page replies are included in the review price. A five-review run costs $0.00755 in Actor events; a 100-review run costs $0.15005 if it returns all 100.

There is no subscription or extra Actor charge for opening or downloading results. Apify can charge separately for post-run storage and dataset access. Set a maximum run charge in Apify Console to control spending; the Actor stops when that budget cannot cover another review. Collection can also stop earlier at a source or safety limit. Runs with no reviews incur only the start event. Start with the five-review example to check whether the output fits your task.

For a problem with a run, provide its Apify run ID, plugin link and the result you expected. Do not share your API token.

# Actor input Schema

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

Paste WordPress.org plugin page links, one per line. Plugin review-list links also work. Example: https://wordpress.org/plugins/akismet/

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

Maximum total across all supplied plugins. Fewer may be returned when no more matching reviews are found or a safety limit is reached.

## `includeReplies` (type: `boolean`):

Add up to 10 public replies from each review’s first page. These are not necessarily replies from the plugin developer.

## `rating` (type: `integer`):

Choose a whole number from 1 to 5. Leave empty for all ratings.

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

Optional original review date, including this day. Format: YYYY-MM-DD, for example 2026-01-01. Leave empty for no date filter.

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

Optional original review date, including this day. Format: YYYY-MM-DD, for example 2026-01-01. Leave empty for no date filter.

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

WordPress.org plugin slugs. Omit sources entirely to use akismet.

## `reviewUrls` (type: `array`):

Original wordpress.org/support/topic/SLUG/ review URLs. Plugin association is verified on page.

## `maxRequests` (type: `integer`):

Includes detail/list attempts and retries; one policy fetch is additional, up to3 policy attempts on transient errors.

## `maxListPages` (type: `integer`):

Scan cap, independent of matching output count; no date-based early stop.

## `startPage` (type: `integer`):

Manual starting page; moving source pages are not a reliable incremental checkpoint.

## `maxRepliesPerReview` (type: `integer`):

Zero omits reply text. At most10 replies from FIRST topic page only; never a complete-thread promise.

## `maxDurationSeconds` (type: `integer`):

Stops before required waits exceed this bound; source concurrency1, at least1second pacing.

## `includeAuthorHandles` (type: `boolean`):

Opt-in handles only; no profile navigation, display names or contact enrichment.

## Actor input object example

```json
{
  "startUrls": [
    "https://wordpress.org/plugins/akismet/"
  ],
  "maxItems": 5,
  "startPage": 1,
  "maxDurationSeconds": 300,
  "includeAuthorHandles": false
}
```

# Actor output Schema

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

No description

## `summary` (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 = {
    "startUrls": [
        "https://wordpress.org/plugins/akismet/"
    ],
    "includeReplies": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("thescrapelab/wordpress-plugin-review-threads-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 = {
    "startUrls": ["https://wordpress.org/plugins/akismet/"],
    "includeReplies": False,
}

# Run the Actor and wait for it to finish
run = client.actor("thescrapelab/wordpress-plugin-review-threads-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 '{
  "startUrls": [
    "https://wordpress.org/plugins/akismet/"
  ],
  "includeReplies": false
}' |
apify call thescrapelab/wordpress-plugin-review-threads-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,thescrapelab/wordpress-plugin-review-threads-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/TmegNF3u5NHdDP20M/builds/ehwfMy8rob3z9xHmG/openapi.json
