# BigCommerce Scraper: Products, Prices & Stock to CSV (`mrslm_data/bigcommerce-products`) Actor

Scrape products from public BigCommerce stores or product URLs, with price, retail price, stock, brand and SKU. Limit products per store or across results.

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

## Pricing

from $0.80 / 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

## BigCommerce Scraper: Products, Prices & Stock to CSV

**Export products, prices, sale and retail prices, stock, brand, SKU/GTIN and ratings from any public BigCommerce store. $1.00 per 1,000 products.**

Scrape BigCommerce product pages and public sitemaps to export product prices, stock and other listing data to CSV. This BigCommerce data option uses public pages without a store login or private API.

### Quick start

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

```json
{
  "stores": [
    "cornerstone-light-demo.mybigcommerce.com"
  ],
  "maxProductsPerStore": 20
}
```

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 discovers products through public XML sitemaps and reads public product pages and their structured data. It can also read individual product URLs. A vendor API key or store login is not required.

Use `stores` for discovery and `productUrls` for individual pages. `maxProductsPerStore` defaults to 100; 0 means every product in the sitemap. `maxResults` caps saved products across stores, with 0 meaning no cap. `includeDescription` controls a plain-text description of up to 1,000 characters. `proxyConfiguration` is available for runs involving many stores.

Each saved product 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: BigCommerce products

#### Step 1: Enter the input

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

```json
{
  "stores": [
    "cornerstone-light-demo.mybigcommerce.com"
  ],
  "maxProductsPerStore": 20
}
```

#### Step 2: Run it

Press **Start** and inspect the run's dataset. Our test run on Nov 10, 2026 saved **20 saved rows**. Five of them 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
[
  {
    "store": "cornerstone-light-demo.mybigcommerce.com",
    "productId": "102",
    "name": "Dish Detergent",
    "brand": "FreshBrand",
    "sku": null,
    "upc": null,
    "mpn": null,
    "gtin": null,
    "price": 15,
    "currency": "CAD",
    "inStock": true,
    "url": "https://cornerstone-light-demo.mybigcommerce.com/all/dish-detergent/"
  },
  {
    "store": "cornerstone-light-demo.mybigcommerce.com",
    "productId": "106",
    "name": "Feather Duster",
    "brand": "FreshBrand",
    "sku": null,
    "upc": null,
    "mpn": null,
    "gtin": null,
    "price": 26,
    "currency": "CAD",
    "inStock": true,
    "url": "https://cornerstone-light-demo.mybigcommerce.com/all/feather-duster/"
  }
]
```

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 |
|---|---|
| `store` | `"cornerstone-light-demo.mybigcommerce.com"` |
| `productId` | `"102"` |
| `name` | `"Dish Detergent"` |
| `brand` | `"FreshBrand"` |
| `sku` | `null` |
| `upc` | `null` |
| `mpn` | `null` |
| `gtin` | `null` |
| `price` | `15` |
| `priceWithTax` | `null` |
| `retailPrice` | `null` |
| `salePriceFrom` | `null` |
| `priceRange` | `null` |
| `currency` | `"CAD"` |
| `inStock` | `true` |
| `availability` | `"InStock"` |
| `stockLevel` | `null` |
| `purchasable` | `true` |
| `condition` | `"NewCondition"` |
| `weight` | `"1.00 KGS"` |
| `ratingValue` | `null` |
| `reviewCount` | `null` |
| `categoryPath` | `["Shop All"]` |
| `description` | `"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi vel metus ac est egestas porta sed quis erat. …` |
| `images` | `["https://cdn11.bigcommerce.com/s-n0i50vy/images/stencil/1280x1280/products/102/331/CommonGoodDishSoap_1024x10…` |
| `variantCount` | `0` |
| `url` | `"https://cornerstone-light-demo.mybigcommerce.com/all/dish-detergent/"` |
| `scrapedAt` | `"2026-11-10T09:52:32.975Z"` |

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 bigcommerce-products.csv
curl -H "Authorization: Bearer $APIFY_TOKEN" \
  "https://api.apify.com/v2/datasets/<DATASET_ID>/items?format=xlsx&clean=1" -o bigcommerce-products.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 = {
  "stores": [
    "cornerstone-light-demo.mybigcommerce.com"
  ],
  "maxProductsPerStore": 20
}
run = client.actor("mrslm_data/bigcommerce-products").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 = {
  "stores": [
    "cornerstone-light-demo.mybigcommerce.com"
  ],
  "maxProductsPerStore": 20
};
const run = await client.actor('mrslm_data/bigcommerce-products').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~bigcommerce-products/run-sync-get-dataset-items?format=csv" \
  -H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \
  -d '{"stores": ["cornerstone-light-demo.mybigcommerce.com"], "maxProductsPerStore": 20}' -o bigcommerce-products.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 `product` event is charged for each saved product, 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 |
|---|---:|---:|---:|
| `product` per 1,000 saved | $1.00 | $0.90 | $0.80 |
| `apify-actor-start` per run | $0.00005 | $0.00005 | $0.00005 |

At the Free/Bronze rate, one run with 20 saved rows costs $0.02005, including the start event. One run with 1,000 saved rows costs $1.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

A public sitemap may omit products, and pages may not publish every field. A null stock level or identifier is not zero. Prices and availability can change after collection. Descriptions are plain text and limited to 1,000 characters.

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 a BigCommerce store without an API key?**

Add a store domain or URL to `stores`. The Actor reads public sitemap and product page data without a vendor API key. Coverage depends on what the site publishes.

**Can I scrape individual BigCommerce product URLs?**

Yes. Add product pages to `productUrls`. You can also use `stores` in the same input when you need sitemap discovery as well as specific pages.

**How do I limit products per BigCommerce store?**

Set `maxProductsPerStore`. The default is 100; 0 means every product in the sitemap. The overall `maxResults` cap can further limit saved products.

**How do I cap the total number of products?**

Set `maxResults` to a positive number to limit saved products across the run. Its default of 0 means no run-wide result cap.

**Can I omit product descriptions?**

Set `includeDescription` to false. When included, the plain-text description is limited to 1,000 characters.

**Does every product have a SKU or GTIN?**

No. Fields depend on public source data. The sample has null identifiers, so check coverage before using them to match products.

**Can I monitor BigCommerce prices and stock over time?**

Schedule the same task and retain each dataset as a dated snapshot. Compare prices and availability across runs yourself; changes may also reflect source coverage.

**What does a null stock level mean?**

It means the row has no value for that field, not necessarily that stock is zero. The sample includes an in-stock indicator with a null stock level.

**How much do 1,000 products cost?**

On Free/Bronze, 1,000 saved products cost $1.00 plus the $0.00005 start event, totaling $1.00005 for one run.

### Related scrapers

- [Shopify Scraper: Sale Prices, Compare-at & Stock](https://apify.com/mrslm_data/shopify-products)
- [WooCommerce Products Scraper: Prices, Sales & Stock](https://apify.com/mrslm_data/woocommerce-products)
- [Magento Scraper: Adobe Commerce Products & Prices](https://apify.com/mrslm_data/magento-products)

### 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, e.g. "berlinpackaging.com". Products are found through the store's public XML sitemap.

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

Individual BigCommerce product pages to scrape, instead of (or as well as) whole stores.

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

Plain-text product description (up to 1,000 characters).

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

0 = every product in the sitemap.

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

Safety cap on saved products across all stores. 0 = no cap. Your max cost per run is always respected.

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

Usually not needed. Turn on Apify Proxy for many stores at once.

## Actor input object example

```json
{
  "stores": [
    "cornerstone-light-demo.mybigcommerce.com"
  ],
  "includeDescription": true,
  "maxProductsPerStore": 20,
  "maxResults": 0,
  "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": [
        "cornerstone-light-demo.mybigcommerce.com"
    ],
    "maxProductsPerStore": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("mrslm_data/bigcommerce-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": ["cornerstone-light-demo.mybigcommerce.com"],
    "maxProductsPerStore": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("mrslm_data/bigcommerce-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": [
    "cornerstone-light-demo.mybigcommerce.com"
  ],
  "maxProductsPerStore": 20
}' |
apify call mrslm_data/bigcommerce-products --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,mrslm_data/bigcommerce-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/UInussfWSk17G3PRZ/builds/PnDiz8hnaUSU1LOkV/openapi.json
