# Shopify Store Catalog Scraper (`itsyas/shopify-catalog-scraper`) Actor

Extract the full product catalog of any Shopify store: products, variants (size/color with per-variant prices), sale prices, stock and images as clean JSON. Fast JSON-endpoint extraction — a 1,000-product store in minutes.

- **URL**: https://apify.com/itsyas/shopify-catalog-scraper.md
- **Developed by:** [Angel Sanchez](https://apify.com/itsyas) (community)
- **Categories:** E-commerce, Automation, Integrations
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.25 / 1,000 product extracteds

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Shopify Store Catalog Scraper

**Extract the complete product catalog of any Shopify store in minutes** —
products, variants, per-variant prices, sale prices, stock and images as clean JSON.

Uses Shopify's native JSON endpoints (not fragile HTML parsing), so a 1,000-product
store takes a handful of requests instead of a thousand page loads — fast, cheap,
and resistant to theme changes.

### What does this Actor do?

You paste a Shopify store URL (its public domain or its `*.myshopify.com` handle).
The Actor reads the store's product endpoints and returns one clean JSON object per
product, with **every variant** broken out as structured data — no API keys, no app
install, no store login.

- ⚡ **Fast** — JSON-endpoint extraction, not page-by-page scraping.
- 🧩 **Variants done properly** — every size/colour/option with its own price, sale
  price, availability and image.
- 🛡️ **Theme-proof** — reads data endpoints, so a redesigned storefront doesn't
  break it.

### What data can you extract?

| Product data | Commercial info | Per-variant detail |
|---|---|---|
| 📝 Name (multi-language) | 💰 Price & currency | 🎨 Attributes (size, colour, …) |
| 🔗 Description | 🏷️ Sale price (`compare_at`) | 💰 Variant price & sale price |
| 🏢 Brand (vendor) | 📂 Categories & tags | 📦 Stock status (in/out) |
| 🖼️ All images (with position) | 🔗 Product & origin URL | 🔢 Stock quantity (when published) |
| 🆔 Origin ID / SKU | 🧬 Product type | 🖼️ Variant image |

Every product is one JSON object; export the dataset as **JSON, CSV, Excel or XML**.

```json
{
    "product": {
        "origin_id": "7811232948456",
        "name": {"en": "Classic Tee"},
        "brand": "Acme",
        "categories": ["T-Shirts", "New In"],
        "base_price": 29.0,
        "base_discounted_price": 19.0,
        "currency": "EUR"
    },
    "variants": [
        {
            "sku": "TEE-M-BLK",
            "variant_name": "M / Black",
            "attributes": {"Size": "M", "Color": "Black"},
            "price": 29.0,
            "discounted_price": 19.0,
            "stock_status": "in_stock",
            "stock_quantity": null
        }
    ],
    "images": [{"source_url": "https://cdn.shopify.com/...", "position": 0}]
}
```

> **Honest stock:** availability (in/out of stock) is always included. Exact
> quantities are returned only when the store publishes them — otherwise
> `stock_quantity` is `null`, never a fake number. Enable **`stockDetail`** to
> recover numeric quantities on stores that expose them.

### Why use this Actor?

| | Generic Shopify scraper | Shopify Store Catalog Scraper |
|---|---|---|
| Extraction | HTML parsing, breaks on redesign | Native JSON endpoints, theme-proof |
| Variants | Often the parent only | Every variant, structured, priced |
| Sale prices | Rarely | `discounted_price` alongside regular |
| Speed | One request per product | ~5 requests per 1,000 products |
| Cost | Per-request + subscription | Pay-per-event, per product |

### What can you do with the data?

- 💰 **Competitor price & assortment tracking** — schedule runs and watch prices,
  sales and new arrivals over time.
- 🛒 **Catalog imports / reselling** — pull a supplier's full catalog with variants
  ready to load.
- 📊 **Market research** on niche Shopify brands.
- 🗄️ **Backup / migration** of your own store's catalog as portable JSON.

### How to use it

1. Create a free **Apify** account.
2. Open this Actor and paste the **store URL** (`https://the-store.com` or the
   `*.myshopify.com` handle).
3. Optionally cap **Max products** and set **`stockDetail`** if you need numeric
   stock.
4. Click **Start** and export the dataset as JSON / CSV / Excel.

### How much does it cost?

Pay-per-event: **$0.25 / 1,000 products** ($0.00025 each) — you're charged only for
products actually extracted. A typical 500-product store costs about **$0.13**. Rich
data (variants, per-variant stock and sale prices) at a fraction of what a generic
scraper charges.

**Cost tip:** cap **Max products** while testing; leave `stockDetail` on **Auto** so
the slow numeric-stock pass runs only on stores that actually publish quantities.

### Not a Shopify store?

Try our **Any E-commerce Store Catalog Scraper** — it auto-detects Shopify,
WooCommerce, PrestaShop and Magento, and handles custom-built stores via an AI agent.

### Fair use & compliance

- Respects `robots.txt` by default.
- Only **public catalog data** — no personal data, no accounts, no login walls.
- Polite rate limiting with automatic backoff.

### Support

Open an issue on this Actor — store-specific fixes usually ship within 24h.

# Actor input Schema

## `storeUrl` (type: `string`):

The Shopify store to scrape, e.g. https://my-shop.com or https://handle.myshopify.com.

## `maxProducts` (type: `integer`):

Stop after this many products (cost control). Leave empty for the full catalog.

## `stockDetail` (type: `string`):

Recover exact stock quantities via one extra request per product. 'Auto' probes a few products first and skips the slow pass when the shop doesn't publish quantities. Availability (in/out of stock) is ALWAYS included regardless.

## `respectRobotsTxt` (type: `boolean`):

Skip URLs disallowed by the store's robots.txt. Only disable this when the store owner has authorised the scrape.

## Actor input object example

```json
{
  "storeUrl": "https://",
  "stockDetail": "auto",
  "respectRobotsTxt": true
}
```

# Actor output Schema

## `products` (type: `string`):

All extracted products with their variants and images.

# 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 = {
    "storeUrl": "https://"
};

// Run the Actor and wait for it to finish
const run = await client.actor("itsyas/shopify-catalog-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 = { "storeUrl": "https://" }

# Run the Actor and wait for it to finish
run = client.actor("itsyas/shopify-catalog-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "storeUrl": "https://"
}' |
apify call itsyas/shopify-catalog-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=itsyas/shopify-catalog-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/vlITW84RZIjodt0rT/builds/yZWbSh9IccNLfjSgG/openapi.json
