Shopify Store Scraper & Price Monitor
Pricing
from $1.00 / 1,000 products
Shopify Store Scraper & Price Monitor
Every product, variant, price and stock status from any Shopify store, and exactly what changed since your last run: price drops, back in stock, sold out, new and removed products. Half a cent per store, a tenth of a cent per product. Stores that block the public feed are reported free.
Pricing
from $1.00 / 1,000 products
Rating
0.0
(0)
Developer
Asgard Labs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Shopify Store Scraper & Price Monitor – products, variants, stock, price changes
Give it Shopify shop addresses. Get the complete catalog of each shop: every product and variant with price, compare-at price, stock status, images, tags and options. Run it again with only changes on and you get exactly what moved since last time: new products, price changes with old and new value, back in stock, out of stock, removed products.
No proxies, no browser, no login. It reads the public product feed every Shopify shop publishes, 250 products per page, so a 10,000-product shop takes under a minute.
Shopify product data per store
- title, handle, vendor, productType, tags, url, store, currency
- minPrice, maxPrice, onSale, maxDiscountPct, available, variantCount, availableVariantCount
- variants – id, title, sku, price, compareAtPrice, available, options, weight, dates
- images, featuredImage, options, createdAt, updatedAt, publishedAt
- status –
new,changed,unchangedorremoved; changes –price(from, to),back-in-stock,out-of-stock,variant-added,variant-removed; firstSeenAt - descriptionText / descriptionHtml when
includeBodyis on
Per shop, the run summary also records the shop's name, currency, country and its myshopify address.
Use cases
- Watch competitor prices daily.
- Track when a sold-out item returns.
- Build a product list for a price-comparison site.
- Audit a client's catalog.
Input
| Field | Default | Meaning |
|---|---|---|
stores | – | Shop domains or URLs. Custom domains work. A pasted collection link (…/collections/sale) reads that collection only. |
maxProductsPerStore | 0 | 0 = whole catalog. |
collection | – | Collection handle, e.g. sale. A misspelled handle is reported as an error, not as an empty shop. |
onlyChanges | false | Output only new / changed / removed products since the last run. History is kept per shop in a key-value store. |
onSaleOnly, availableOnly, vendor, productType, tags, minPrice, maxPrice | – | Filters. |
includeBody, includeCollections | false | Product description; list of collections per shop. |
timeoutSecs | 300 | Time budget per shop. |
concurrency | 5 | Shops read in parallel. |
stateStoreName | shopify-monitor-state | Where the change history lives. Use a different name to start fresh. |
Output example
{ "id": 6970463658064, "handle": "mens-tree-runners", "title": "Men's Tree Runners", "vendor": "Allbirds", "productType": "Shoes", "tags": ["men", "runner"],"url": "https://allbirds.com/products/mens-tree-runners", "store": "allbirds.com", "currency": "USD","minPrice": 98, "maxPrice": 98, "onSale": false, "maxDiscountPct": 0, "available": true, "variantCount": 14, "availableVariantCount": 11,"images": ["https://cdn.shopify.com/…"], "featuredImage": "…", "options": [{ "name": "Size", "values": ["8", "9"] }],"variants": [{ "id": 4046…, "title": "8", "sku": "TR1M-…", "price": 98, "compareAtPrice": null, "available": true, "option1": "8" }],"status": "changed", "changes": [{ "variantId": 4046…, "type": "price", "from": 110, "to": 98 }], "firstSeenAt": "2026-08-01T…" }
How to use
- Paste your store domains, one per line into the input form. The example input is ready to run as is.
- Click Start. Rows appear in the Output tab as they are found.
- Download the table as CSV, JSON or Excel, or read it through the API.
- For monitoring, create a Schedule and switch on
onlyChanges: later runs return only what changed, and only that is charged.
Pricing
Pay per event: store-scan $0.005 per shop that was read, product $0.001 per product in the output. A 2,000-product catalog costs about $2. A daily onlyChanges run on 50 shops usually costs well under $0.50, because unchanged products are not output and not charged. Shops that are blocked, dead, not Shopify, or misspelled are free.
Good to know
- "On sale" depends on the shop. A product counts as on sale only when the shop publishes a compare-at price higher than the price. Shops that show discounts in other ways (Gymshark and Allbirds among them) will show
onSale: false. - Removed products are only reported on a full scan. With a product cap, a collection or a filter, the run sees part of the catalog, so it does not guess what was removed. The history of unseen products is kept for the next full scan.
- Stock is yes/no. The public feed shows in stock or sold out per variant, never quantities.
- Shops that switch off the public feed (password-protected or some enterprise setups) are reported as
Shopify store but products.json is disabled/blockedand not charged. - Errors are in plain words:
ENOTFOUND (domain not found),timeout,collection not found: xyz,not a Shopify store.
Use from code or an AI agent
Every run can be started and read through the Apify API, the JavaScript and Python clients, or an AI agent with tool access. Open the API tab on this page for ready-made snippets. Pricing is per event, so an agent pays only for what it receives.
FAQ
Does it work on custom domains, not only myshopify.com?
Yes. Give it the shop's public address, e.g. allbirds.com. The shop's own currency, name and country come back with every product.
Can it see inventory quantities?
No. Shopify's public feed shows in stock or sold out per variant, not how many. That is what available and availableVariantCount report.
What happens when a store has switched off the public product feed?
The store is reported as Shopify store but products.json is disabled/blocked and is not charged. Nothing is guessed.
How does "only changes" billing work?
The first full read charges every product once. Later runs with onlyChanges on charge only products that are new, changed or removed since the last run, so daily monitoring of a 1,000-product shop usually costs a few cents.
Can I read one collection only?
Yes. Paste the collection link, e.g. shop.com/collections/sale, or set the collection handle. /collections/all means the whole catalogue. A misspelled handle is reported as an error, not as zero products.