Shopify Products Scraper: Prices, Variants, SKUs & Stock
Pricing
$1.00 / 1,000 product returneds
Shopify Products Scraper: Prices, Variants, SKUs & Stock
Export any Shopify store's public catalog as one row per variant: price, compare-at price, SKU, stock, options, images and description, with collection and keyword filters. $1 per 1,000 products, variants included.
Pricing
$1.00 / 1,000 product returneds
Rating
0.0
(0)
Developer
Changefeeds Tools
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 hours ago
Last modified
Categories
Share
- What you get: a Shopify store's public catalog as rows: one per variant (or per product) with price, compare-at price, SKU, in-stock flag, options, weight, images, tags and description.
- Use it for: competitor catalog pulls, repricing, spreadsheets and BI feeds. Filter by collection or keyword. Reads only the public
products.jsonevery Shopify store serves; no login. - Price: $1 per 1,000 products, however many variants each has. Failed stores are free.
Sample output
The prefilled input (https://www.allbirds.com, first 30 products), run on
2026-10-23, returned 361 variant rows for 30 products plus one free store row.
One line per product for the first five:
| title | variants | first SKU | price | compare_at_price | variants in stock |
|---|---|---|---|---|---|
| Women's Allbirds Flip Flop - Dusty Pink | 7 | A12513W050 | 25 | 50 | 1 of 7 |
| Men's Canvas Runner NZ - Deep Navy Stripes (Blizzard Sole) | 13 | A12498M080 | 100 | null | 5 of 13 |
| Women's Canvas Runner NZ - Deep Navy Stripes (Blizzard Sole) | 13 | A12500W050 | 100 | null | 7 of 13 |
| Men's Cruiser Terry - Warm White (Warm White Sole) | 13 | A12374M080 | 115 | null | 3 of 13 |
| Men's Cruiser Slip On - Natural Black (Blizzard Sole) | 13 | A12642M080 | 100 | null | 5 of 13 |
The first variant row in full (tags, image and body_text shortened):
{"type": "variant","store": "www.allbirds.com","product_id": "7340901859408","handle": "womens-allbirds-flip-flop-dusty-pink","title": "Women's Allbirds Flip Flop - Dusty Pink","vendor": "Allbirds","product_type": "Shoes","tags": ["allbirds::carbon-score => undefined", "allbirds::cfId => color-a4d5d0f6620dc304306f503bf67bc5f9", "…"],"created_at": "2026-03-27T14:03:50-07:00","updated_at": "2026-10-22T20:56:55-07:00","published_at": "2026-09-25T16:58:13-07:00","url": "https://www.allbirds.com/products/womens-allbirds-flip-flop-dusty-pink","image": ["https://cdn.shopify.com/s/files/1/1104/4168/files/A12513_26Q2_Allbirds-Flip-Flop-Dusty-Pink_PDP_LEFT.png?v=1774646345", "…"],"body_text": "Sun on your feet. Comfort underneath. Light, easy, and made for warm weather, these flip flops bring everyday comfort to…","variant_id": "42146889039952","variant_title": "5","sku": "A12513W050","price": 25,"compare_at_price": 50,"available": false,"option1": "5","option2": null,"option3": null,"grams": 455,"requires_shipping": true}
And the free store row that closes every store's run:
{"type": "store","store": "www.allbirds.com","status": "ok","products_found": 30,"products_exported": 30,"variants_exported": 361,"truncated": true,"truncation_reason": "max_products","collection": null,"error_code": null,"error_message": null,"note": "Stopped at maxProductsPerStore (30).","run_at": "2026-10-23T03:56:55.016Z"}
How to run in 30 seconds
- Click Try for free. The input already holds
https://www.allbirds.comand a 30-product cap. - Click Start. Our test run of that input took 17 seconds and cost $0.03 (30 products, 361 variant rows).
- Open the Output tab, or export the dataset as CSV, JSON or Excel.
For your own store, replace the URL with any Shopify store's home page and raise Max products per store (default 5,000) to get the whole catalog. Untick Include variants for one row per product with a price range.
Pricing
- $0.001 per product exported ($1 per 1,000). A product is charged once, however many variants it has.
- Free: products filtered out by
keywords, skipped and failed stores, and the store status rows. - Set a maximum cost per run and the actor stops fetching when the budget is
used up, keeps what it already exported, marks the affected stores
truncated, and recordsstopped_reason: "max_total_charge"inOUTPUT. It never charges past your limit. - Examples: 1 store with 1,000 products is $1.00 per run; a full 5,000-product catalog is $5.00 per run.
FAQ
Is this allowed? The actor reads the same public JSON catalog that Shopify serves to every visitor, at about one request per second, and identifies itself in its User-Agent. You are responsible for your own use of the data and for respecting each store's terms.
Why fewer products than the store has? Check the store row:
truncated: truetruncation_reason: "max_products" means Max products per store
cut the run short; raise it. status: "blocked" or "not_shopify" means the
store's public catalog could not be read at all.
What currency are the prices in? The store's own default currency, exactly
as products.json reports the number. The response does not say which
currency it is, so the actor does not guess.
Do you charge per variant? No. One charge per product, whatever its variant count.
Can it tell me what changed since last week? No, every run returns the whole (filtered) catalog. For price drops, restocks and new or removed variants since the last run, use our Shopify Price & Stock Monitor.
Limits
- Public
products.jsononly. It never logs in, never touches cart or checkout, and collects no personal data. - Some stores disable or block
products.json. HTTP 403/401 or a hidden catalog is reported as a store row withstatus: "blocked"; a site that is not Shopify reportsnot_shopify. There is no workaround, by design. - Only products published to the Online Store appear. Hidden, draft and channel-only products are not visible.
- No sales or inventory counts. Public catalogs carry only in stock / out of stock.
- Polite, so slower on big catalogs: one request at a time per store, at
least 1 second apart, honouring HTTP 429
Retry-After. Up to three stores run in parallel. - Descriptions are capped at 5,000 characters of HTML-stripped text
(
body_text). The originalbody_htmlis not returned.
Input reference
{"storeUrls": ["https://www.allbirds.com"],"maxProductsPerStore": 5000,"includeVariants": true,"collection": "mens","keywords": ["runner"]}
storeUrls(required): store base URLs, e.g.https://www.allbirds.com. Paths are ignored.maxProductsPerStore(default 5,000, maximum 50,000): the most products read per store per run (250 per request). Stores with more are markedtruncated.includeVariants(defaulttrue): one row per variant with price, SKU, stock, options and weight, orfalsefor one row per product with aprice_min/price_maxrange.collection(optional): a collection handle; forhttps://www.allbirds.com/collections/mens, usemens.keywords(optional): only export products whose title,product_typeor tags contain every keyword (case-insensitive substring). Filtered-out products are not charged.
Output reference
type: "variant": one per variant:store,product_id,handle,title,vendor,product_type,tags,created_at,updated_at,published_at,url,image(all image URLs),body_text,variant_id,variant_title,sku,price,compare_at_price,available,option1/2/3,grams,requires_shipping.type: "product": one per product (withincludeVariants: false): the same product fields plusprice_min,price_max,any_available.type: "store": one free status row per store:status(ok,not_shopify,blocked,error),products_found,truncatedand any error detail. Every run leaves at least one row, even when every store fails.
Prices are numbers in the store's own currency. The run summary is saved to the
default key-value store as OUTPUT, including stopped_reason
("max_total_charge" when the run's maximum charge stopped it early).