# WooCommerce Sale Price Scraper: Products & Stock (`mrslm_data/woocommerce-products`) Actor

Regular and sale prices, on-sale flag, stock, SKUs, categories and ratings from any WooCommerce store's public Store API. On-sale and in-stock filters.

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

## Pricing

from $0.64 / 1,000 products

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 Sale Price Scraper: Products & Stock

**Get every public product, price, sale price, stock status, category and rating from any WooCommerce store as JSON/CSV. $0.80 per 1,000 products.**

Uses each store's own public WooCommerce Store API, the same feed the shop's cart uses, so the data is exact and fast. No HTML guessing, no browser.

### Quick start

1. Press **Start**. The form is already filled with this example input, so the first run returns real rows in under a minute:

```json
{
  "stores": [
    "porterandyork.com",
    "www.nutribullet.com"
  ],
  "maxProductsPerStore": 50
}
```

2. Swap in your own values, or call the Actor through the Apify API, Make, Zapier, n8n or the Python/JS clients with the same JSON.
3. Download the results as JSON, CSV or Excel from the **Output** tab, or schedule the run to repeat.

**Full guide: How to Scrape Products from Any WooCommerce Store: Prices, Sales, Stock and Variations (No API Key)**

### What the WooCommerce Products Scraper does

You give the Actor one or more store domains. For each store it pages through the public Store API, newest products first, and saves one row per product with the store, product ID, name, link, SKU, type (simple or variable), price, regular price, sale price, price range for variable products, currency, on-sale flag, stock status, backorder flag, stock text, low-stock count, whether it can be bought, categories, tags, brands, attributes with their values, number of variations, average rating, review count, main image and all images, and the short description. The full description can be added too.

You can filter by keyword, category, on-sale products only or in-stock products only. These filters are applied by the store itself, so you only pay for the products you keep.

- Any WooCommerce store with the public Store API, no login.
- Regular price, sale price and stock on every row.
- On-sale and in-stock filters for deal tracking.

### Who it is for

- **Ecommerce brands**: track competitors' prices, sales and stock.
- **Resellers and deal finders**: pull every product on sale from the stores you follow.
- **Agencies and developers**: audit or migrate a client's catalog.
- **Market researchers**: compare product ranges and price points across stores.

### Real example: newest products from a food shop and a blender brand

Say you want a quick look at what two WooCommerce stores have added most recently: Porter & York and nutribullet. You take the 12 newest products from each, without long descriptions.

#### Step 1: Enter the input

Open the [WooCommerce Products Scraper](https://apify.com/mrslm_data/woocommerce-products) in Apify Console, switch the input form to **JSON** and paste this. It is the exact input used for the run in this guide:

```json
{
  "stores": [
    "porterandyork.com",
    "www.nutribullet.com"
  ],
  "maxProductsPerStore": 12
}
```

What each setting does:

- `stores`: store domains, one per line. A full URL works too.
- `maxProductsPerStore`: 12, the newest 12 from each store. 0 reads the whole catalog.

#### Step 2: Run it

Press **Start**. On 30 October 2026 this input finished with status `SUCCEEDED` in about 8 seconds and saved 24 rows to the run's dataset. The run was charged 24 `product` events plus one start event, so the bill was $0.0193 on the Free/Bronze tier. Both stores answered and gave 12 products each, 24 in total.

#### Step 3: Read the output

Here are the first rows of the real dataset, cut to the most useful columns:

| store | name | type | price | regularPrice | onSale | inStock |
|---|---|---|---|---|---|---|
| porterandyork.com | Washington Trust Bank Employee Gift | variable | 295 | 295 | no | yes |
| porterandyork.com | Organic Diestel Whole Turkey 12 – 14lb | simple | 115 | 115 | no | no |
| porterandyork.com | 31/40 Shrimp – 2LB | simple | 24 | 24 | no | yes |
| porterandyork.com | Beef Fajita Meat – 2LB | simple | 15 | 15 | no | yes |
| porterandyork.com | Natural Angus Ground Chuck – 2LB | simple | 20 | 20 | no | yes |
| porterandyork.com | Chicken Apple Links – 2 LB | simple | 15 | 15 | no | yes |
| porterandyork.com | Ground Chicken – 2LB | simple | 10 | 10 | no | yes |
| porterandyork.com | Italian Sausage Links | variable | 15 | 15 | no | yes |
| porterandyork.com | Ground Pork – 2LB | simple | 10 | 10 | no | yes |
| porterandyork.com | Valentines Day Gift Box | variable | 125 | 150 | yes | no |
| porterandyork.com | Gift Cards | simple | 0 | 0 | no | yes |
| porterandyork.com | Natural Pork Tenderloin | simple | 13 | 13 | no | yes |
| nutribullet.com | nutribullet Cold Press Juicer – Extended warrant… | simple | 35.99 | 35.99 | no | yes |
| nutribullet.com | nutribullet Cold Press Juicer | simple | 149.99 | 149.99 | no | yes |
| nutribullet.com | Turbo & Chill Bundle | variable | 224.99 | 299.98 | yes | yes |
| nutribullet.com | nutribullet Personal Blender – Extended warranty | simple | 14.99 | 14.99 | no | yes |
| nutribullet.com | nutribullet Personal Blender | simple | 59.99 | 59.99 | no | yes |
| nutribullet.com | nutribullet Turbo Tumbler Edition – Extended war… | simple | 19.99 | 19.99 | no | yes |
| nutribullet.com | nutribullet CrispLite Vision – Extended warranty | simple | 34.99 | 34.99 | no | yes |
| nutribullet.com | nutribullet CrispLite Vision | simple | 149.99 | 149.99 | no | yes |
| nutribullet.com | nutribullet Flex Accessory Set | variable | 34.99 | 34.99 | no | yes |
| nutribullet.com | nutribullet Chill™ Blade Block with Cover | simple | 41.99 | 41.99 | no | yes |
| nutribullet.com | nutribullet Chill™ Pint Cup Set | simple | 29.99 | 29.99 | no | no |
| nutribullet.com | nutribullet Chill™ Pint Cup & Lid | simple | 16.99 | 16.99 | no | yes |

And one full row as JSON (long text shortened with …):

```json
{
  "store": "porterandyork.com",
  "productId": 68510,
  "name": "Washington Trust Bank Employee Gift",
  "url": "https://porterandyork.com/product/washington-trust-bank-employee-gift/",
  "sku": "PYGB",
  "type": "variable",
  "price": 295,
  "regularPrice": 295,
  "salePrice": null,
  "currency": "USD",
  "onSale": false,
  "inStock": true,
  "onBackorder": false,
  "stockText": null,
  "purchasable": true,
  "categories": [
    "Beef"
  ],
  "tags": [],
  "attributes": [
    {
      "name": "Gift Box",
      "values": [
        "Beef Tenderloin",
        "Beef Rib Roast",
        "Steak Trio"
      ]
    }
  ],
  "variationCount": 1,
  "averageRating": null,
  "reviewCount": 0,
  "imageUrl": "https://porterandyork.com/wp-content/uploads/AB2A18602.jpg"
}
```

What the 24 real products show:

- **Two sales.** nutribullet's Turbo & Chill Bundle is $224.99, down from $299.98 (25% off), and Porter & York's Valentines Day Gift Box is $125, down from $150. The gift box has 9 sizes priced from $125 to $390, which the `priceRangeMin` and `priceRangeMax` fields show.
- **Three products are out of stock:** Porter & York's Organic Diestel Whole Turkey (12–14 lb, $115) a few weeks before Thanksgiving, the Valentines Day Gift Box, and nutribullet's Chill Pint Cup Set ($29.99).
- **A third of nutribullet's newest products are warranties.** 4 of its 12 newest products are extended warranties from $14.99 to $35.99, each tagged `4-Year` and `Upsell` and listed in a Warranty category. Filter on `categories` to leave them out of a price comparison, or keep them to study how the brand sells add-ons.
- **Tags carry product specs.** nutribullet uses tags for wattage and cup sizes (for example `1000 watts`, `24oz`, `32oz` on the bundle), which makes them useful for filtering.
- **Porter & York sells everyday cuts.** Most of its newest products cost $10 to $24, such as 2 lb packs of ground pork, ground chicken and shrimp, next to a $295 corporate gift box with 3 options.
- **No ratings on either store.** All 24 products have no average rating and 0 reviews in WooCommerce. A store can still show reviews on its pages through a separate review app, but those are not part of the WooCommerce catalog.

The Gift Cards product shows a price of 0 because the buyer chooses one of its 6 amounts; check `attributes` for products like this.

### How to tell if a store runs WooCommerce

Open `https://<store>/wp-json/wc/store/v1/products` in your browser. If you see a list of products in JSON, the Actor can read the store. If you get an error or a login page, the store has turned the Store API off or blocks automated access, and the Actor will report it in the run summary. Some stores behind Cloudflare only answer through a proxy; turn on **proxyConfiguration** for those.

For stores on Shopify, use our [Shopify Products scraper](https://apify.com/mrslm_data/shopify-products). For one product page on any platform, use [Product Page to JSON](https://apify.com/mrslm_data/product-page-json).

### Output fields

Each row in the dataset has these fields. The example column shows a value from the run above.

| Field | What it means | Example from this run |
|---|---|---|
| `store / productId / url` | Store domain, WooCommerce product ID and product link. | porterandyork.com / 68510 / https://porterandyork.com/product/washington-trust-bank-empl… |
| `name / sku / type` | Product name, SKU and type: simple, variable, grouped or external. | Washington Trust Bank Employee Gift / PYGB / variable |
| `price / regularPrice / salePrice / currency` | Current, regular and sale price in the store currency. | 295 / 295 / 125 / USD |
| `priceRangeMin / priceRangeMax` | Lowest and highest variation price, for variable products when the store gives a range. | 125 / 390 |
| `onSale / inStock / onBackorder / stockText / lowStockRemaining` | Sale and stock status as the store publishes it. | no / yes / no / Out of stock / (empty in this run) |
| `purchasable` | Whether the product can be added to the cart. | yes |
| `categories / tags / brands` | Product taxonomy. | Beef / Gift, meat, Cards … / \[] (empty in every row) |
| `attributes / variationCount` | Options such as size or colour with their values, and the number of variations. | {"name": "Gift Box", "values": \["Beef Tenderloin", "Beef Rib… / 1 |
| `averageRating / reviewCount` | WooCommerce's own product reviews. | (empty in this run) / 0 |
| `imageUrl / imageUrls` | Main image and all images. | https://porterandyork.com/wp-content/uploads/AB2A18602.jpg / https://porterandyork.com/wp-content/uploads/AB2A18602.jpg,… |
| `shortDescription / description` | Short description (always) and the full description (with includeDescription). | Your gift, your choice. Choose one of the preselected option… / (empty in this run) |

### Export WooCommerce products to CSV, Excel or Google Sheets

Every run saves its rows to a dataset, and a dataset can be downloaded in any common format. You do not need to write code for this.

**From Apify Console.** Open the run, go to the **Output** tab and click **Export**. Pick CSV, Excel (XLSX), JSON, XML, HTML or RSS. You can tick only the columns you want, for example `store`, `name`, `sku`, `price`, `regularPrice`. Nested values such as lists are flattened into columns like `categories/0` in CSV and Excel.

**From a URL.** The same export is a plain HTTPS link. Replace `<DATASET_ID>` with the dataset ID shown on the run's Storage tab:

```bash
## CSV with just the columns you need
curl -H "Authorization: Bearer $APIFY_TOKEN" \
  "https://api.apify.com/v2/datasets/<DATASET_ID>/items?format=csv&clean=1&fields=store,name,sku,price,regularPrice,salePrice,onSale,inStock,url" -o woocommerce-products.csv

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

**Into Google Sheets.** You have three good options:

1. **One-off:** download the CSV and use **File > Import > Upload** in Google Sheets. Choose "Replace current sheet" to refresh an existing tab.
2. **Automatic, no code:** in Make, Zapier or n8n, use the Apify app's "Watch Actor runs" (or "Run Actor") trigger, then "Get dataset items", then the Google Sheets "Add row" action. Every scheduled run then lands in your sheet. Apify's own [Google Sheets Import & Export](https://apify.com/lukaskrivka/google-sheets) Actor can also append a dataset to a sheet, and you can chain it to this Actor's runs with an integration.
3. **Formula:** `=IMPORTDATA("https://api.apify.com/v2/actor-tasks/<USERNAME>~<TASK_NAME>/runs/last/dataset/items?status=SUCCEEDED&format=csv&token=<YOUR_TOKEN>")` always pulls the latest successful run of a saved task. The token sits in the formula, so anyone who can open the sheet can see it. Only use this in a private sheet.

### Schedule it to run every day at 8 AM

A daily run gives you a price and stock snapshot for each store. To get only what changed between runs, use our [Store Change Watcher](https://apify.com/mrslm_data/store-change-watcher), which compares runs for you and also covers Shopify.

1. In the Actor's input form, set up the input from Step 1 and click **Save as new task**. Give it a clear name such as `woo-prices-daily`.
2. Go to **Schedules > Create new**, set the cron expression to `0 8 * * *` and pick your timezone, so it runs every day at 8 AM.
3. Add the task to the schedule and save. Each run gets its own fresh dataset.
4. Optional: on the task's **Integrations** tab, add a webhook, Slack or email notification for "Run succeeded", or connect Make, Zapier or n8n, so the new rows go where you need them.

To fetch the newest results without looking up a run ID, use the task's last-run link: `https://api.apify.com/v2/actor-tasks/<USERNAME>~woo-prices-daily/runs/last/dataset/items?status=SUCCEEDED&format=json`.

### Call it from the API (Python, JavaScript or curl)

You can start the Actor from your own code with the official Apify clients. Put your API token (Console > Settings > API & Integrations) in an environment variable called `APIFY_TOKEN` rather than in the code.

**Python** (`pip install "apify-client>=3"`). Tested with apify-client 3.4:

```python
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])
run_input = {
    "stores": [
        "porterandyork.com",
        "www.nutribullet.com"
    ],
    "maxProductsPerStore": 12
}

run = client.actor("mrslm_data/woocommerce-products").call(run_input=run_input)

## apify-client 3.x returns a Run object, so use run.default_dataset_id
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item["name"], item["price"])
```

In apify-client 3.x, `call()` returns a typed object. Older examples that use `run["defaultDatasetId"]` were written for 1.x and 2.x and fail in 3.x with `TypeError: 'Run' object is not subscriptable`.

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

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const input = {
    "stores": [
        "porterandyork.com",
        "www.nutribullet.com"
    ],
    "maxProductsPerStore": 12
};

const run = await client.actor('mrslm_data/woocommerce-products').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, items[0]);
```

**curl**, one request that runs the Actor and returns the rows as CSV (it waits up to 5 minutes, so keep the input small):

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

### What it costs

The Actor uses pay-per-event pricing. **Product**: $0.80 per 1,000 on the Free and Bronze tiers, $0.72 on Silver and $0.64 on Gold. Each run also has a start fee of $0.00005 per GB of memory (one event at the default memory). You are not billed separately for compute on normal runs: the event prices are the whole bill.

#### Price per event

Current pay-per-event prices for this Actor on Apify, by Apify subscription plan:

| Event (per 1,000) | Free / Bronze | Silver | Gold / Platinum / Diamond |
|---|---|---|---|
| Product (`product`) | $0.80 | $0.72 | $0.64 |
| Actor start (once per run at the default memory, not per 1,000) | $0.00005 | $0.00005 | $0.00005 |

You are charged only for the events in this table: nothing for compute, and nothing for searches that return no rows beyond the start fee.

| Scenario | Free / Bronze | Silver | Gold |
|---|---|---|---|
| The run in this guide (24 products) | $0.0193 | $0.0173 | $0.0154 |
| 1 store of 500 products, weekly (4 runs) | $1.60 | $1.44 | $1.28 |
| 5 stores of 1,000 products, daily (30 runs) | $120.00 | $108.00 | $96.00 |
| On-sale products only from 10 stores, daily (~300 a day, 30 runs) | $7.20 | $6.48 | $5.76 |

To cap spending, set **Maximum cost per run** in the run options (or `maxTotalChargeUsd` in the API). The Actor stops cleanly at the cap and you are never billed past it. Use **onSaleOnly**, **inStockOnly**, **search** or **category** so the store only returns the products you need.

### Limits

- Only WooCommerce stores with the public Store API turned on.
- One row per product. Variations are counted and their options listed, but each variation's own price and stock are not separate rows.
- Stock counts are only shown when the store publishes them (low stock).
- Ratings are WooCommerce's own reviews; review apps are not included.
- Prices are what the store shows to a guest, before tax rules, coupons or customer-specific prices.

### FAQ

**Do I need the store's WooCommerce API keys?**
No. The Store API is public and needs no key. The Actor only reads what any visitor can see.

**How do I get the whole catalog?**
Set **maxProductsPerStore** to 0.

**Can I get only products on sale?**
Yes. Turn on **onSaleOnly**.

**Why is a price 0?**
The product has a price the buyer chooses, such as a gift card. Check `attributes`.

**Does it work on Shopify?**
No. Use [Shopify Products](https://apify.com/mrslm_data/shopify-products) for Shopify stores.

**Can I run it on a schedule?**
Yes. Save your input as a task and attach a schedule, as shown above. Each run is independent and returns the WooCommerce products available at that moment.

**Does it work with Make, Zapier or n8n?**
Yes. All three have an Apify app. Use "Run Actor" (or run a saved task), then "Get dataset items" to pass the rows to the next step, such as Google Sheets, Airtable, a CRM or Slack.

**Can AI agents use it through MCP?**
Yes. Apify's hosted MCP server can expose this Actor as a tool to any MCP client (Claude Desktop, Cursor, VS Code and others). Add `https://mcp.apify.com/?tools=mrslm_data/woocommerce-products` as a remote MCP server and sign in with your Apify account or API token. The agent fills in the same input fields shown above and gets the same rows back, billed at the same per-event prices.

### 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

## `stores` (type: `array`):

Store domains or URLs, one per line, e.g. porterandyork.com. Uses the store's public WooCommerce Store API (no login).

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

Only products matching this keyword.

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

Only products in this store category.

## `onSaleOnly` (type: `boolean`):

Great for deal tracking.

## `inStockOnly` (type: `boolean`):

Skip out-of-stock items.

## `maxProductsPerStore` (type: `integer`):

0 = whole catalog.

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

Hard cap on products saved (and paid for). 0 = no cap.

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

Plain text, cut to 2,000 characters. Short description is always included.

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

Optional. Some stores behind Cloudflare need a proxy.

## Actor input object example

```json
{
  "stores": [
    "porterandyork.com",
    "www.nutribullet.com"
  ],
  "onSaleOnly": false,
  "inStockOnly": false,
  "maxProductsPerStore": 50,
  "maxResults": 0,
  "includeDescription": false,
  "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 = {
    "stores": [
        "porterandyork.com",
        "www.nutribullet.com"
    ],
    "maxProductsPerStore": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("mrslm_data/woocommerce-products").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 = {
    "stores": [
        "porterandyork.com",
        "www.nutribullet.com",
    ],
    "maxProductsPerStore": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("mrslm_data/woocommerce-products").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 '{
  "stores": [
    "porterandyork.com",
    "www.nutribullet.com"
  ],
  "maxProductsPerStore": 50
}' |
apify call mrslm_data/woocommerce-products --silent --output-dataset

```

## MCP server setup

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

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/g1JEz6q4J0mnH0tsA/builds/zcbvFACCgotYuIDgg/openapi.json
