# E-commerce Scraper - Product Prices, Variants & Stock (`parseforge/e-commerce-scraper`) Actor

Scrape any online store: Shopify, WooCommerce, Amazon, Walmart and schema.org sites. Prices, variants, stock and GTINs to CSV, Excel, JSON or XML.

- **URL**: https://apify.com/parseforge/e-commerce-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** E-commerce, Automation, Developer tools
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 product 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

![ParseForge Banner](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner-v4.webp)

## 🛍️ E-commerce Scraper

> 🚀 **Export product data from almost any online store in seconds.** Paste product, category or store URLs and get 29 clean columns per product: price, original price, discount, stock, GTIN, SKU, brand, rating, variants, images and specifications.

The E-commerce Scraper reads the same structured data a store publishes for search engines and for its own front end. Shopify stores are read through their product JSON, WooCommerce stores through the WooCommerce Store API, Amazon and Walmart through dedicated page parsers, and every other store through its schema.org Product data (JSON-LD or microdata), OpenGraph product tags, or a price-and-title fallback for plain HTML shops.

One run can mix stores and platforms. A Shopify collection comes back 250 products per request, a WooCommerce category 100 per request, and a whole store can be exported from its home page through its catalog API or its product sitemaps. Every product has the same 29 fields, whatever the store, so you can compare prices across sites in one table.

| 🎯 Target Audience | 💡 Primary Use Cases |
|---|---|
| Pricing and revenue teams | Competitor price monitoring across many stores |
| E-commerce managers and marketplaces | Catalog audits, assortment gaps, MAP checks |
| Data engineers and agencies | Product feeds, PIM enrichment, GTIN matching |
| Researchers and founders | Market sizing, brand and category studies |

### 📋 What the E-commerce Scraper does

- 🔗 **Product URLs:** any product page. One row per product (or one row per variant if you want).
- 🗂️ **Category, collection and search URLs:** finds every product on the page, follows pagination and scrapes each one. Shopify collections and WooCommerce categories go straight to the store's catalog API.
- 🏬 **Whole store URLs:** give a home page and get the full catalog, through Shopify `products.json`, the WooCommerce Store API or the store's product sitemaps. A market path such as `ikea.com/us/en/` keeps the crawl on that market.
- 🧩 **Variants:** sizes and colours with their own SKU, GTIN, price, compare-at price and stock, nested or as separate rows.
- 🛡️ **Blocked stores:** when a store refuses direct traffic, the Actor retries it through residential proxy in the store's country, automatically.

> 💡 **Why it matters:** price monitoring tools usually need one scraper per store. This Actor gives you one input, one schema and one dataset for Shopify brands, WooCommerce shops, Amazon, Walmart, IKEA, Nike, Decathlon and thousands of smaller stores.

### 🎬 Full Demo

🚧 Coming soon.

### 📊 Output

Fields a store does not publish hold `Not Disclosed`; fields that do not apply hold `N/A`. Prices are numbers.

| Field | Description |
|---|---|
| 🖼 `imageUrl` | Main product image |
| 📌 `title` | Product name |
| 🔗 `url` | Canonical product URL |
| 🆔 `id` | Store product ID (Shopify ID, ASIN, Walmart item ID...) |
| 👪 `parentId` | Parent product ID on variant rows, otherwise `N/A` |
| 🏷️ `sku` | SKU of the product or of the first available variant |
| 🔢 `gtin` | GTIN, UPC or EAN barcode |
| 🔧 `mpn` | Manufacturer part number or model |
| 🏭 `brand` | Brand or vendor |
| 💰 `price` | Current price as a number |
| 💱 `currency` | ISO currency code |
| 🏷️ `originalPrice` | Compare-at, list or "was" price when the product is discounted |
| 📉 `discountPercent` | Discount against `originalPrice`, rounded |
| 📦 `availability` | Availability as the store states it |
| ✅ `inStock` | `Yes` or `No` |
| ✨ `condition` | New, Used, Refurbished... |
| 🏪 `seller` | Seller or merchant, on marketplaces |
| ⭐ `rating` | Average rating |
| 💬 `reviewCount` | Number of reviews or ratings |
| 🗂️ `category` | Category or breadcrumb path |
| 📝 `description` | Description as plain text |
| 🎨 `variantCount` | Number of variants |
| 🧩 `variants` | Variant list: id, title, sku, gtin, price, originalPrice, inStock, imageUrl |
| 🖼️ `images` | Image gallery URLs |
| 📐 `specifications` | Attributes and specs as name / value pairs |
| 🧱 `platform` | Where the data came from: Shopify, WooCommerce, Amazon, Walmart, JSON-LD, Microdata, OpenGraph or HTML |
| 🌐 `domain` | Store domain |
| 🕒 `scrapedAt` | ISO timestamp |
| ❌ `error` | `null` on success; error rows carry the URL and the reason |

Three real records from a cloud run (long descriptions, variant lists, galleries and spec lists shortened here):

```json
[
  {
    "imageUrl": "https://cdn.shopify.com/s/files/1/1330/6287/files/default_c26654cc-c7a7-4c97-a443-38676e7bcfac.jpg?v=1790096125",
    "title": "Simond Men's MT500 Down Puffer Jacket",
    "url": "https://www.decathlon.com/products/forclaz-mens-mt500-down-puffer-jacket",
    "id": "8214661529662",
    "parentId": "N/A",
    "sku": "375680",
    "gtin": "3608439667718",
    "mpn": "Not Disclosed",
    "brand": "Forclaz",
    "price": 149,
    "currency": "USD",
    "originalPrice": "N/A",
    "discountPercent": "N/A",
    "availability": "In Stock",
    "inStock": "Yes",
    "condition": "Not Disclosed",
    "seller": "Not Disclosed",
    "rating": "Not Disclosed",
    "reviewCount": "Not Disclosed",
    "category": "Down jacket",
    "description": "RDS-certified down jacket designed for backpacking in the mountains in cold weather down to 14°F when active and 32°F when static.",
    "variantCount": 6,
    "variants": [
      { "id": "43195505311806", "title": "2XL", "sku": "375680", "gtin": "3608439667718", "price": 149, "originalPrice": "N/A", "inStock": "Yes", "imageUrl": "Not Disclosed" },
      { "id": "43195508654142", "title": "3XL", "sku": "375682", "gtin": "3608439667701", "price": 149, "originalPrice": "N/A", "inStock": "Yes", "imageUrl": "Not Disclosed" }
    ],
    "images": [
      "https://cdn.shopify.com/s/files/1/1330/6287/files/default_c26654cc-c7a7-4c97-a443-38676e7bcfac.jpg?v=1790096125",
      "https://cdn.shopify.com/s/files/1/1330/6287/files/default_d15dc24c-e52e-4961-a356-0de540031c12.jpg?v=1790096125"
    ],
    "specifications": [{ "name": "Size", "value": "2XL, 3XL, L, M, XL, S" }],
    "platform": "Shopify",
    "domain": "decathlon.com",
    "scrapedAt": "2026-09-24T16:29:24.950Z",
    "error": null
  },
  {
    "imageUrl": "https://m.media-amazon.com/images/I/51VxSqysy6L._AC_SL1500_.jpg",
    "title": "KTGEE Wireless Earbuds Bluetooth 5.3 Ear Buds Headphones, 40Hrs Playback",
    "url": "https://www.amazon.com/dp/B0D5HG7TC3",
    "id": "B0D5HG7TC3",
    "parentId": "N/A",
    "sku": "B0D5HG7TC3",
    "gtin": "Not Disclosed",
    "mpn": "Not Disclosed",
    "brand": "KTGEE",
    "price": 16.1,
    "currency": "USD",
    "originalPrice": 25.99,
    "discountPercent": 38,
    "availability": "In Stock",
    "inStock": "Yes",
    "condition": "Not Disclosed",
    "seller": "whping Power Tech",
    "rating": 4.3,
    "reviewCount": 6881,
    "category": "Electronics > Headphones, Earbuds & Accessories > Headphones & Earbuds > Earbud Headphones",
    "description": "40Hrs Extra-Long Battery Life Wireless Earbuds - Enough time to listen to 500+ songs: T08 wireless earbuds can provide up to 8 hours of music on a single ...",
    "variantCount": 0,
    "variants": [],
    "images": [
      "https://m.media-amazon.com/images/I/51VxSqysy6L._AC_SL1500_.jpg",
      "https://m.media-amazon.com/images/I/61HGB-ctP9L._AC_SL1500_.jpg"
    ],
    "specifications": [
      { "name": "Brand", "value": "KTGEE" },
      { "name": "Color", "value": "A-White" },
      { "name": "Ear Placement", "value": "In Ear" }
    ],
    "platform": "Amazon",
    "domain": "amazon.com",
    "scrapedAt": "2026-09-24T16:29:26.603Z",
    "error": null
  },
  {
    "imageUrl": "https://i5.walmartimages.com/asr/3c3cb9a4-cbae-459d-ab83-f5083b8b75aa.5f98f5bb100a4d663ba29e3b0fe63ffd.jpeg",
    "title": "Apple AirPods Pro 2 In-Ear Headphones with USB-C Charging Case, White",
    "url": "https://www.walmart.com/ip/AirPods-Pro-2nd-generation-with-MagSafe-Case-USB-C/5689919121",
    "id": "5689919121",
    "parentId": "N/A",
    "sku": "5689919121",
    "gtin": "195949704529",
    "mpn": "MTJV3AM/A",
    "brand": "Apple",
    "price": 173.99,
    "currency": "USD",
    "originalPrice": 197.98,
    "discountPercent": 12,
    "availability": "In Stock",
    "inStock": "Yes",
    "condition": "Not Disclosed",
    "seller": "Gadget Replay",
    "rating": 4.2,
    "reviewCount": 35,
    "category": "Services > Immersive Shopping Suite > View in 3D",
    "description": "Apple AirPods Pro 2 In-Ear Headphones with USB-C Charging Case, White: Brand: Apple Headphone Style: In-Ear Headphone Type: Headphones Wireless Technology: TRUE ...",
    "variantCount": 0,
    "variants": [],
    "images": [
      "https://i5.walmartimages.com/asr/3c3cb9a4-cbae-459d-ab83-f5083b8b75aa.5f98f5bb100a4d663ba29e3b0fe63ffd.jpeg",
      "https://i5.walmartimages.com/asr/0f13e8de-9f60-4810-a5e2-a77ceacdd085.f043c740e058c48b072836f0211d8a9e.jpeg"
    ],
    "specifications": [
      { "name": "Noise control technology", "value": "Active Noise Cancellation" },
      { "name": "Battery life", "value": "6 h" },
      { "name": "Works with", "value": "iPhone, iPad, Mac" }
    ],
    "platform": "Walmart",
    "domain": "walmart.com",
    "scrapedAt": "2026-09-24T16:29:28.128Z",
    "error": null
  }
]
```

### ✨ Why choose this Actor

| | What you get |
|---|---|
| **One schema for every store** | 29 flat columns, prices as numbers, ISO currencies. Shopify, WooCommerce, Amazon, Walmart and schema.org stores land in the same table. |
| **Variants done properly** | Every size and colour with its own SKU, barcode, price, compare-at price and stock. Nested by default, one row per variant with a switch. |
| **Barcodes for matching** | GTIN / UPC / EAN and MPN where the store publishes them, so the same product can be matched across retailers. |
| **Discounts computed for you** | `originalPrice` and `discountPercent` from compare-at, list and strikethrough prices. |
| **Whole catalogs, fast** | Shopify and WooCommerce catalogs come from their JSON APIs: 250 or 100 products per request, no page rendering. |
| **Honest error rows** | A blocked page or a page without product data returns a row that says why, instead of an empty or invented product. |

### 📈 How it compares to alternatives

| Feature | ParseForge E-commerce Scraper | Apify E-commerce Scraping Tool | Typical universal scrapers |
|---|---|---|---|
| Product and category URLs | Yes | Yes | Mostly product URLs |
| Whole-store export from a home page | Yes | Not listed | Rarely |
| Flat columns with numeric prices | Yes, 29 fields | Nested objects | Varies |
| Variants with SKU, GTIN, price and stock each | Yes | Variants listed | Rarely |
| Discount and original price | Yes | Not listed | Varies |
| Shopify / WooCommerce catalog APIs | Yes | Not listed | Some |
| Residential retry for blocked stores | Automatic | Yes | Rarely |
| Reviews, sellers and AI summaries | No | Yes | Rarely |
| eBay, Best Buy, Home Depot, Lowe's, Argos | No (blocked over HTTP) | Yes, with a browser | Varies |

The Actor reads pages over HTTP with a real browser TLS fingerprint and never starts a browser. That keeps runs fast and cheap, and it means stores that only render products with JavaScript, or that block every non-browser client, are out of reach. They come back as error rows that name the reason.

### 🚀 How to use

1. [Create a free Apify account with $5 in credit](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the E-commerce Scraper and paste product URLs, category URLs or store URLs.
3. Set **Max Items**, and turn on **One row per variant** if you want each size or colour as its own row.
4. Click **Start** and download the dataset as CSV, Excel, JSON or XML.

A mixed first run:

```json
{
  "productUrls": [
    { "url": "https://www.allbirds.com/products/mens-tree-runner-go" },
    { "url": "https://www.amazon.com/dp/B0D5HG7TC3" }
  ],
  "listingUrls": [{ "url": "https://www.allbirds.com/collections/mens" }],
  "storeUrls": [{ "url": "https://www.decathlon.com/" }],
  "maxItems": 100
}
```

### 💼 Business use cases

#### 📊 Price monitoring

Schedule a daily run on your competitors' product or collection URLs and diff `price`, `originalPrice` and `inStock` by `id`. One dataset covers every store you track.

#### 🧾 Catalog and assortment audits

Export a competitor's whole store and compare `brand`, `category`, `variantCount` and sizes against your own range to spot gaps and overlaps.

#### 🔢 Product matching and MAP checks

Match products across retailers by `gtin` and `mpn`, then flag sellers pricing below the minimum advertised price.

#### 🗂️ Feeds and PIM enrichment

Pull titles, descriptions, images and `specifications` into your product information system or a marketplace feed.

### 🔌 Automating E-commerce Scraper

- **Make** and **Zapier:** start a run on a schedule and send the CSV to Google Sheets or Airtable.
- **Slack:** post a message when prices change or a product goes out of stock.
- **Airbyte:** load each dataset into your warehouse.
- **GitHub** and **Google Drive:** archive daily exports for price history.

All of them are on the Actor's integrations tab, or use [Apify integrations](https://docs.apify.com/platform/integrations).

### 🌟 Beyond business use cases

- **Research:** study price dispersion, discount depth and assortment across retailers.
- **Personal:** track a wish list across several stores and buy at the lowest price.
- **Non-profit:** monitor the price of essentials across local shops.
- **Experimentation:** build a product dataset to train a classifier or a recommender.

### 🤖 Ask an AI assistant about this scraper

Add the Actor to Claude, Cursor or any MCP client and ask in plain language, for example "compare the price of these three jackets across Decathlon and Allbirds":

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/e-commerce-scraper"
```

### ❓ Frequently Asked Questions

**🛒 Which stores work?**
Shopify and WooCommerce stores, Amazon, Walmart product pages, and any store that publishes schema.org Product data, which includes most large retailers (IKEA, Nike, Decathlon and many more). Plain HTML shops work when the page shows one title and a visible price.

**🔗 What is the difference between the three URL fields?**
**Product URLs** are single product pages. **Category / search / collection URLs** are pages that list products: the Actor collects the product links, follows pagination and scrapes each product. **Whole store URLs** are home pages: the Actor exports the full catalog.

**🧩 How do variants work?**
By default each product is one row with a `variants` array. Turn on **One row per variant** to get one row per size or colour, each with its own `id`, `sku`, `gtin`, `price` and `inStock`, and the product in `parentId`.

**🛡️ What happens when a store blocks me?**
The Actor first tries two browser fingerprints directly. If the store still refuses, it retries through residential proxy in the store's country and keeps using it for that store. If that fails too, you get an error row with the reason. You can switch the residential fallback off.

**🚫 Which stores do not work?**
Stores that block every non-browser client, such as eBay, Best Buy, Home Depot, Lowe's and Argos, and stores that load products only with JavaScript. Walmart product pages work, but Walmart category and search pages do not publish products in their HTML, so pass Walmart product URLs.

**🏬 How does whole-store mode find products?**
It asks the store's Shopify or WooCommerce catalog API first. Otherwise it reads the product sitemaps listed in `robots.txt`. Add a market path such as `/us/en/` to stay on one country's catalog.

**💱 Which currency do I get?**
The one the store shows. Amazon shows prices in the shopper's local currency, which depends on the IP address, so the `currency` column always says which one you got.

**⭐ Why is `rating` sometimes `Not Disclosed`?**
Many stores do not publish ratings in their page data, and Shopify's product JSON has none. When a store does publish them, they are included.

**📄 How many listing pages are followed?**
**Max pages per listing** (default 5) for HTML listings. Shopify and WooCommerce listings page through their APIs until **Max Items**.

**🔢 Why do some rows have `N/A` in `originalPrice`?**
The product is not discounted, so there is no original price to show.

**🆓 What do free users get?**
Up to 10 products per run as a preview. [Upgrade your plan](https://console.apify.com/sign-up?fpr=vmoqkp) for up to 1,000,000 products per run.

### 🔌 Integrate with any app

Pull results with the API in any language:

```bash
curl "https://api.apify.com/v2/acts/parseforge~e-commerce-scraper/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"productUrls":[{"url":"https://www.amazon.com/dp/B0D5HG7TC3"}],"maxItems":10}'
```

### 🔗 Recommended Actors

- [Amazon Products Scraper](https://apify.com/parseforge/amazon-products-scraper?fpr=vmoqkp)
- [Shopify Products Scraper](https://apify.com/parseforge/shopify-stores-scraper?fpr=vmoqkp)
- [Google Shopping Scraper](https://apify.com/parseforge/google-shopping-prices-scraper?fpr=vmoqkp)
- [Home Depot Scraper](https://apify.com/parseforge/home-depot-products-scraper?fpr=vmoqkp)
- [Walmart Grocery Prices Scraper](https://apify.com/parseforge/walmart-grocery-prices-scraper?fpr=vmoqkp)

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge?fpr=vmoqkp).

**🆘 Need Help?** [Open our contact form](https://tally.so/r/BzdKgA)

> **⚠️ Disclaimer:** this Actor is an independent tool and is not affiliated with, endorsed by or sponsored by Shopify, WooCommerce, Amazon, Walmart or any store it reads. It collects only publicly available product data. You are responsible for using it in line with each site's terms and applicable law.

# Actor input Schema

## `productUrls` (type: `array`):

Product detail pages from any online store (Shopify, WooCommerce, Amazon, Walmart, IKEA, Nike and most stores that publish schema.org product data). One row per product.

## `listingUrls` (type: `array`):

Category, collection or search result pages. The Actor finds every product on the page, follows pagination and scrapes each product. Shopify collections and WooCommerce categories are read through the store's own catalog API.

## `storeUrls` (type: `array`):

A store's home page to export its full catalog. Uses the Shopify or WooCommerce catalog API when available, otherwise the store's product sitemaps.

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

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

## `maxListingPages` (type: `integer`):

How many pagination pages to follow for each category or search URL (HTML listings only; Shopify and WooCommerce APIs page until Max Items).

## `splitVariants` (type: `boolean`):

Off: one row per product with a nested variants array. On: one row per variant (size, colour...) with its own price, SKU and stock.

## `residentialFallback` (type: `boolean`):

When a store blocks direct requests (Walmart, some Etsy and big-box pages), retry through Apify RESIDENTIAL proxy in the store's country. Products fetched this way are billed as an extra residential event. Turn off to never use residential.

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

Off by default: most stores answer directly, and the residential fallback above covers the ones that do not. Set a proxy here only to force every request through it.

## Actor input object example

```json
{
  "productUrls": [
    {
      "url": "https://www.allbirds.com/products/mens-tree-runner-go"
    },
    {
      "url": "https://www.amazon.com/dp/B0D5HG7TC3"
    }
  ],
  "maxItems": 10,
  "maxListingPages": 5,
  "splitVariants": false,
  "residentialFallback": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

Key fields

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

Complete dataset with all 29 fields

# 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 = {
    "productUrls": [
        {
            "url": "https://www.allbirds.com/products/mens-tree-runner-go"
        },
        {
            "url": "https://www.amazon.com/dp/B0D5HG7TC3"
        }
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/e-commerce-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 = {
    "productUrls": [
        { "url": "https://www.allbirds.com/products/mens-tree-runner-go" },
        { "url": "https://www.amazon.com/dp/B0D5HG7TC3" },
    ],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/e-commerce-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 '{
  "productUrls": [
    {
      "url": "https://www.allbirds.com/products/mens-tree-runner-go"
    },
    {
      "url": "https://www.amazon.com/dp/B0D5HG7TC3"
    }
  ],
  "maxItems": 10
}' |
apify call parseforge/e-commerce-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/e-commerce-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/6DfUGtRAuEQmsIUP6/builds/LPXu6GlLZgrFHbmZo/openapi.json
