Shopify Store Scraper - Products, Prices, Stock & Store Leads

Scrape any Shopify store: full product catalog with prices, discounts, variants, SKUs and stock, plus store profile (location, currency, theme, apps, emails, socials). Monitor mode returns only new products, price drops and stock changes. No API key.

Guide: AliExpress product research

Shopify Store Scraper - Products, Prices, Stock & Store Leads

Scrape any public Shopify store in seconds: the full product catalog with prices, compare-at prices, discounts, variants, SKUs and stock, plus a store profile for lead lists (location, currency, product count, ships-to countries, theme, detected apps, public emails and social links).

Turn on Monitor mode and schedule it: each run returns only what changed (new products, price drops, sales starting or ending, back-in-stock, out-of-stock and removed products).

No API key, no login, no browser. Fast and cheap.

What you can do with it

  • Competitor price monitoring: track a rival's prices, discounts and stock every day.
  • Product research and dropshipping: pull whole catalogs, vendors, product types and tags.
  • Shopify store leads: check a list of domains and get the store profile, the apps it uses (Klaviyo, Judge.me, Recharge, Gorgias, Attentive...), emails and socials. Useful for agencies and Shopify app vendors.
  • Back-in-stock and sale alerts: combine Monitor mode with a schedule and a webhook, Slack, email or Make/Zapier.
  • AI agents (ChatGPT, Claude, Cursor via Apify MCP): "What's on sale at colourpop.com right now?" Results are compact by default.

Input

Field Description
storeUrls Domains or URLs. Accepts allbirds.com, a store URL, a collection URL (/collections/sale) or a product URL (/products/handle).
maxProductsPerStore Cap per store (default 100). 0 = whole catalog.
includeProducts Scrape products (default on).
includeStoreProfile Add one store/lead row per store (default on).
onlyChanges Monitor mode: only changes since the last run.
includeDescription Add product descriptions as plain text (default off).
oneRowPerVariant One row per size/colour variant instead of a nested list.

Example:

{
  "storeUrls": ["allbirds.com", "https://colourpop.com/collections/lips"],
  "maxProductsPerStore": 50,
  "onlyChanges": false
}

Output

Product row

{
  "resultType": "product",
  "store": "allbirds.com",
  "storeName": "Allbirds",
  "title": "Men's Tree Runner - Jet Black (White Sole)",
  "url": "https://allbirds.com/products/mens-tree-runners",
  "vendor": "Allbirds",
  "productType": "Shoes",
  "price": 100.0,
  "compareAtPrice": null,
  "onSale": false,
  "discountPercent": null,
  "currency": "USD",
  "available": true,
  "variantsCount": 12,
  "variantsAvailable": 9,
  "variants": [{ "title": "8", "sku": "TR3MJBW080", "price": 100.0, "available": true }],
  "image": "https://cdn.shopify.com/...",
  "publishedAt": "2025-03-01T10:00:00-08:00"
}

In Monitor mode each row also has changeTypes (new, price_drop, price_increase, sale_started, sale_ended, back_in_stock, out_of_stock, removed), plus previousPrice and previousAvailable.

Store profile row

{
  "resultType": "store",
  "store": "colourpop.com",
  "name": "ColourPop",
  "city": "Oxnard",
  "country": "US",
  "currency": "USD",
  "productsCount": 1063,
  "shipsToCountriesCount": 180,
  "theme": { "name": "Colourpop/Main", "schemaName": "Colourpop" },
  "apps": ["Klaviyo", "Yotpo", "Okendo", "Gorgias", "Attentive", "Klarna"],
  "emails": [],
  "socials": { "instagram": "https://instagram.com/colourpopcosmetics", "tiktok": "https://www.tiktok.com/@colourpopco" }
}

Domains that aren't Shopify stores, or whose catalog is disabled, return a free error row, so you can also use this to check which domains run Shopify.

How Monitor mode works

The Actor saves a snapshot per store (or per collection) in a named key-value store, shopify-store-monitor. The first run returns every product as new. Later runs return only the differences. Removed products are detected when the whole catalog or collection was fetched (maxProductsPerStore: 0, or fewer products than the cap). Schedule it daily in Apify Schedules and connect a webhook or integration for alerts.

Use it from ChatGPT, Claude & AI agents

This Actor works as a tool for AI assistants through the Apify MCP server, and the inputs are designed so an agent can fill them in.

  • Claude (claude.ai / Desktop), ChatGPT, Cursor, VS Code, Windsurf: add the MCP server URL below as a custom connector / MCP server and sign in with your Apify account:

    https://mcp.apify.com/?tools=get_anything/shopify-store-scraper
    
  • Claude Desktop / Cursor config file:

    { "mcpServers": { "apify": { "url": "https://mcp.apify.com/?tools=get_anything/shopify-store-scraper" } } }
    
  • Any LLM framework or GPT Action (REST): one call runs the Actor and returns the results as JSON:

    POST https://api.apify.com/v2/acts/get_anything~shopify-store-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN
    
  • No-code: Make, Zapier, n8n, LangChain and LlamaIndex have Apify integrations.

Then just ask, for example: "What's on sale at allbirds.com right now, and which apps does the store use?"

Pricing

Pay per event: you pay per product row and per store profile. Non-Shopify domains are free. See the Pricing tab for current prices.

FAQ

Does it work on every Shopify store? It works on any store that serves the standard public /products.json feed, which is almost all of them. A few stores disable it, and you'll get a clear error row.

Do I need a proxy? Usually not. For very large or frequent runs you can enable Apify Proxy.

Is it legal? It reads only public storefront data that Shopify serves to every visitor. Don't use it to collect personal data beyond public business contacts, and follow the store's terms.

Related scrapers