# WooCommerce Marketplace Scraper: Extensions & Prices (`mrslm_data/woocommerce-marketplace-extensions`) Actor

Scrape extensions and themes on the WooCommerce.com Marketplace: price, rating, active installs, version, vendor, compatibility, HPOS and blocks support.

- **URL**: https://apify.com/mrslm_data/woocommerce-marketplace-extensions.md
- **Developed by:** [MRSLM Data](https://apify.com/mrslm_data) (community)
- **Categories:** E-commerce, Developer tools
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.60 / 1,000 extensions

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

## WooCommerce Marketplace Scraper: Extensions & Prices

**Extensions and themes on the official WooCommerce.com Marketplace: price, rating, active installs, version, vendor, compatibility, HPOS and checkout-blocks support. $2.00 per 1,000 extensions.**

Scrape listings from the official WooCommerce.com Marketplace to research extensions, themes, prices and compatibility. Export the listing data to CSV for analysis.

### Quick start

1. Open the Actor in Apify Console and enter this example input:

```json
{
  "products": [
    "woocommerce-subscriptions",
    "stripe"
  ]
}
```

2. Press **Start**. Replace the example values with your own sources when ready.
3. Open **Output** to inspect and export the results. Save the input as a task to run it again.

### What it does

The Actor reads public WooCommerce.com Marketplace data. Give it listing slugs or URLs, or leave the list empty to walk the catalog, most recently updated first. A vendor API key is not required.

Use `products` for specific slugs or URLs. In catalog mode, `updatedSince` accepts a date or a period such as `30 days`, and `productTypes` selects sections such as `extensions`, `themes` or `business services`. Filtered-out listings are not opened or charged. `maxResults` defaults to 100, with 0 meaning no cap. `includeDescription` controls the short description, and `proxyConfiguration` is available if needed.

Each saved listing becomes a dataset row. Keep the source URL and collection timestamp with your export so that you can check the source and understand when a value was observed. Separate runs create separate snapshots; comparing them is an analysis step you control.

### Who it is for

- **Retailers and vendors:** compare public prices, product details and market positioning.
- **Agencies:** investigate public listings before making a recommendation or planning a migration.
- **Researchers:** build a structured snapshot for a defined set of sources.
- **Data teams:** feed repeatable exports into spreadsheets and internal reporting workflows.

Start with a small set of sources and inspect the available columns before expanding the scope. Public pages may expose different details, so checking coverage early makes comparisons more reliable.

### Real example: WooCommerce Marketplace listings

#### Step 1: Enter the input

Open the [Actor](https://apify.com/mrslm_data/woocommerce-marketplace-extensions) and paste this exact input in the JSON editor:

```json
{
  "products": [
    "woocommerce-subscriptions",
    "stripe"
  ]
}
```

#### Step 2: Run it

Press **Start** and inspect the run's dataset. Our test run on Nov 10, 2026 saved **2 saved rows**. Both are shown trimmed below. A new run may return different rows because the source changes.

#### Step 3: Read the output

The following are trimmed real rows from that run. The displayed values are unchanged; other columns are omitted for readability.

```json
[
  {
    "name": "WooCommerce Subscriptions",
    "slug": "woocommerce-subscriptions",
    "sku": "WOO508",
    "productType": "WooCommerce extensions",
    "vendor": "Woo",
    "vendorUrl": "https://woocommerce.com/vendor/woocommerce/",
    "price": 279,
    "currency": "USD",
    "ratingValue": 3.91,
    "reviewCount": 139,
    "latestVersion": "9.4.1",
    "hposCompatible": false,
    "cartCheckoutBlocksCompatible": false,
    "url": "https://woocommerce.com/products/woocommerce-subscriptions/"
  },
  {
    "name": "Stripe",
    "slug": "stripe",
    "sku": "WOO392",
    "productType": "WooCommerce extensions",
    "vendor": "Stripe",
    "vendorUrl": "https://woocommerce.com/vendor/stripe/",
    "price": 0,
    "currency": "USD",
    "ratingValue": 3.65,
    "reviewCount": 54,
    "latestVersion": "11.1.1",
    "hposCompatible": false,
    "cartCheckoutBlocksCompatible": false,
    "url": "https://woocommerce.com/products/stripe/"
  }
]
```

Keep the currency alongside a price, and retain the source URL when comparing results. A missing value should not be silently converted to zero. Review the source page when a value affects a purchasing, compatibility or business decision.

### Output fields

The fields below appeared in that real run. Values can differ or be absent in other rows. Arrays are shown as arrays here; a flat spreadsheet export may represent them differently.

| Field | Example from the real run |
|---|---|
| `name` | `"WooCommerce Subscriptions"` |
| `slug` | `"woocommerce-subscriptions"` |
| `sku` | `"WOO508"` |
| `productType` | `"WooCommerce extensions"` |
| `vendor` | `"Woo"` |
| `vendorUrl` | `"https://woocommerce.com/vendor/woocommerce/"` |
| `price` | `279` |
| `currency` | `"USD"` |
| `isFree` | `false` |
| `billing` | `"annual subscription"` |
| `ratingValue` | `3.91` |
| `reviewCount` | `139` |
| `latestVersion` | `"9.4.1"` |
| `activeInstalls` | `"100K+"` |
| `activeInstallsMin` | `100000` |
| `categories` | `["WooCommerce extensions", "Developed by Woo", "Wallets & express checkouts", "Payment management", "Merchandi…` |
| `phpVersionRequired` | `"7.4"` |
| `testedWithWordPress` | `"7.1"` |
| `testedWithWooCommerce` | `"11.2"` |
| `requiresWordPress` | `"7.0"` |
| `requiresWooCommerce` | `"11.1"` |
| `hposCompatible` | `false` |
| `cartCheckoutBlocksCompatible` | `false` |
| `compatibility` | `[]` |
| `qualityChecks` | `["Known vulnerability check passed", "Dependent packages vulnerability check passed", "Follows Marketplace bes…` |
| `worksWith` | `[]` |
| `countries` | `["Worldwide"]` |
| `qualityBadge` | `"Excellence verified"` |
| `description` | `"WooCommerce Subscriptions is a WooCommerce extension that lets customers subscribe to your products or servic…` |
| `icon` | `"https://woocommerce.com/wp-content/uploads/2012/09/Woo_Subscriptions_icon-marketplace-160x160-2.png"` |
| `firstPublished` | `"2012-09-30"` |
| `lastModified` | `"2026-11-06"` |
| `url` | `"https://woocommerce.com/products/woocommerce-subscriptions/"` |
| `scrapedAt` | `"2026-11-10T09:52:29.385Z"` |

Use JSON if you need to preserve arrays, and CSV or Excel for a flat table. Keep identifiers as text during import to avoid changing their formatting. Null and empty values are part of the observed output, so check them before calculating averages or joining datasets.

### Export to CSV, Excel or Google Sheets

Open the run in Apify Console, select **Output**, and choose **Export**. Download CSV for a portable table, Excel for a workbook, or JSON for structured data. Select the columns relevant to your analysis and check how your spreadsheet handles arrays and empty cells.

You can also download the dataset with its ID and an Apify token:

```bash
curl -H "Authorization: Bearer $APIFY_TOKEN" \
  "https://api.apify.com/v2/datasets/<DATASET_ID>/items?format=csv&clean=1" -o woocommerce-marketplace-extensions.csv
curl -H "Authorization: Bearer $APIFY_TOKEN" \
  "https://api.apify.com/v2/datasets/<DATASET_ID>/items?format=xlsx&clean=1" -o woocommerce-marketplace-extensions.xlsx
```

For a one-time Google Sheets import, download the CSV and choose **File > Import > Upload** in Sheets. For a recurring workflow, connect an Apify run or task to Make, Zapier or n8n, retrieve dataset items and write the rows to a sheet. Choose whether to replace the previous snapshot or append each run; appending preserves history but requires a plan for identifying duplicate listings.

### Schedule it

Save the input as a task in Apify Console, create a schedule and attach the task. For example, `0 7 * * 1` runs every Monday at 7 AM in the selected timezone. Each run has its own dataset, so you can retain snapshots and compare them later.

Review the limits and event prices before scheduling. Check early runs for coverage and missing values, and update a fixed date filter yourself if your workflow uses one. An integration can retrieve the dataset after a successful run and pass the rows to your reporting system.

### Call it from the API in Python, JavaScript or curl

Put your Apify token in the `APIFY_TOKEN` environment variable. These examples use the example input. The Python example uses the typed run object returned by apify-client 3.x.

**Python** (`pip install "apify-client>=3"`):

```python
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])
run_input = {
  "products": [
    "woocommerce-subscriptions",
    "stripe"
  ]
}
run = client.actor("mrslm_data/woocommerce-marketplace-extensions").call(run_input=run_input)
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item.get("name"))
```

**JavaScript / Node.js** (`npm install apify-client`):

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const input = {
  "products": [
    "woocommerce-subscriptions",
    "stripe"
  ]
};
const run = await client.actor('mrslm_data/woocommerce-marketplace-extensions').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, items[0]);
```

**curl** starts a synchronous run and returns CSV. Keep synchronous requests small because the request waits for completion.

```bash
curl -X POST "https://api.apify.com/v2/acts/mrslm_data~woocommerce-marketplace-extensions/run-sync-get-dataset-items?format=csv" \
  -H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \
  -d '{"products": ["woocommerce-subscriptions", "stripe"]}' -o woocommerce-marketplace-extensions.csv
```

For larger jobs, start a run and retrieve the dataset after it finishes. Store tokens securely and restrict access to any automation that can read them.

### What it costs

The Actor uses pay-per-event pricing. One `extension` event is charged for each saved listing, and an `apify-actor-start` event is charged per run. These are the current prices; check the Actor page for current pricing before a run.

#### Price per event

| Event | Free / Bronze | Silver | Gold |
|---|---:|---:|---:|
| `extension` per 1,000 saved | $2.00 | $1.80 | $1.60 |
| `apify-actor-start` per run | $0.00005 | $0.00005 | $0.00005 |

At the Free/Bronze rate, one run with 2 saved rows costs $0.00405, including the start event. One run with 1,000 saved rows costs $2.00 plus $0.00005. Each additional run has its own start event. These examples use saved-row counts and do not guarantee that a source will return that many rows.

Use `maxResults` to bound the number of saved rows. When planning recurring work, account for both the number of runs and the number of rows per run. A small initial run helps you assess source coverage and likely scale.

### Limits

Coverage is limited to the public WooCommerce.com Marketplace, not extensions sold elsewhere. Catalog filters apply in catalog mode. Prices, versions and compatibility indicators can change; verify them on the source and test in the target environment. Empty lists or nulls are not proof that a feature is absent.

Public data is a snapshot, and a listing can change or disappear. A result limit can also make the dataset smaller than the source catalog. Keep raw exports if you need to audit a comparison later, and inspect the source when completeness matters.

### FAQ

**How do I scrape WooCommerce Marketplace listings without an API key?**

Add Marketplace slugs or URLs to `products`. The Actor reads public Marketplace data without a vendor API key.

**Can I collect specific WooCommerce extensions?**

Yes. Put their slugs or Marketplace URLs in `products`. The example selects two slugs and the test run returned two rows.

**How do I scrape the WooCommerce Marketplace catalog?**

Leave `products` empty. The catalog walk starts with the most recently updated listings. Set `maxResults` deliberately: its default is 100 and 0 removes the cap.

**How do I find recently updated extensions?**

In catalog mode, set `updatedSince` to a date or a period such as `30 days`. The public sitemap supplies the filter and excluded listings are not opened or charged.

**Can I collect WooCommerce themes and business services?**

In catalog mode, use `productTypes` to select sections such as `themes` or `business services`. An empty list includes all sections, subject to the result cap.

**Does the output include HPOS and checkout block compatibility?**

The sample includes `hposCompatible` and `cartCheckoutBlocksCompatible`, both false for the two sampled listings. Verify compatibility for your own versions and store.

**Can I compare free and paid extensions?**

The sample includes `price`, `currency`, `isFree` and `billing`. Compare currency and billing terms with the price and check the source for current details.

**How do I limit Marketplace listings saved?**

Set `maxResults` to a positive number. The default is 100; 0 means no result cap. The actual number saved depends on source coverage and other filters.

**How much do 1,000 Marketplace listings cost?**

On Free/Bronze, 1,000 saved listings cost $2.00 plus the $0.00005 start event, totaling $2.00005 for one run.

### Related scrapers

- [WooCommerce Products Scraper: Prices, Sales & Stock](https://apify.com/mrslm_data/woocommerce-products)
- [WordPress Plugin Scraper: Stats, Installs & Reviews](https://apify.com/mrslm_data/wordpress-plugin-stats-reviews)
- [WordPress Theme Scraper: Installs, Ratings & Downloads](https://apify.com/mrslm_data/wordpress-theme-directory)

### Is it legal?

This Actor only reads pages and feeds that the website itself publishes to every visitor without a login. It obeys each site's robots.txt, keeps a polite request rate, and never tries to get past logins, paywalls, captchas or bot checks. It does not collect personal data such as emails, phone numbers or names of private individuals. You are responsible for how you use the data: follow the source site's terms, copyright and the privacy laws that apply to you (GDPR, CCPA, etc.). This tool is independent and not affiliated with or endorsed by the platforms it reads.

# Actor input Schema

## `products` (type: `array`):

Marketplace slugs or URLs, e.g. "woocommerce-subscriptions" or https://woocommerce.com/products/stripe/. Leave empty to walk the whole Marketplace (about 2,100 listings), most recently updated first.

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

Only listings changed after this date (2026-10-01) or within a period ("30 days", "2 weeks"). Uses the public sitemap, so filtered-out listings are never opened or charged.

## `productTypes` (type: `array`):

Keep only these Marketplace sections, e.g. "extensions", "themes", "business services". Empty = all.

## `includeDescription` (type: `boolean`):

The listing's short description.

## `maxResults` (type: `integer`):

Safety cap on saved listings. 0 = no cap.

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

Usually not needed.

## Actor input object example

```json
{
  "products": [
    "woocommerce-subscriptions",
    "stripe"
  ],
  "includeDescription": true,
  "maxResults": 100,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

All results as a dataset (JSON, CSV, Excel and more via the API or Console).

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

Counts of results, targets that succeeded or failed, and the stop reason.

# 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 = {
    "products": [
        "woocommerce-subscriptions",
        "stripe"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("mrslm_data/woocommerce-marketplace-extensions").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 = { "products": [
        "woocommerce-subscriptions",
        "stripe",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("mrslm_data/woocommerce-marketplace-extensions").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 '{
  "products": [
    "woocommerce-subscriptions",
    "stripe"
  ]
}' |
apify call mrslm_data/woocommerce-marketplace-extensions --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,mrslm_data/woocommerce-marketplace-extensions"
        }
    }
}
```

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/dLubVW0r2MV28ZEKO/builds/mGkOc5MEaFu7jScXR/openapi.json
