Shopify Store Scraper — All Products, Variants, Prices & Stock
Pricing
from $0.80 / 1,000 results
Shopify Store Scraper — All Products, Variants, Prices & Stock
Scrape any Shopify store's full catalogue: products, variants, SKUs, prices, compare-at prices, discounts, stock status, vendors, tags, images and descriptions. Collections, one row per variant, barcodes and stock counts, and a monitor mode for new products, price changes and sell-outs.
Pricing
from $0.80 / 1,000 results
Rating
0.0
(0)
Developer
Yugenox Corp
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Shopify Store Scraper: all products, variants, prices and stock
Scrape the whole catalogue of any Shopify store: every product with its title, vendor, product type, tags, all variants (size, colour …) with SKU, price, compare-at ("was") price, discount and stock status, images, description and dates. Read a whole store, only some collections, or a list of product URLs. Get one row per product (variants as a list) or one row per variant, add barcodes (UPC / EAN / GTIN) and stock quantities, and switch on monitor mode to get only what changed since the last run: new products, price changes, sales starting or ending, sell-outs, back in stock and removed products. No login, no cookies, no browser, no Shopify app or API key.
What you get
| Product | Product ID, title, handle, URL, vendor / brand, product type, tags, created / published / updated dates |
| Price | Price (cheapest variant on product rows), compare-at price, on sale, discount %, lowest and highest variant price, store currency |
| Stock | In stock, number of variants in stock; optional stock quantity per variant (where the store shows it) |
| Variants | Variant ID, title, SKU, price, compare-at price, in stock, options (size / colour / …), weight, requires shipping, variant image; optional barcode |
| Media and text | Main image, all image URLs, description as plain text and as the store's HTML |
| Monitor mode | Change type (new / changed / removed / unchanged), what changed in plain words, previous price, previous compare-at price, previously in stock |
How to use it
- Paste one or more stores into Shopify store URLs: a domain (
allbirds.com), a store URL, a collection URL (https://www.allbirds.com/collections/mens) or a product URL. Mix as many stores as you like. - Set Max products per store (0 = the whole catalogue) and run.
- Optional: One row per variant, Include stock quantity and barcode, Only these collections, Monitor mode.
Input examples
The first 10 products of a store (the quick test):
{"storeUrls": ["https://www.allbirds.com"],"maxProductsPerStore": 10}
Whole catalogues of several stores, one row per variant (SKU-level price list):
{"storeUrls": ["allbirds.com", "colourpop.com", "kyliecosmetics.com"],"maxProductsPerStore": 0,"outputPerVariant": true}
Daily competitor price and stock monitor: schedule it once a day and get only the changes:
{"storeUrls": ["allbirds.com"],"maxProductsPerStore": 0,"monitorMode": true}
Only the sale and new-arrivals collections, with barcodes and stock counts:
{"storeUrls": ["colourpop.com"],"collectionHandles": ["sale", "new"],"includeStockDetails": true}
Output example
One product row (trimmed: the variants list holds all 7 sizes, images all 5 images):
{"storeUrl": "https://www.allbirds.com","storeName": "Allbirds","productId": "7340901859408","title": "Women's Allbirds Flip Flop - Dusty Pink","handle": "womens-allbirds-flip-flop-dusty-pink","url": "https://www.allbirds.com/products/womens-allbirds-flip-flop-dusty-pink","vendor": "Allbirds","productType": "Shoes","tags": ["allbirds::edition => limited", "allbirds::gender => womens", "allbirds::material => sugar"],"price": 50,"compareAtPrice": null,"currency": "USD","onSale": false,"discountPercent": null,"available": true,"priceMin": 50,"priceMax": 50,"variantsCount": 7,"availableVariantsCount": 1,"options": [{ "name": "Size", "values": ["5", "6", "7", "8", "9", "10", "11"] }],"variants": [{ "variantId": "42146889039952", "title": "5", "sku": "A12513W050", "barcode": null, "price": 50, "compareAtPrice": null, "available": false, "option1": "5", "option2": null, "option3": null, "grams": 455, "inventoryQuantity": null, "requiresShipping": true, "imageUrl": null, "position": 1 }],"imageUrl": "https://cdn.shopify.com/s/files/1/1104/4168/files/A12513_26Q2_Allbirds-Flip-Flop-Dusty-Pink_PDP_LEFT.png?v=1774646345","imagesCount": 5,"description": "Sun on your feet. Comfort underneath. Light, easy, and made for warm weather, these flip flops bring everyday comfort to …","createdAt": "2026-03-27T14:03:50-07:00","publishedAt": "2026-09-25T16:58:13-07:00","updatedAt": "2026-10-28T21:46:59-07:00","collection": null,"source": "catalog","changeType": null,"scrapedAt": "2026-10-29T04:46:59.925Z"}
With Include stock quantity and barcode, every variant also gets barcode (e.g. "196942293089") and inventoryQuantity (e.g. 3750) where the store shows them. In monitor mode each saved row also says what changed (an illustration, trimmed):
{"title": "Women's Tree Dasher Relay - Blizzard","price": 67,"compareAtPrice": 135,"discountPercent": 50,"available": true,"changeType": "changed","changes": ["price 135.00 → 67.00", "compare-at price none → 135.00", "\"8\": sold out"],"previousPrice": 135,"previousCompareAtPrice": null,"previousAvailable": true}
Every row has the same columns; a value the store doesn't publish is null. The dataset has three views: Products, Variants and Changes.
Pricing
Pay per result, no subscription:
- $0.80 per 1,000 rows (a product, a variant row, or a change in monitor mode).
- Stock details: $0.30 per 1,000 products, only when you turn on Include stock quantity and barcode.
- Product checked (monitor mode only): $0.40 per 1,000 unchanged products, which are not saved.
- Actor start: $0.002 per run.
So the first 10 products of a store cost about $0.01, a 1,000-product catalogue $0.80, and a daily monitor of a 1,000-product store where 20 products changed about $0.41. Stores that refuse the requests, products that can't be read and rows over your limits are never charged. See the Pricing tab.
Use cases
- Competitor price monitoring: a daily monitor-mode run on your competitors' stores tells you every price change, new sale, new product and sell-out.
- Assortment and catalogue analysis: product types, vendors, tags, variant counts and price ranges of any DTC brand.
- Dropshipping and product research: find best-sellers' prices, discounts and stock, export SKU-level price lists.
- Shopify app and agency prospecting: see what a store sells, how big its catalogue is and how it is organised.
- MAP / price compliance for brands: check what resellers on Shopify charge for your products, by SKU or barcode.
Tips
- Monitor mode remembers the last run per store and per scope (whole store, a collection, a set of product URLs). Keep the input the same between scheduled runs. The first run saves everything as
new: that's the baseline. - One row per product is cheaper: all variants are in the
variantslist of the product row. Turn on One row per variant when you need a flat SKU list (each variant row counts as one result). - Stock quantities: many stores hide them;
inventoryQuantityis thennull. Barcodes are shown by most stores. - Product URLs (
…/products/<handle>) always come with barcode and stock quantity, at no extra charge. - Monitoring several very large stores (10,000+ products each) in one run? Give the run 1 GB of memory.
FAQ
Do I need a Shopify account, an API key or the store owner's permission? No. The scraper reads the same public product information any shopper's browser sees on the store. It never logs in, never adds anything to a cart and never touches checkout.
Which stores work? Any store running on Shopify, including stores on their own domain (most big DTC brands). For stores that hide their product list, the scraper reads the products one by one from the store's own sitemap and product pages; that's slower, but you get the same columns (tags and dates may be empty). Password-protected stores and stores that block automated visitors are skipped with a clear message and no charge.
How fast is it? A normal store gives 250 products per request (1–2 seconds), so a 5,000-product catalogue takes well under a minute. Three stores are read side by side. Stores that hide their product list are read at a few products per second.
Why do some rows have available: null or no compare-at price? The store doesn't publish that value. compareAtPrice is null when there is no "was" price.
What currency are the prices in? The store's own currency (currency column), as the store lists them for its main market.
Which proxy should I use? Keep the default (Apify Proxy, datacenter). It comes with every Apify plan, including the free one. If a store throttles datacenter IPs, the run retries that store's product data on residential proxies when your account has them, at no extra charge to you.
Is it legal to scrape Shopify stores? This Actor only collects publicly available data: the product information that every Shopify store shows to any visitor without an account, such as titles, prices, variants, stock status and images. Collecting publicly available data is generally legal, but you're responsible for how you use it, including the stores' terms and any copyright in their images and descriptions. The scraper follows each store's robots.txt and skips stores that refuse automated visitors. If you're unsure, check with a lawyer. More on this: Is web scraping legal?
Does it access any private data? No. It reads only public product data. It never logs in and never reads customer accounts, orders, carts, reviews or any information about people.
This Actor is not affiliated with, endorsed by or sponsored by Shopify or any of the stores mentioned.