# Shopify Store Scraper: Products, Prices, Stock & Sales (`juicy_fillet/shopify-store-scraper`) Actor

Export every product from any Shopify store: prices, sale discounts, variants, SKUs, stock status, images, tags and descriptions. Fast, cheap, no browser, no proxies. Track competitors and price drops.

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

## Pricing

from $0.80 / 1,000 results

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 Store Scraper: Products, Prices, Stock & Sales

Export **every product from any Shopify store**: title, price, compare-at (sale) price, discount %, variants with SKUs and stock status, images, tags, vendor, product type and description. Paste store URLs and get a clean spreadsheet in seconds.

It reads each store's own public product feed, the same one Shopify serves to every visitor's browser. There's no browser, no proxies and no login, so runs are **fast and very cheap**.

### What you get

- **Product catalogue:** every product, or only one collection (paste `https://store.com/collections/sale`).
- **Prices and discounts:** current price, compare-at price, `onSale` flag and `discountPercent`.
- **Stock status:** whether each product and each variant can be bought right now.
- **Variants:** sizes and colours with SKU, price, weight and availability (optionally one row per variant).
- **Media and metadata:** all image URLs, tags, vendor, product type, created, published and updated dates.
- **Store info:** store name and currency.

### What people use it for

- **Competitor price tracking:** schedule daily runs and spot price drops, new launches and sell-outs.
- **Dropshipping and e-commerce research:** see what a store sells, at what price, and what's out of stock (often a best-seller signal).
- **Catalogue migration:** move a store's products into a spreadsheet, another platform or your PIM.
- **Deal sites and affiliate content:** pull every item on sale with `onSaleOnly`.
- **Market research:** compare price points and assortments across brands.

### Input example

```json
{
  "stores": ["https://allbirds.com", "gymshark.com", "https://store.com/collections/sale"],
  "keywords": ["runner", "hoodie"],
  "inStockOnly": true,
  "onSaleOnly": false,
  "maxPrice": 150,
  "outputPerVariant": false,
  "maxItems": 1000
}
```

### Output example

```json
{
  "store": "https://allbirds.com",
  "storeName": "Allbirds",
  "currency": "USD",
  "productId": 7340901859408,
  "title": "Women's Allbirds Flip Flop - Dusty Pink",
  "url": "https://allbirds.com/products/womens-allbirds-flip-flop-dusty-pink",
  "vendor": "Allbirds",
  "productType": "Shoes",
  "price": 25.0,
  "compareAtPrice": 50.0,
  "onSale": true,
  "discountPercent": 50.0,
  "available": true,
  "variantsAvailable": 1,
  "variantsTotal": 7,
  "variants": [{"id": 42146889039952, "title": "5", "sku": "A12513W050", "price": 25.0, "compareAtPrice": 50.0, "available": false}],
  "image": "https://cdn.shopify.com/s/files/1/1104/4168/files/A12513_...png",
  "createdAt": "2026-03-27T14:03:50-07:00",
  "updatedAt": "2026-10-05T16:28:25-07:00"
}
```

A `SUMMARY` record in the run's key-value store shows how many products each store had and how many matched your filters.

### Pricing

Pay per result: **$0.80 per 1,000 products** (plus a tiny per-run start fee). With "One row per variant" on, you pay per variant row. Set **Max results** to cap your spend.

### FAQ

**Does it work on every Shopify store?** It works on stores that keep Shopify's standard public product feed switched on, which is the large majority. A few big stores turn it off or rate-limit it. Those are listed in the `SUMMARY` with an error.

**Do I get real stock counts?** Shopify's public feed says whether each variant is purchasable, not how many units are left.

**How do I track price changes?** Schedule the actor daily and compare runs, or send each run to Google Sheets with the integrations below.

### Use it with n8n, Make or Zapier

Schedule the actor in Apify, then use the Apify integration in n8n, Make or Zapier to push products into Google Sheets, Airtable or Slack price-drop alerts.

### More scrapers from this developer

- [Company Jobs Scraper](https://apify.com/juicy_fillet/ats-jobs-scraper): every open job from Greenhouse, Lever, Ashby and more
- [App Store Reviews](https://apify.com/juicy_fillet/app-store-reviews): Apple App Store reviews for any app and country
- [Bluesky Scraper](https://apify.com/juicy_fillet/bluesky-scraper) · [SEC Form D Funding](https://apify.com/juicy_fillet/sec-form-d-funding)

# Actor input Schema

## `stores` (type: `array`):

Shopify store URLs or domains, one per line, e.g. 'https://allbirds.com' or 'gymshark.com'. Add a collection URL like 'https://store.com/collections/sale' to scrape only that collection.

## `keywords` (type: `array`):

Keep only products whose title, vendor, type or tags contain one of these words. Leave empty for all products.

## `inStockOnly` (type: `boolean`):

Keep only products (and variants) that can be bought right now.

## `onSaleOnly` (type: `boolean`):

Keep only products with a compare-at price above the current price (discounted items).

## `minPrice` (type: `integer`):

Keep only products priced at or above this amount (store currency).

## `maxPrice` (type: `integer`):

Keep only products priced at or below this amount (store currency).

## `outputPerVariant` (type: `boolean`):

Output one row per size/color variant (with SKU, price and stock) instead of one row per product. You pay per row.

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

Add the product description as plain text.

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

Stop after this many matching products per store. 0 or empty means no limit.

## `maxItems` (type: `integer`):

Stop after this many rows in total. You only pay for rows you get.

## Actor input object example

```json
{
  "stores": [
    "https://allbirds.com"
  ],
  "inStockOnly": false,
  "onSaleOnly": false,
  "outputPerVariant": false,
  "includeDescription": true,
  "maxItems": 1000
}
```

# Actor output Schema

## `results` (type: `string`):

All results saved by this run, in the default dataset.

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

// Run the Actor and wait for it to finish
const run = await client.actor("juicy_fillet/shopify-store-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 = { "stores": ["https://allbirds.com"] }

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,juicy_fillet/shopify-store-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/2Mg8Z9FofvwWGW3gg/builds/5IFY3zdgWu3PtjLBS/openapi.json
