Shopify Store Products Scraper – Prices, Variants & Stock
Pricing
from $0.19 / 1,000 products
Shopify Store Products Scraper – Prices, Variants & Stock
Export every product from any Shopify store: title, vendor, type, tags, min/max price, compare-at price, sale %, stock, variants with SKUs, images. Reads the store's public products feed. $0.00019 per product + $0.0005 per run.
Pricing
from $0.19 / 1,000 products
Rating
0.0
(0)
Developer
LOUDTZU TZULOUD
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Security
Limited permissionsShare
Give it one or more Shopify store addresses. It returns every product in the store (or in one collection): title, brand/vendor, type, tags, lowest and highest price, "compare at" (was) price, sale %, stock, variants with SKUs, and images. One row per product.
It reads the store's own public products feed (/products.json), the same feed Shopify serves to every visitor. No login, no browser, no residential proxies, so it is fast and cheap.
What you can use it for
- Price monitoring: track a competitor's prices and sales every day.
- Catalogue export: copy a supplier's product list into a spreadsheet.
- Market research: see how many products, which brands and which price bands a store carries.
- Stock checks: see which sizes or colours are sold out.
Input
| Field | What it does | Default |
|---|---|---|
| Store URLs | One store per line: https://www.allbirds.com, shop.example.com, or a collection like https://shop.example.com/collections/sale | allbirds.com |
| Max products per store | Stop after this many products from each store (1–50,000) | 100 |
| Include variants | Adds a variants list (size/colour, SKU, price, was-price, in stock) | on |
| Include description | Adds the description as plain text (emails and phone numbers removed) | on |
Example input:
{ "storeUrls": ["https://www.allbirds.com", "https://shop.example.com/collections/sale"], "maxProductsPerStore": 500 }
Output (one row per product)
{"store": "www.allbirds.com","productId": 7012345678901,"title": "Men's Tree Runners","url": "https://www.allbirds.com/products/mens-tree-runners","vendor": "Allbirds","productType": "Shoes","tags": ["mens", "running"],"priceMin": 98.0,"priceMax": 98.0,"compareAtPriceMax": null,"onSale": false,"maxDiscountPct": null,"currency": "USD","available": true,"variantCount": 12,"availableVariantCount": 9,"imageUrl": "https://cdn.shopify.com/…jpg","updatedAt": "2026-11-01T10:00:00-04:00","variants": [{ "variantId": 1, "title": "8 / Black", "sku": "TR-8-BK", "price": 98.0, "compareAtPrice": null, "available": true }]}
The table view in Apify Console shows the main columns; the JSON, CSV and Excel exports have every field. Field notes are in the dataset schema.
Pricing
Pay per result:
- $0.00019 per product saved (= $0.19 per 1,000 products)
- $0.0005 per run, charged only once the first product is saved.
Runs that save nothing (not a Shopify store, blocked, robots.txt says no) cost you nothing. You can set "Max charge per run" in Apify; the Actor stops cleanly when it is reached and says so in the status.
Rivals (checked 2026-11-05)
Live Apify Store prices read on 2026-11-05 (~16:30 AST) from the Store API. One row per Apify plan (Free, Bronze, Silver, Gold, Platinum, Diamond). Users = monthly users at that time. Prices change; check the Store before relying on them.
| Actor | Users (30 d) | Plan | Main result price | Start fee |
|---|---|---|---|---|
| autofacts/shopify | 111 | Free | $0.001 per product | $0.00005 |
| autofacts/shopify | 111 | Bronze | $0.0009 per product | $0.00005 |
| autofacts/shopify | 111 | Silver | $0.0008 per product | $0.00005 |
| autofacts/shopify | 111 | Gold | $0.0007 per product | $0.00005 |
| autofacts/shopify | 111 | Platinum | $0.0007 per product | $0.00005 |
| autofacts/shopify | 111 | Diamond | $0.0007 per product | $0.00005 |
| trovevault/shopify-products-scraper | 105 | Free | $0.001 per result | $0.001 |
| trovevault/shopify-products-scraper | 105 | Bronze | $0.00095 per result | $0.00095 |
| trovevault/shopify-products-scraper | 105 | Silver | $0.0009 per result | $0.0009 |
| trovevault/shopify-products-scraper | 105 | Gold | $0.00085 per result | $0.00085 |
| trovevault/shopify-products-scraper | 105 | Platinum | $0.00085 per result | $0.00085 |
| trovevault/shopify-products-scraper | 105 | Diamond | $0.00085 per result | $0.00085 |
| clearpath/shop-by-shopify-product-scraper | 68 | Free | $0.00249 per product | $0.00005 |
| clearpath/shop-by-shopify-product-scraper | 68 | Bronze | $0.00229 per product | $0.00005 |
| clearpath/shop-by-shopify-product-scraper | 68 | Silver | $0.00199 per product | $0.00005 |
| clearpath/shop-by-shopify-product-scraper | 68 | Gold | $0.00179 per product | $0.00005 |
| clearpath/shop-by-shopify-product-scraper | 68 | Platinum | $0.00179 per product | $0.00005 |
| clearpath/shop-by-shopify-product-scraper | 68 | Diamond | $0.00179 per product | $0.00005 |
| lergassy/shopify-store-intel | 19 | Free | $0.0005 per product | none |
| lergassy/shopify-store-intel | 19 | Bronze | $0.00045 per product | none |
| lergassy/shopify-store-intel | 19 | Silver | $0.0004 per product | none |
| lergassy/shopify-store-intel | 19 | Gold | $0.00035 per product | none |
| lergassy/shopify-store-intel | 19 | Platinum | $0.00035 per product | none |
| lergassy/shopify-store-intel | 19 | Diamond | $0.00035 per product | none |
| rl1987/shopify-api-scraper | 1 | Free | $0.000399 per variant row | none |
| rl1987/shopify-api-scraper | 1 | Bronze | $0.0003 per variant row | none |
| rl1987/shopify-api-scraper | 1 | Silver | $0.000276 per variant row | none |
| rl1987/shopify-api-scraper | 1 | Gold | $0.00025392 per variant row | none |
| rl1987/shopify-api-scraper | 1 | Platinum | $0.00025392 per variant row | none |
| rl1987/shopify-api-scraper | 1 | Diamond | $0.00025392 per variant row | none |
| This Actor | – | All plans | $0.00019 per product | $0.0005 (only after the first product) |
Notes: rl1987 charges per variant row, so a product with several sizes costs several rows there; this Actor charges once per product with all variants included.
What to expect from a run
- Expected case: clean runs on real, working stores that save several products. That is what the price is designed for.
- Bad URLs still use some compute: a store that is blocked, isn't a store of this type, has no products, or is closed by robots.txt still takes a few requests (and some run time) before the Actor can tell. It returns no products, and nothing is charged for it: no product fee, and no run fee if no product is saved at all. Each such store is listed with its reason in the
ERRORSrecord and the status message. - If every store in a run fails, the run ends with "0 products saved … Nothing was charged."
Legal and fair use
- Public data only. It reads the public products feed that Shopify stores serve to everyone. It never logs in, never opens password-protected stores, and never gets past a paywall.
- robots.txt is checked for every store before any product request. If a store's robots.txt disallows
/products.json(or the collection feed), that store is skipped and listed in the ERRORS record. If robots.txt cannot be read because of a server error, the store is skipped too (RFC 9309). ACrawl-delayfor all user agents is honoured (up to 30 s). - Terms: each store has its own terms of service; some forbid automated copying. You are responsible for checking the terms of the stores you read and for how you use the data. Shopify's own platform terms cover merchants, not visitors reading public storefront pages.
- No personal data. Products are not people. Descriptions are scrubbed of email addresses and phone numbers. The
vendorfield is the brand name the store set for the product; it is kept as-is. - Requests go one at a time per store, through Apify's datacenter proxy.
FAQ
How do I know if a site is a Shopify store? Just add it. If it isn't one (or the feed is turned off), the run lists it in the ERRORS record as "no public Shopify products feed" and charges nothing for it.
Can I read just one collection?
Yes. Paste the collection URL, e.g. https://shop.example.com/collections/sale.
What currency are prices in?
The store's main currency. The currency field comes from the store's public /meta.json; it is null if the store hides it, or if the store's robots.txt asks for a crawl-delay above 2 seconds (the Actor then skips that extra request to keep runs fast). Prices are not converted.
Why is available sometimes null?
Some stores hide stock in their feed. Then available and availableVariantCount can't be known.
Is the stock number shown? No. Shopify's public feed only says whether a variant can be bought, not how many are left.
Why did a store stop early? Shopify returns 250 products per page. The run stops at your "Max products per store", at the end of the feed, or if the store blocks or rate-limits the requests after retries (shown in the ERRORS record).
Does it get reviews or customer data? No. Only product data.
Where are problems listed?
In the run's key-value store, record ERRORS, and in the status message.