# Shopify Product Scraper (`seeb/shopify-product-scraper`) Actor

Extract clean Shopify product data from one or multiple stores using Shopify’s public products.json feed. Get product names, prices, availability, images, and variants with pagination controls for full catalogs, competitor research, and ecommerce monitoring.

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

## Pricing

from $10.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 Product Scraper

Extract clean, structured product data from Shopify stores in minutes.

This Actor is built for users who need fast Shopify product collection without manually opening product pages or dealing with changing website layouts. It uses Shopify’s public `/products.json` endpoint to collect product names, prices, availability, images, and variant-level data from one or multiple Shopify stores.

---

### What This Actor Does

The Shopify Product Scraper helps you collect product catalog data from Shopify-based ecommerce websites.

It is useful for:

- Competitor product research
- Ecommerce market analysis
- Product catalog collection
- Price and availability monitoring
- Variant-level product tracking
- Bulk Shopify store scraping
- Automation and data enrichment workflows

---

### Key Features

- Scrape one or multiple Shopify stores in a single run
- Automatically detects and uses Shopify’s `/products.json` endpoint
- Supports full catalog scraping
- Pagination control with `maxPages`
- Product-per-page control with `maxProductsPerPage`
- Extracts product names, prices, images, availability, and variants
- Outputs clean structured JSON data
- Lightweight, fast, and automation-ready
- No need to manually enter `/products.json`

---

### Data Extracted

For each product, the Actor extracts:

| Field | Description |
|---|---|
| `product_name` | Product title/name |
| `price` | Product price from the first available variant |
| `availability` | Product availability status |
| `currency` | Currency value used in output |
| `images` | Product image URLs |
| `variants` | Variant ID, title, price, and availability |

---

### How It Works

You only need to enter the Shopify store homepage URL.

For example:

- `https://www.allbirds.com`
- `https://www.colourpop.com`
- `https://www.nativecos.com`

The Actor automatically converts the store URL into Shopify’s product feed format and fetches product data page by page.

Example internal request:

`https://store.com/products.json?limit=250&page=1`

This approach is faster and more stable than scraping HTML pages because the data is already available in structured JSON format.

---

### Input Configuration

#### `startUrls`

Enter one or more Shopify store homepage URLs.

Example:

- `https://www.allbirds.com`
- `https://www.colourpop.com`
- `https://www.nativecos.com`

You do not need to add `/products.json`. The Actor handles that automatically.

---

#### `maxPages`

Controls how many product pages are fetched per store.

| Value | Behavior |
|---|---|
| `0` | Scrape all available pages |
| `1` | Scrape only the first product page |
| `2` | Scrape the first two product pages |
| Any positive number | Scrape up to that number of pages |

Use `0` when you want to collect the full catalog.

---

#### `maxProductsPerPage`

Controls how many products are extracted from each product page.

| Value | Behavior |
|---|---|
| `0` | Extract all products from each page |
| `10` | Extract up to 10 products per page |
| Any positive number | Limit products per page |

Use this option when you want to test the Actor or collect a smaller sample.

---

### Example Input

{
  "startUrls": [
    {
      "url": "https://www.allbirds.com"
    },
    {
      "url": "https://www.nativecos.com"
    }
  ],
  "maxPages": 2,
  "maxProductsPerPage": 10
}

---

### Example Behavior

If you enter:

- `startUrls`: 2 Shopify stores
- `maxPages`: 2
- `maxProductsPerPage`: 10

The Actor will:

- Scrape 2 pages from Store 1
- Scrape 2 pages from Store 2
- Extract up to 10 products from each page
- Save all products into the Apify dataset

If both `maxPages` and `maxProductsPerPage` are set to `0`, the Actor will scrape all available products from each store.

---

### Example Output

{
  "product_name": "Men's Wool Runner",
  "price": 98,
  "availability": true,
  "currency": "USD",
  "images": [
    "https://cdn.shopify.com/example/product-image.jpg"
  ],
  "variants": [
    {
      "variant_id": 123456789,
      "title": "Black / Size 10",
      "price": 98,
      "available": true
    }
  ]
}

---

### Output

All extracted products are saved to the default Apify Dataset.

The dataset can be used for:

- Downloading JSON, CSV, Excel, or XML files
- Connecting with automation tools
- Sending data to databases
- Building ecommerce intelligence dashboards
- Running product monitoring workflows

---

### Best Use Cases

#### Competitor Research

Collect product names, prices, availability, and variants from competitor Shopify stores.

#### Ecommerce Monitoring

Track product availability, catalog changes, and pricing updates over time.

#### Product Catalog Collection

Extract complete Shopify product catalogs for analysis, enrichment, or internal review.

#### Market Analysis

Compare pricing, product variety, and availability across multiple Shopify stores.

#### Automation Workflows

Use the structured dataset inside Apify integrations, APIs, dashboards, or external tools.

---

### Limitations

This Actor works with Shopify stores that expose product data through the public `/products.json` endpoint.

Some stores may block or restrict access due to:

- Cloudflare protection
- Bot protection
- Geo-restrictions
- Disabled or restricted product feeds
- Custom Shopify configurations

If a store blocks access to `/products.json`, the Actor will skip it and log a warning.

---

### Notes

- This Actor is designed for Shopify-based websites.
- Non-Shopify websites are not supported.
- Enter only store homepage URLs.
- Use `maxPages = 0` to scrape all available pages.
- Use `maxProductsPerPage = 0` to extract all products from each page.
- Results depend on the product data exposed by the Shopify store.

---

### Why Use This Actor?

Shopify Product Scraper is a fast and reliable way to collect structured product data from Shopify stores without building and maintaining custom scrapers.

It is ideal for ecommerce teams, data analysts, agencies, marketplace researchers, and automation builders who need clean Shopify product data at scale.

# Actor input Schema

## `startUrls` (type: `array`):

Enter one or more Shopify store URLs (homepage URLs).
## `maxPages` (type: `integer`):

Number of product pages to fetch per store. Use 0 to scrape all pages.
## `maxProductsPerPage` (type: `integer`):

Maximum products to extract from each page. Use 0 to extract all products from each page.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.allbirds.com"
    }
  ],
  "maxPages": 0,
  "maxProductsPerPage": 0
}
````

# Actor output Schema

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

Link to the dataset containing scraped Shopify products.

# 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 = {};

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

# Run the Actor and wait for it to finish
run = client.actor("seeb/shopify-product-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 '{}' |
apify call seeb/shopify-product-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Shopify Product Scraper",
        "description": "Extract clean Shopify product data from one or multiple stores using Shopify’s public products.json feed. Get product names, prices, availability, images, and variants with pagination controls for full catalogs, competitor research, and ecommerce monitoring.",
        "version": "0.0",
        "x-build-id": "bS6QeIq6shaVL5NsY"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/seeb~shopify-product-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-seeb-shopify-product-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/seeb~shopify-product-scraper/runs": {
            "post": {
                "operationId": "runs-sync-seeb-shopify-product-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/seeb~shopify-product-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-seeb-shopify-product-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "startUrls"
                ],
                "properties": {
                    "startUrls": {
                        "title": "Store URLs",
                        "type": "array",
                        "description": "Enter one or more Shopify store URLs (homepage URLs).",
                        "items": {
                            "type": "object",
                            "properties": {
                                "url": {
                                    "title": "Store URL",
                                    "type": "string",
                                    "description": "Shopify store homepage URL",
                                    "pattern": "^https?://.*"
                                }
                            },
                            "required": [
                                "url"
                            ]
                        },
                        "default": [
                            {
                                "url": "https://www.allbirds.com"
                            }
                        ]
                    },
                    "maxPages": {
                        "title": "Max Pages to Fetch",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Number of product pages to fetch per store. Use 0 to scrape all pages.",
                        "default": 0
                    },
                    "maxProductsPerPage": {
                        "title": "Max Products Per Page",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum products to extract from each page. Use 0 to extract all products from each page.",
                        "default": 0
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
