Shopify Products Scraper - Any Store Catalogue
Pricing
from $0.40 / 1,000 products
Shopify Products Scraper - Any Store Catalogue
Scrape any Shopify store's public products.json: one row per product or per variant with SKU, price, compare-at price and discount. Weekly changed-only runs charge nothing for unchanged products; on-sale filter is free. No login. $0.40 per 1,000 products; blocked stores are free.
Pricing
from $0.40 / 1,000 products
Rating
0.0
(0)
Developer
Fulox
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Read the full product catalogue of any Shopify store from its public products.json, for dropshippers, price-comparison and competitor-research teams: SKU, price, compare-at price, discount, availability, image, tags and timestamps in one typed row per product or per variant.
What you get
- Pay per product from $0.40 per 1,000, 55% below both Shopify catalogue scrapers with users.
- One row per variant (
rows: "variant") for sheets: every SKU, size and colour on its own line; one charge per product for each 10 variant rows (most products have fewer, so one charge). - Changed-only mode (
onlyChangedSinceLastRun): a weekly run returns only products updated since your last run, and unchanged products cost nothing. - Sale detection:
discountPercenton every row from the compare-at price, andonlyOnSaledrops full-price products before the charge.
Example output
{"domain": "allbirds.com","productId": 7340901859408,"handle": "womens-allbirds-flip-flop-dusty-pink","title": "Women's Allbirds Flip Flop - Dusty Pink","vendor": "Allbirds","productType": "Shoes","tags": ["loop::returnable => true", "shoprunner"],"variantId": 42146889039952,"variantTitle": "5","sku": "A12513W050","price": 50,"compareAtPrice": null,"discountPercent": null,"available": true,"variantCount": 7,"imageUrl": "https://cdn.shopify.com/s/files/1/1104/4168/files/A12513_26Q2_Allbirds-Flip-Flop-Dusty-Pink_PDP_LEFT.png","createdAt": "2026-03-27T14:03:50-07:00","updatedAt": "2026-10-30T16:57:17-07:00","publishedAt": "2026-09-25T16:58:13-07:00","url": "https://allbirds.com/products/womens-allbirds-flip-flop-dusty-pink"}
On a product row, price and compareAtPrice come from the cheapest variant and available is true when any variant is in stock. On a variant row they belong to that variant, and url ends in ?variant=<id>.
How to use it
- Paste one or more store domains (for example
allbirds.comorhttps://www.kith.com) and choose how many products per store. - Click Start.
- Download the dataset as JSON, CSV or Excel, or connect it to Google Sheets, Make, Zapier or n8n.
Input
| Field | What it does | Default |
|---|---|---|
domains | Store domains or URLs, up to 100 per run | allbirds.com |
maxProductsPerStore | Products listed per store, 1 to 5,000 (a run reads at most 5,000 in total) | 500 (25 in the prefilled example) |
rows | product for one row per product, variant for one row per variant | product |
onlyOnSale | Keep only products with a variant whose compare-at price is above its price | off |
onlyChangedSinceLastRun | Return only products updated after the newest one an earlier run delivered for that store | off |
Pricing
$0.40 per 1,000 products ($0.0004 each). In product mode a product is one charge. In variant mode it is one charge per 10 variant rows or part of them, so a product with 7 variants is one charge and one with 25 variants is three. Stores that fail, are blocked, or return nothing cost nothing, and neither do products dropped by onlyOnSale or changed-only mode. Set a maximum cost per run to stay in control.
Limitations
- Only stores that publish
products.jsonwork. A store that closes it, is password-protected or is not on Shopify returns a freestore_failedrow with the HTTP status. - Some stores sit behind bot protection and refuse requests from data-center addresses. They return a free
store_blockedrow; this version uses no proxy. - Public catalogue data only: no inventory counts, collections, reviews or storefront pages.
- Changed-only mode needs a named storage on your account. If your account cannot open one, the run stops with a free
not_processedrow instead of charging for products you have already seen. The reference point is kept per store and per set of settings (onlyOnSale,maxProductsPerStore), so tasks with different settings do not affect each other. It moves forward only for a store whose changed products were all delivered: after a run that stopped early (for example your cost cap), the stores it did not finish are listed again next time, and their products delivered in the stopped run are charged again. Rule: after a delivered run the reference point is the newestupdated_atdelivered, even ifmaxProductsPerStorecut the list, so the next run never charges those products again; changed products beyond the cut are not returned later, so setmaxProductsPerStoreabove the number of products that change between runs. - Redirects to a different website are not followed (the store fails free); only a redirect to the same host or its
www.version is. - Prices are read as numbers in the store's own currency; the currency is not in
products.json.
FAQ
How fresh is the data? Every run reads the live products.json.
Can I run it every week? Yes. Turn on onlyChangedSinceLastRun and schedule the Actor; each run returns only what changed.
Why is my store missing? Look for a store_blocked or store_failed row in the dataset; its reason says why.
Can I get one row per size and colour? Set rows to variant.
Changelog
- 2026-10-31: first version.