# Shopify Scraper — Products, Prices, Variants & Stock, Any Store (`intelscrape/shopify-products-scraper`) Actor

Shopify Scraper: extract every product from any Shopify store: title, price, compare-at price, discount, vendor, type, tags, images, description, availability, and full variants with SKU, options and stock flags. Bulk stores, keyword filter. No API key, no login.

- **URL**: https://apify.com/intelscrape/shopify-products-scraper.md
- **Developed by:** [IntelScrape](https://apify.com/intelscrape) (community)
- **Categories:** E-commerce, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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

## Shopify Scraper — Products, Prices, Variants & Stock, Any Store

![Shopify Scraper — Products, Prices, Variants & Stock, Any Store](https://api.apify.com/v2/key-value-stores/hRabN9WfDGrT4nSvV/records/shopify-products-scraper-banner.png)

🇨🇳 **Shopify 抓取器**：从任意 Shopify 店铺提取全部商品：标题、价格、原价、折扣、品牌、类型、标签、图片、描述、库存状态，以及包含 SKU、选项和库存标记的完整变体。支持批量店铺和关键词过滤，无需 API 密钥或登录。

🇸🇬 **Pengikis Shopify**: ekstrak semua produk dari mana-mana kedai Shopify: tajuk, harga, harga asal, diskaun, jenama, tag, imej, stok dan varian penuh dengan SKU. Pukal, tiada kunci API.

#### 🤖 NEW: Connect This To Your AI!

Use this actor from Claude, ChatGPT, Cursor or any MCP client through the **[IntelScrape MCP Server](https://apify.com/intelscrape/skip--trace)**, or call it directly over the Apify API.

#### 🏆 Featured Bots by IntelScrape

- [Skip Trace Pro](https://apify.com/intelscrape/skip-trace-pro)
- [TruePeopleSearch Scraper](https://apify.com/intelscrape/truepeoplesearch-scraper)
- [TikTok Email Scraper](https://apify.com/intelscrape/tiktok-scraper)
- [Amazon Product Reviews Scraper](https://apify.com/intelscrape/amazon-product-review-scraper)
- [Website Contact Scraper](https://apify.com/intelscrape/contact-info-scraper)
- [Skip Trace MCP Server](https://apify.com/intelscrape/skip--trace)

⚡ Works with n8n, Make, Zapier, Google Sheets and the Apify API.

![price](https://img.shields.io/badge/price-%241.50%20per%201K%20products-blue) ![billing](https://img.shields.io/badge/billing-pay%20per%20product-green) ![source](https://img.shields.io/badge/source-Shopify%20storefront-brightgreen) ![API key](https://img.shields.io/badge/API%20key-not%20required-orange)

**Complete Shopify catalogues with prices, discounts, stock and variant SKUs from any store, fast and cheap.**

> **Honest coverage & billing:** Some stores disable or block the public products feed; those return an error row. You pay only for results actually delivered, and a built-in cost guard stops the run at your max-charge limit.

🌍 Built for teams in the **US, China and Singapore**, and anyone who needs this data in a spreadsheet or pipeline.

⭐ Found it useful? Please leave a review; it helps others find it.

⚖️ **Lawful business use only.** Collect public data only, and comply with the source site's terms, copyright and data-protection laws (GDPR, CCPA, China PIPL, Singapore PDPA).

*Examples below are illustrative; names and values may be fictional or out of date.*

### What is Shopify Scraper?

Over four million stores run on Shopify, and every one of them publishes its catalogue in a public storefront feed. **Shopify Scraper** reads that feed directly, so you get clean product rows in seconds: prices and sale prices, discounts, stock flags, images, tags and every variant with its SKU. Point it at your competitors, your suppliers or a list of stores you are prospecting and schedule it for daily price and stock tracking.

### What does it do?

- **Any Shopify store**: custom domains or .myshopify.com, many stores per run
- **Product data**: title, handle, URL, vendor, product type, tags, description text, images, created/published/updated dates
- **Pricing**: lowest and highest price, compare-at price, on-sale flag and discount %
- **Stock**: available flag per product and per variant
- **Variants, SKUs & options (on by default)**: every variant with SKU, price, compare-at, barcode, weight and option values
- **Store info**: store name, currency and country on every row
- **Filters**: keyword and in-stock only

### Why choose us over cheaper scrapers?

- **Honest output**: limits are documented, missing data is labeled, never invented
- **Clean, consistent schema** ready for Excel, Sheets, BI tools or an LLM
- **No account risk**: no logins, no cookies, no API keys
- **Pay per result** with a built-in cost guard; no subscription, failed items are never charged
- **Fast and light**: no residential proxy, so runs finish in seconds and stay cheap
- **Maintained by IntelScrape** and fixed fast when the source changes

### Who is it for?

- **Competitor price monitoring**: schedule daily and diff prices and discounts
- **Dropshipping & product research**: find best-sellers, new arrivals and price points
- **Stock alerts**: watch when variants sell out or come back
- **Catalogue migration**: export a store's products with variants
- **Market mapping**: compare vendors and product types across many stores
- **Lead qualification**: size up a store's catalogue before outreach

### How to use it

#### In Apify Console (no code)

1. Click **Try for free** / **Start**. The form is prefilled with a working example.
2. Change the inputs (see examples below).
3. Click **Start**, then export the results as **JSON, CSV, Excel, XML or HTML**, or open them in Google Sheets.
4. Optional: **Schedule** the actor to run hourly, daily or weekly.

#### Via API

```bash
curl -X POST "https://api.apify.com/v2/acts/intelscrape~shopify-products-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"storeUrls": ["https://www.allbirds.com", "https://colourpop.com"], "maxProductsPerStore": 30}'
```

Or use the official [Apify JavaScript](https://docs.apify.com/api/client/js/) and [Python](https://docs.apify.com/api/client/python/) clients:

```python
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("intelscrape/shopify-products-scraper").call(run_input={"storeUrls": ["https://www.allbirds.com", "https://colourpop.com"], "maxProductsPerStore": 30})
for item in client.dataset(run["default_dataset_id"]).iterate_items():
    print(item)
```

#### With AI agents (MCP)

Add Apify's MCP server (`https://mcp.apify.com`) or the [IntelScrape MCP Server](https://apify.com/intelscrape/skip--trace) to Claude Desktop, Cursor, ChatGPT or any MCP client, then ask in plain language, e.g. *"Run intelscrape/shopify-products-scraper with the default input and summarise the results."*

### Input examples

**Two stores, 30 products each (default)**

```json
{
  "storeUrls": ["https://www.allbirds.com", "https://colourpop.com"],
  "maxProductsPerStore": 30
}
```

**Full catalogue, in stock only**

```json
{
  "storeUrls": ["https://www.allbirds.com"],
  "maxProductsPerStore": 50000,
  "onlyAvailable": true
}
```

**Keyword across stores, no variants**

```json
{
  "storeUrls": ["https://colourpop.com", "https://www.allbirds.com"],
  "keyword": "gift",
  "includeVariants": false
}
```

### Output fields

| Field | Description |
|---|---|
| `store / storeName / currency / storeCountry` | Store |
| `productId / title / handle / url` | Identity |
| `vendor / productType / tags` | Classification |
| `price / priceMax / compareAtPrice / onSale / discountPct` | Pricing |
| `available / variantCount` | Stock |
| `image / images / imageCount / description` | Content |
| `createdAt / publishedAt / updatedAt` | Dates |
| `options / variants[]` | Variants with sku, price, compareAtPrice, available, options, grams, barcode (when on) |
| `error` | Store that could not be read (not charged) |

#### Sample output

```json
{
  "store": "https://www.allbirds.com",
  "storeName": "Allbirds",
  "currency": "USD",
  "title": "Men's Tree Runners",
  "price": 98,
  "compareAtPrice": null,
  "available": true,
  "vendor": "Allbirds",
  "variantCount": 12,
  "variants": [{ "sku": "TR3MBLK080", "price": 98, "available": true, "option1": "8" }]
}
```

### Pricing (pay per event)

| Event | When it is charged | Price |
|---|---|---|
| **Actor start** | once per run | $0.005 |
| **Product** | per product row | $0.001 |
| **Variants & SKUs** | per product with variants (on by default; turn off to skip) | $0.0005 |

#### Cost examples

| Run | Cost |
|---|---|
| Default run: 60 products with variants | $0.095 |
| 5,000 products with variants | $7.505 |
| 10,000 products, no variants | $10.005 |

Platform usage is included in these prices. Set **Max charge per run** in the run options to cap spend; the actor stops cleanly when the limit is reached and keeps everything collected so far.

### Tips for best results

- Schedule daily and compare price and available fields for change alerts.
- Use keyword to pull one category across many stores.
- Turn variants off for the cheapest bulk export.
- If a store returns an error row, it is not on Shopify or blocks cloud servers; try the proxy option.

### FAQ

#### Which stores work?

Any public Shopify storefront, including custom domains. Password-protected stores do not.

#### Do I need the store's API key?

No. It reads the public storefront feed every Shopify store exposes.

#### Is inventory quantity included?

Shopify's public feed exposes an available flag per variant, not exact quantities.

#### How fast is it?

About 250 products per request, so thousands of products take seconds.

#### Are failed stores charged?

No. They return an error row with no charge.

#### Can I get collections?

Not in this version; use the keyword or productType fields to group products.

### Honest limits

- Some stores disable or block the public products feed; those return an error row.
- Exact stock quantities are not public.
- Prices are in the store's default currency.
- Very large catalogues (over 50,000 products) are capped per run.

### Related IntelScrape bots

- [WooCommerce Scraper](https://apify.com/intelscrape/woocommerce-products-scraper): products & prices from any WooCommerce store
- [Shopify Store Leads](https://apify.com/intelscrape/shopify-owner-email): Shopify store owner emails
- [Tech Stack Detector](https://apify.com/intelscrape/tech-stack-detector): CMS, analytics & frameworks per domain
- [Website Contact Scraper](https://apify.com/intelscrape/contact-info-scraper): emails, phones & socials from sites
- [Skip Trace MCP Server](https://apify.com/intelscrape/skip--trace): IntelScrape tools for AI agents

### Legal

This actor collects publicly available data only. You are responsible for using the results lawfully and in line with the source's terms and applicable privacy laws (GDPR, CCPA, PIPL, PDPA). Process personal data only with a legitimate purpose. IntelScrape is not affiliated with, endorsed by or sponsored by the data source; all trademarks belong to their owners.

# Actor input Schema

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

Store homepages, e.g. https://www.allbirds.com. Custom domains and .myshopify.com both work.

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

Cap per store.

## `keyword` (type: `string`):

Only keep products whose title, type, vendor or tags contain this word.

## `onlyAvailable` (type: `boolean`):

Skip products with no available variant.

## `includeVariants` (type: `boolean`):

Add every variant with SKU, price, compare-at price, availability, options and barcode. Charged per product.

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

Not needed normally. The actor switches to Apify Proxy automatically if the source starts rate-limiting.

## Actor input object example

```json
{
  "storeUrls": [
    "https://www.allbirds.com",
    "https://colourpop.com"
  ],
  "maxProductsPerStore": 30,
  "keyword": "",
  "onlyAvailable": false,
  "includeVariants": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (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 = {
    "storeUrls": [
        "https://www.allbirds.com",
        "https://colourpop.com"
    ],
    "includeVariants": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("intelscrape/shopify-products-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 = {
    "storeUrls": [
        "https://www.allbirds.com",
        "https://colourpop.com",
    ],
    "includeVariants": True,
}

# Run the Actor and wait for it to finish
run = client.actor("intelscrape/shopify-products-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 '{
  "storeUrls": [
    "https://www.allbirds.com",
    "https://colourpop.com"
  ],
  "includeVariants": true
}' |
apify call intelscrape/shopify-products-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,intelscrape/shopify-products-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/aGjIyBq6D2DwCJZVy/builds/dSvPCZ93ZyYtYCOM0/openapi.json
