Home / Tools / Shopify Scraper

E-commerce & reviews

Shopify Scraper

Scrape any Shopify store's products (prices, compare-at and discount %, variants, SKUs, stock, images, tags, dates) from its public JSON feed. Monitor mode compares with the previous run and returns only new, removed, price-changed and stock-changed products.

Run it on Apify API & MCP

Sample output

StoreProductPriceCompare atType
allbirds.comWomen's Allbirds Flip Flop - Dust…2550Shoes
allbirds.comMen's Canvas Runner NZ - Deep Nav…100–Shoes
allbirds.comWomen's Canvas Runner NZ - Deep N…100–Shoes

Real rows from the prefilled example run (Oct 19, 2026), 5 of 30+ fields shown. Export as JSON, CSV, Excel or HTML, or read them through the API.

Full JSON of one real output row (6 rows in the example dataset)
{
  "type": "product",
  "store": "allbirds.com",
  "storeName": "Allbirds",
  "storeUrl": "https://allbirds.com",
  "currency": "USD",
  "productId": 7340901859408,
  "title": "Women's Allbirds Flip Flop - Dusty Pink",
  "handle": "womens-allbirds-flip-flop-dusty-pink",
  "url": "https://allbirds.com/products/womens-allbirds-flip-flop-dusty-pink",
  "vendor": "Allbirds",
  "productType": "Shoes",
  "tags": [
    "allbirds::carbon-score => undefined",
    "allbirds::cfId => color-a4d5d0f6620dc304306f503bf67bc5f9",
    "allbirds::complete => true",
    "... 13 more"
  ],
  "createdAt": "2026-03-27T14:03:50-07:00",
  "updatedAt": "2026-10-19T03:00:04-07:00",
  "publishedAt": "2026-09-25T16:58:13-07:00",
  "price": 25,
  "priceMin": 25,
  "priceMax": 25,
  "compareAtPrice": 50,
  "discountPercent": 50,
  "onSale": true,
  "available": true,
  "variantsCount": 7,
  "availableVariantsCount": 1,
  "image": "https://cdn.shopify.com/s/files/1/1104/4168/files/A12513_26Q2_Allbirds-Flip-Flop-Dusty-Pink_PDP_LEFT.png?v=1774646345",
  "images": [
    "https://cdn.shopify.com/s/files/1/1104/4168/files/A12513_26Q2_Allbirds-Flip-Flop-Dusty-Pink_PDP_LEFT.png?v=1774646345",
    "https://cdn.shopify.com/s/files/1/1104/4168/files/A12513_26Q2_Allbirds-Flip-Flop-Dusty-Pink_PDP_BACK.png?v=1774646345",
    "https://cdn.shopify.com/s/files/1/1104/4168/files/A12513_26Q2_Allbirds-Flip-Flop-Dusty-Pink_PDP_TD.png?v=1774646346",
    "... 2 more"
  ],
  "options": [
    {
      "name": "Size",
      "values": [
        "5",
        "6",
        "7",
        "... 4 more"
      ]
    }
  ],
  "variants": [
    {
      "id": 42146889039952,
      "title": "5",
      "sku": "A12513W050",
      "price": 25,
      "compareAtPrice": 50,
      "available": false,
      "options": {
        "Size": "5"
      },
      "grams": 455,
      "requiresShipping": true
    },
    {
      "id": 42146889072720,
      "title": "6",
      "sku": "A12513W060",
      "price": 25,
      "compareAtPrice": 50,
      "available": false,
      "options": {
        "Size": "6"
      },
      "grams": 492,
      "requiresShipping": true
    },
    {
      "id": 42146889105488,
      "title": "7",
      "sku": "A12513W070",
      "price": 25,
      "compareAtPrice": 50,
      "available": false,
      "options": {
        "Size": "7"
      },
      "grams": 503,
      "requiresShipping": true
    },
    "... 4 more"
  ],
  "description": "Sun on your feet. Comfort underneath. Light, easy, and made for warm weather, these flip flops bring everyday comfort to sunny days, beach walks, and everything in between. Just slip them on and go.",
  "scrapedAt": "2026-10-19T10:00:04Z"
}

Output fields

From the Actor's dataset schema. Every row has the same flat shape, so it drops straight into a spreadsheet, a database or an agent's context.

FieldTypeDescription
typestringRow type: product, change (monitor mode) or error
storestringStore domain as given in the input
storeNamestringStore name
storeUrlstringStore base URL
currencystringStore currency code, e.g. USD
productIdinteger/stringShopify product ID
titlestringProduct title
handlestringProduct handle (URL slug)
urlstringProduct page URL
vendorstringBrand / vendor
productTypestringProduct type / category set by the store
tagsarrayProduct tags
createdAtstringWhen the product was created (ISO 8601)
updatedAtstringWhen the product was last updated (ISO 8601)
publishedAtstringWhen the product was published (ISO 8601)
pricenumberLowest variant price in the store currency
priceMinnumberLowest variant price
priceMaxnumberHighest variant price
compareAtPricenumberOriginal ("compare at") price of the most-discounted variant
discountPercentnumberLargest variant discount vs compare-at price, in %
onSalebooleanTrue when any variant is discounted
availablebooleanTrue when at least one variant is in stock
variantsCountintegerNumber of variants
availableVariantsCountintegerNumber of in-stock variants

Pricing

Pay per result, billed by Apify. No subscription and no minimum. Discount tiers apply automatically on paid Apify plans.

EventFree planBronzeSilverGold
Product result main
Charged once for each product successfully saved to the dataset.
$0.001$0.0009$0.0008$0.0008
Change result
Charged once for each product change row (new, removed, price, or stock) saved in monitor mode.
$0.003$0.0027$0.0024$0.0022
Actor start
Charged once when the Actor run starts.
$0.002$0.002$0.002$0.002

Examples on the Free plan: 100 product results = $0.10, 1,000 product results = $1, 10,000 product results = $10. Apify's Free plan includes $5 of monthly usage credit. Prices read from the Apify API at build time (2026-10-19).

Example input

This is the prefilled input on the Store page. Keep it and click Start to see real data in seconds.

{
  "stores": [
    "allbirds.com",
    "kyliecosmetics.com"
  ],
  "maxProductsPerStore": 20,
  "monitorMode": false,
  "outputProductsOnFirstRun": true,
  "monitorStoreName": "shopify-store-monitor",
  "includeInventory": false,
  "trackQuantityChanges": false,
  "includeDescription": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "requestDelaySecs": 1.0,
  "maxConcurrency": 5,
  "maxRetries": 6
}

Use it from code, no-code or an AI agent

cURL (one request, returns rows)
curl -X POST \
  "https://api.apify.com/v2/acts/wrenfield-data~shopify-store-scraper/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"stores": ["allbirds.com", "kyliecosmetics.com"], "maxProductsPerStore": 20, "monitorMode": false, "outputProductsOnFirstRun": true, "monitorStoreName": "shopify-store-monitor", "includeInventory": false, "trackQuantityChanges": false, "includeDescription": true, "proxyConfiguration": {"useApifyProxy": true}, "requestDelaySecs": 1.0, "maxConcurrency": 5, "maxRetries": 6}'
Python
# pip install apify-client
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("wrenfield-data/shopify-store-scraper").call(
    run_input={
    "stores": [
        "allbirds.com",
        "kyliecosmetics.com"
    ],
    "maxProductsPerStore": 20,
    "monitorMode": False,
    "outputProductsOnFirstRun": True,
    "monitorStoreName": "shopify-store-monitor",
    "includeInventory": False,
    "trackQuantityChanges": False,
    "includeDescription": True,
    "proxyConfiguration": {
        "useApifyProxy": True
    },
    "requestDelaySecs": 1.0,
    "maxConcurrency": 5,
    "maxRetries": 6
},
    max_total_charge_usd=1.00,  # hard cap for this run
)
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(row)
JavaScript / Node
// npm i apify-client
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('wrenfield-data/shopify-store-scraper').call({
  "stores": [
    "allbirds.com",
    "kyliecosmetics.com"
  ],
  "maxProductsPerStore": 20,
  "monitorMode": false,
  "outputProductsOnFirstRun": true,
  "monitorStoreName": "shopify-store-monitor",
  "includeInventory": false,
  "trackQuantityChanges": false,
  "includeDescription": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "requestDelaySecs": 1.0,
  "maxConcurrency": 5,
  "maxRetries": 6
}, { maxTotalChargeUsd: 1 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
MCP (Claude, Cursor, VS Code, any MCP client)
{
  "mcpServers": {
    "wrenfield-shopify-store-scraper": {
      "url": "https://mcp.apify.com?tools=wrenfield-data/shopify-store-scraper"
    }
  }
}

Remote MCP server hosted by Apify. Sign in with OAuth on first use, or send Authorization: Bearer <APIFY_TOKEN>. The tool appears as wrenfield-data--shopify-store-scraper. More client setups on the MCP page.

n8n, Make, Zapier

Use the official Apify node or app, pick Run Actor, enter wrenfield-data/shopify-store-scraper and paste the input JSON above. Then read the run's dataset items. Ready-made n8n workflows are on the n8n templates page.

FAQ

How much does Shopify Scraper cost?

$0.001 per product result on the Apify Free plan ($1 per 1,000), billed per result by Apify with no subscription. Plus $0.003 per change result. Plus $0.002 per actor start. Higher Apify plans get the discounted tiers shown in the pricing table. You can cap any run with a maximum cost.

Does it work on every Shopify store?

It works on stores that keep Shopify's public product feed on, which is the default and most stores. Stores that are password-protected or that block the feed get a free error row.

How many products can I get?

The whole public catalog. Shopify returns up to 250 products per page and the Actor pages through all of them.

Why is inventoryQuantity missing?

Most stores don't publish stock quantities; you still get available per variant. When a store does publish them, turn on Inventory quantities & barcodes.

Can I get the price in another currency or market?

You get the store's default currency (currency). For international storefronts on their own domain (e.g. uk.gymshark.com), add that domain.

Do I need a proxy?

No. Requests go directly to the store. The proxy setting is a fallback that is used only for stores that rate-limit (HTTP 429/430).

Can I use it from Make, Zapier, n8n, Python or an AI agent?

Yes. Use the Apify API, the Python/JavaScript clients, schedules and webhooks, any Apify integration or the Apify MCP server.

Related tools

Compare and plan

Try Shopify Scraper now

Open it on Apify, keep the prefilled example and click Start. The Apify Free plan includes $5 of monthly credit, no card needed.

Open on Apify