Shopify Store Scraper - Products, Variants, Prices & Stock
Pricing
from $2.00 / 1,000 store scrapeds
Shopify Store Scraper - Products, Variants, Prices & Stock
Export any Shopify store's full catalogue in one run: products, variants, SKUs, prices, compare-at prices, stock flags, tags and images. One row per product or per variant. Uses the store's own public endpoint, no API key. Ideal for price and inventory feeds.
Pricing
from $2.00 / 1,000 store scrapeds
Rating
0.0
(0)
Developer
mohamed alaya
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
18 days ago
Last modified
Categories
Share
Shopify Store Scraper - Products, Variants, Prices, Discounts & Stock
Export the full catalogue of any Shopify store (Allbirds, Gymshark, Stanley, Kylie Cosmetics, SKIMS, Brooklinen and any other Shopify storefront) in one run: every product, every size/colour variant, SKU, price, compare-at price, discount percent, in-stock flag, vendor, tags and images. No API key, no login, no browser.
It reads the store's own public endpoints (/products.json and /meta.json) - the same ones the
storefront itself uses - so it is fast: a 250-product store takes about a second.
Who uses this
- Dropshippers and resellers: find what a competitor sells, at what price, and what is on sale.
- Price-monitoring and repricing tools: one row per variant with SKU, price and stock, run on a schedule.
- Market researchers: catalogue size, price bands, vendors and product types of any DTC brand.
- Agencies and marketplaces: bulk-import a brand's catalogue (titles, images, descriptions, variants).
What you get
One row per product (default) or per variant (expandVariants).
| Group | Fields |
|---|---|
| Store | store · storeName · currency (from the store's /meta.json) |
| Product | id · handle · title · url · vendor · productType · tags[] · description (plain text) · publishedAt · createdAt · updatedAt |
| Images / options | images[] · imageCount · featuredImage · optionNames[] · options[] (name + all values) |
| Variants | variants[] with id · title · sku · price · compareAtPrice · discountPercent · available · option1-3 · grams · image · requiresShipping · taxable · timestamps |
| Price summary | minPrice · maxPrice · minCompareAtPrice · onSale · maxDiscountPercent |
| Stock | inStock · availableVariants · variantCount |
| Meta | source (products.json or sitemap+jsonld) · scrapedAt · type (product, variant or error) |
Sample row (product mode)
{"type": "product","store": "https://www.allbirds.com","storeName": "Allbirds","currency": "USD","id": "7340901859408","handle": "womens-allbirds-flip-flop-dusty-pink","title": "Women's Allbirds Flip Flop - Dusty Pink","url": "https://www.allbirds.com/products/womens-allbirds-flip-flop-dusty-pink","vendor": "Allbirds","productType": "Shoes","optionNames": ["Size"],"variantCount": 7,"minPrice": 25, "maxPrice": 25, "minCompareAtPrice": 50,"onSale": true, "maxDiscountPercent": 50,"inStock": true, "availableVariants": 1,"variants": [{ "id": "42146889039952", "title": "5", "sku": "A12513W050", "price": 25, "compareAtPrice": 50, "discountPercent": 50, "available": false }],"source": "products.json"}
Sample row (expandVariants)
{"type": "variant","store": "https://www.stanley1913.com","currency": "USD","productTitle": "The Quencher ProTour Flip Straw Tumbler | 40 OZ","variantTitle": "Soft Orchid","sku": "100000144469","price": 33.75, "compareAtPrice": 45, "discountPercent": 25,"available": true,"option1": "Soft Orchid"}
Input
| Field | What it does |
|---|---|
stores | Bare domains, store URLs, collection URLs (https://store.com/collections/mens-shoes) or single product URLs. Mix freely. |
collection | Limit all stores to one collection handle (all, mens-shoes). |
maxProductsPerStore | Cap on products returned per store (after filters). Up to 10,000 products are scanned per store. |
expandVariants | One row per variant - best for price/inventory feeds. |
inStockOnly / onSaleOnly | Skip sold-out products / keep only discounted ones. |
minPrice / maxPrice | Lowest-variant price range in the store currency (0 = no limit). |
vendorFilter / productTypeFilter | Exact (case-insensitive) match. |
keywords | Keep products mentioning any of these words in title, description, tags, vendor or type. |
updatedSince | Only products changed since a date, e.g. 2026-09-01. Good for daily change feeds. |
includeDescription | Turn off for a smaller dataset. |
sitemapFallback | Read stores that disabled /products.json from their sitemap (see below). |
concurrency, proxyConfiguration | Parallel stores; optional proxy. |
Example - discounted in-stock tumblers from two stores, one row per variant:
{"stores": ["https://www.stanley1913.com/collections/tumblers", "colourpop.com"],"expandVariants": true,"onSaleOnly": true,"inStockOnly": true,"maxProductsPerStore": 100}
An empty input {} runs a small default sample (Allbirds, 250 products) so you can see the output format.
Pricing
Pay per event: a small fee per store that returned data (store-scraped) and per row delivered
(product-scraped). Stores that fail or return nothing are never charged, and the run stops
cleanly if you hit your maximum charge limit.
Reliability and limits (honest notes)
- Per-store errors never fail the run. A store that is unreachable, is not Shopify, or blocks us
becomes a
type: "error"row (not charged) with the reason, and every other store carries on. The run summary (SUMMARYkey-value record) lists each store's status, page count and any warning. - Blocked stores. When a store answers 403/429, requests are retried with back-off and then
through Apify datacenter proxy automatically. Very protected stores may still need a residential
proxy in the
proxyConfigurationinput. - Sitemap fallback. Headless Shopify storefronts (for example ruggable.com or gymshark.com) switch
/products.jsonoff. For those, the Actor lists products from the sitemap and reads each product page's schema.org data. You get title, price, currency, availability, images, brand, SKU and description, labelledsource: "sitemap+jsonld". You do not get tags, compare-at prices, timestamps or the option list, and it is capped at 1,000 products per store and is slower. - Inventory. Shopify's public data exposes whether each variant is available (
available), not the stock quantity. This Actor does not claim exact unit counts. - Prices are in the store's currency (
currencyfield). Stores that sell in several currencies by market show the default-market price. - Only public storefront data is read; password-protected stores are reported as errors.
FAQ
How do I know a site runs on Shopify? Try it: a non-Shopify site returns an error row saying it does not look like Shopify. (The Tech Stack Detector Actor can also identify the platform in bulk.)
Can I get only a collection? Yes: pass the collection URL in stores, or set collection.
Can I track price changes over time? Schedule the Actor with expandVariants and compare datasets
by variantId, or use updatedSince to pull only what changed.
Does it scrape reviews? No.