# Shopify Products Scraper — Full Store Catalogs (`darknezz/shopify-products-scraper`) Actor

Scrape any Shopify store's complete product catalog without API keys: titles, prices, variants, SKUs, images, tags and availability as clean JSON. Ideal for price monitoring, dropshipping and competitor research.

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

## Pricing

from $1.00 / 1,000 product scrapeds

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 Products Scraper — Full Store Catalogs

Scrape the **complete product catalog of any Shopify store** — no API key, no login, no proxy. Just paste store URLs and get clean, structured JSON.

### What it does

- Works on **any Shopify-powered store** (millions of them: fashion, beauty, electronics, supplements…)
- Extracts titles, descriptions, vendors, product types and tags
- Full **variant data**: SKU, price, compare-at price, stock availability, weight
- All **product images**
- Price range per product (`priceMin` / `priceMax`) and in-stock flag
- Handles pagination automatically (up to 100,000 products per store)
- **Resilient fetching** — browser-grade TLS fingerprinting rides through the bot walls that block plain HTTP scrapers (added Jul 2026)

### Use cases

- **Price monitoring** — track competitor pricing and discounts over time (run it daily on a Schedule)
- **Dropshipping research** — find winning products and suppliers
- **Competitor analysis** — full catalog snapshots of any store in your niche
- **Market research** — assortment breadth, price positioning, stock levels
- **Feed generation** — build product feeds for ads or affiliate sites

### Input

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

| Field | Type | Default | Description |
|---|---|---|---|
| `storeUrls` | array | *required* | Store domains or URLs — bare domain, homepage, or any deep link; the store is resolved automatically |
| `maxProductsPerStore` | integer | 100 | Cap per store, up to 100,000 |

### Output

One dataset item per product:

```json
{
  "storeDomain": "allbirds.com",
  "productId": 7292464955472,
  "title": "Men's Cruiser - Shadow Blue",
  "productUrl": "https://allbirds.com/products/mens-cruiser-shadow-blue",
  "vendor": "Allbirds",
  "productType": "Shoes",
  "tags": ["mens", "sneakers"],
  "priceMin": 120.0,
  "priceMax": 120.0,
  "available": true,
  "variantCount": 14,
  "variants": [{"sku": "A11449M080", "price": 120.0, "compareAtPrice": null, "available": true}],
  "imageUrls": ["https://cdn.shopify.com/..."],
  "createdAt": "2024-08-28T10:00:00-07:00"
}
```

Every run's dataset exports as JSON, CSV, Excel or XML from Apify Console or the API.

### Run it on a schedule or from your code

Point a Schedule at your competitor list for daily price snapshots, or call it from anywhere:

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

The call returns the products directly as JSON — ideal for piping into a price tracker, spreadsheet, or LLM pipeline.

### Pricing

Pay-per-event: **$0.001 per product scraped**, plus Apify's standard compute. A full 1,000-product catalog snapshot costs about $1 in event fees.

### FAQ

**How do I find out if a store runs on Shopify?** Just try it — if the domain isn't a Shopify storefront the Actor logs it and moves on. (Checkout on `myshopify.com`, `cdn.shopify.com` assets, or a `/products.json` endpoint are the usual tells.)

**Does it get sales numbers or product costs?** No — those are private to the merchant. Everything public in the catalog (prices, variants, stock flags, images) is extracted.

**What about collections or a single product?** Paste any URL from the store — the Actor resolves the store and scrapes its catalog; use `maxProductsPerStore` to bound the run.

**Which currency are prices in?** The store's default storefront currency, exactly as the shop publishes it.

**Can a store block scraping?** A small minority disable the public catalog endpoint or password-protect the storefront — those stores are logged and skipped, never failing your whole run. Anti-bot walls (Cloudflare and similar) are handled by the browser-fingerprint fetcher.

**How fresh is the data?** Scraped live at run time. Schedule daily or hourly runs for time-series price tracking.

# Actor input Schema

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

Shopify store domains or URLs (e.g. 'allbirds.com', 'https://colourpop.com'). Any store on Shopify works — no API key needed.

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

Maximum number of products to scrape per store.

## Actor input object example

```json
{
  "storeUrls": [
    "allbirds.com",
    "colourpop.com"
  ],
  "maxProductsPerStore": 100
}
```

# 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": [
        "allbirds.com",
        "colourpop.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("darknezz/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": [
        "allbirds.com",
        "colourpop.com",
    ] }

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

```

## MCP server setup

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

```

## OpenAPI specification

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