Shopify Store Scraper: Products, Prices, Stock & Changes avatar

Shopify Store Scraper: Products, Prices, Stock & Changes

Pricing

from $0.50 / 1,000 products

Go to Apify Store
Shopify Store Scraper: Products, Prices, Stock & Changes

Shopify Store Scraper: Products, Prices, Stock & Changes

Scrape the full product catalog of any Shopify store, even past Shopify's 25,000-product limit: variants, prices, compare-at prices, availability, stock counts, images. Changes only mode returns new products, price drops and restocks since the last run. Plain HTTP, no proxy needed.

Pricing

from $0.50 / 1,000 products

Rating

0.0

(0)

Developer

Alexis Morain

Alexis Morain

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

What does Shopify Store Scraper do?

Shopify Store Scraper exports the full product catalog of any Shopify store: every product with its variants, prices, compare-at prices, availability, SKUs, images, tags and description, plus stock counts per variant when the store publishes them. Give it one domain or a thousand. It works as a Shopify products API without an API key, a login or a browser.

It also reads what other Shopify scrapers miss. Shopify's public products feed (/products.json) stops at 25,000 products and answers Page * Limit exceeds the 25000 limit past that point. On a large store, a scraper that only reads the feed returns the first 25,000 products and stops without telling you. This Actor detects the cap, lists every product from the store's sitemap and reads the missing ones one by one, so the catalog comes out whole.

Store (measured 17 to 19 Oct 2026)Products in the sitemapRead by /products.jsonLost by a feed-only scraper
jbhifi.com.au103,94325,00076%
windsorstore.com51,65925,00052%
kith.com34,68725,00028%
culturekings.com.au32,13125,00022%

On kith.com this Actor returned 34,982 products in one run: 25,000 from the feed and 9,982 from the sitemap.

Why use Shopify Store Scraper?

Competitor price monitoring. Switch Mode to Changes only, schedule a daily run and get only what moved since the last one: new products, price drops and increases, compare-at price changes, back in stock, out of stock, variants added or removed, and removed products. Each change comes with its before and after values. Quiet days cost little more than the start fee.

Catalog research and product sourcing. Export a brand's whole range with prices and options to compare assortments, spot discounts (onSale, maxDiscountPercent) or import products into a spreadsheet.

Stock tracking. About a third of Shopify stores publish exact stock per variant on their product pages. Turn on Include stock, barcode and weight to read it, with the barcode (GTIN, EAN, UPC) for matching products across stores.

What you get on top of the data:

  • whole stores, single collections or single product URLs, custom domains and .myshopify.com addresses;
  • a clear status per store when a site is not a Shopify store, is password protected or has closed its feed, instead of a silent empty result;
  • a webhook called at the end of the run, for Slack, Discord, Make, Zapier or your own endpoint;
  • Apify scheduling, API access, integrations and proxy rotation.

What data can Shopify Store Scraper extract?

FieldDescription
title, handle, urlProduct name, handle and page
vendor, productType, tagsBrand, type and tags set by the store
priceMin, priceMax, currencyPrice range across variants, in the store currency
compareAtPriceMax, onSale, maxDiscountPercentCrossed-out price and discount
available, availableVariantsCountWhether the product and how many variants can be bought
totalInventorySum of published stock counts (null when the store publishes none)
variantsEach variant: variantId, sku, barcode, price, compareAtPrice, available, inventoryQuantity, options, weight, image
options, images, descriptionOptions with their values, image URLs, plain text description
createdAt, publishedAt, updatedAtProduct dates
changeType, changesIn Changes only mode: new, changed or removed, and the list of changes

How to scrape a Shopify store

  1. Open the Input tab and type one or more store domains, for example allbirds.com.
  2. Leave Max products per store at 0 for the whole catalog, or set a number for a quick test.
  3. Press Start.
  4. Download the products from the Output tab as JSON, CSV, Excel or HTML, or read them through the API.

To monitor prices, set Mode to Changes only, run it once to record the snapshot, then schedule it (daily is typical).

How much does it cost to scrape a Shopify store?

You pay per product returned, plus a small start fee.

EventFree planBronzeSilverGold and above
Product, per 1,000$1.00$0.85$0.70$0.50
Detailed product (stock, barcode), per 1,000$2.00$1.70$1.40$1.00
Actor start$0.002$0.002$0.002$0.002

A 1,000-product store costs about $1.00 on the Free plan. The 35,000-product Kith catalog costs about $35 on the Free plan and $17.50 on Gold. In Changes only mode you pay only for the products that changed, and the first run, which records the snapshot, charges nothing beyond the start. Sites that are not Shopify stores and products read twice through overlapping collections are never charged.

Input

See the Input tab for every option. The fields that matter:

  • Stores, collections or products: one per line. A domain reads the whole store, a /collections/<handle> URL reads one collection, a /products/<handle> URL reads one product with its stock.
  • Mode: Full catalog, or Changes only.
  • Max products per store: 0 for everything.
  • Include stock, barcode and weight: one extra request per product.
  • Webhook URL: called once at the end of a run that returned at least one product.
{
"stores": ["allbirds.com", "https://kith.com/collections/mens"],
"mode": "catalog",
"maxProductsPerStore": 0,
"includeDetails": false
}

Output

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel. One item per product:

{
"storeDomain": "allbirds.com",
"storeName": "Allbirds",
"currency": "USD",
"productId": 6987654321098,
"title": "Men's Tree Runners",
"url": "https://allbirds.com/products/mens-tree-runners",
"vendor": "Allbirds",
"productType": "Shoes",
"priceMin": 98.0,
"priceMax": 98.0,
"compareAtPriceMax": 120.0,
"onSale": true,
"maxDiscountPercent": 18,
"available": true,
"variantsCount": 8,
"availableVariantsCount": 6,
"totalInventory": 142,
"variants": [
{"variantId": 40123456789012, "title": "10", "sku": "TR-M-10", "price": 98.0,
"compareAtPrice": 120.0, "available": true, "inventoryQuantity": 25}
],
"source": "products-feed",
"changeType": null,
"changes": []
}

In Changes only mode, a changed product carries its changes:

{
"changeType": "changed",
"title": "Example Lip Gloss",
"changes": [
{"type": "price-drop", "variantId": 40123456789099, "variantTitle": "Default Title",
"before": 14.0, "after": 11.0}
]
}

The SUMMARY record of the run's key-value store gives one line per store: status, products read, products read beyond 25,000, and whether the catalog was read completely.

Tips and advanced options

  • Changes only needs whole catalogs. A product is reported new or removed only after a run has read the store to the end, so keep Max products per store at 0 for monitoring. A run cut short never reports products as removed.
  • Stock moves with every sale. With details on, each sale changes inventoryQuantity and comes back as a change. Leave details off if you only watch prices and availability.
  • Several monitors on one store. Give each one its own Monitor name.
  • Large stores take longer, not more per product. Reading past 25,000 goes through product pages, about 10 per second over Apify proxy IPs: 10,000 extra products take about 16 minutes.

FAQ, disclaimers and support

This Actor reads the public product data that Shopify stores publish for their own storefronts. Our Actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our Actors, when used for ethical purposes by Apify users, are safe. However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

Why does a store return nothing?

The SUMMARY record says why: not-shopify (a headless storefront or another platform), password-protected (a store before launch), products-hidden (the store closed its public feed and product pages), or blocked. None of these is charged.

Does it work with headless Shopify stores?

Often. Some brands run a headless front on www. and keep the Shopify storefront on the bare domain (Fashion Nova does). The Actor tries the address you gave, then the domain without www., then the .myshopify.com address.

How do I call it from my code?

Use the API tab for ready-made examples in Python, JavaScript and cURL, or the Apify integrations for Make, Zapier, n8n and Google Sheets.

Something wrong or missing? Open an issue in the Issues tab and it gets fixed.