Shopify Store Products & Price Change Monitor
Pricing
Pay per event
Shopify Store Products & Price Change Monitor
Export all products, variants, prices, stock and SKUs from any Shopify store, and monitor competitors for price drops, price increases, new products, back-in-stock and sold-out changes.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Max Prozapas
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 hours ago
Last modified
Categories
Share
Shopify Store Products & Price Change Monitor — Scrape Shopify Products, Prices, Stock & SKUs
Export the full product catalog of any Shopify store (products, variants, SKUs, prices, compare-at prices, discounts, stock availability, images, tags) and monitor competitors for price changes. Paste store URLs and get clean, structured data, with no login, API key or browser needed.
Monitor mode remembers every price and stock status between runs and outputs only what changed: new products, price drops, price increases, back-in-stock, sold-out and removed products. Schedule it daily and get a competitor price-change feed. You pay only for the changes.
Why this Shopify scraper
- Any Shopify store: works with millions of stores (Allbirds, Kith, Gymshark, ColourPop, ...), including
many headless Shopify / Hydrogen stores. The Actor finds the shop's
*.myshopify.comdomain automatically. - Variant-level data: one row per SKU (size/color) with its own price, compare-at price, discount % and stock. Or switch to one row per product with min/max price and availability across variants.
- Price change monitoring with a free, silent baseline run. Price drop / price increase / back in stock / out of stock / new / removed, each can be turned on or off.
- Collections: paste a collection URL (
/collections/sale) to scrape or monitor just that collection. - Fast and light: reads Shopify's public storefront JSON (250 products per request). A 1,000-product store takes seconds.
- Cheap: pay per result, no monthly rental. In monitor mode you pay only for changes.
Use cases
- Competitor price monitoring: track competitor prices and discounts daily and react to price drops.
- Dropshipping & product research: export winning stores' full catalogs, prices, vendors and new arrivals.
- MAP compliance: brands can watch resellers' Shopify stores for prices below the minimum advertised price.
- Back-in-stock alerts: get notified when a sold-out product or size is available again.
- Catalog export: download any Shopify store's product list to CSV, Excel, JSON, Google Sheets or your database.
- Market & assortment analysis: new product launches, sale depth, product types and vendors across stores.
Input
| Field | Description |
|---|---|
stores | Store URLs or domains. Required. Any page works, e.g. https://www.allbirds.com, allbirds.com, weareallbirds.myshopify.com. A collection URL (https://www.allbirds.com/collections/mens) limits the run to that collection. |
maxProductsPerStore | Max products per store or collection (default 1000, up to 25,000). |
outputLevel | variant (one row per SKU, default) or product (one row per product). |
includeDescription | Add plain-text product description. |
keywords | Keep products whose title, product type, vendor or tags contain any keyword. |
onlyAvailable | Only in-stock variants/products. |
monitorMode | Output only changes since the previous run. |
monitorId | Separate saved state per watchlist (default default). |
baselineOnFirstRun | First run for a store saves its catalog silently (no output, no cost). |
reportNewProducts, reportPriceDrops, reportPriceIncreases, reportBackInStock, reportOutOfStock | Change types to output (default on). |
reportRemoved | Also output items that disappeared from the store (default off). |
Example input: catalog export
{"stores": ["https://www.allbirds.com", "https://www.gymshark.com", "https://kith.com/collections/sale"],"maxProductsPerStore": 5000,"outputLevel": "variant"}
Example input: daily competitor price monitor
{"stores": ["https://www.allbirds.com", "https://www.gymshark.com"],"keywords": ["runner", "leggings"],"monitorMode": true,"monitorId": "competitors","reportPriceDrops": true,"reportBackInStock": true,"reportRemoved": true}
Output
Variant level (default), one row per SKU:
{"store": "www.allbirds.com","productId": 7340901859408,"variantId": 42146889039952,"title": "Women's Allbirds Flip Flop - Dusty Pink","variantTitle": "5","handle": "womens-allbirds-flip-flop-dusty-pink","vendor": "Allbirds","productType": "Shoes","tags": ["allbirds::gender => womens", "allbirds::hue => pink"],"sku": "A12513W050","options": { "Size": "5" },"price": 25,"compareAtPrice": 50,"discountPercent": 50,"currency": "USD","available": false,"productUrl": "https://www.allbirds.com/products/womens-allbirds-flip-flop-dusty-pink?variant=42146889039952","imageUrl": "https://cdn.shopify.com/s/files/1/1104/4168/files/A12513_26Q2_Allbirds-Flip-Flop-Dusty-Pink_PDP_LEFT.png","createdAt": "2026-03-27T21:03:50.000Z","updatedAt": "2026-10-13T22:22:18.000Z","publishedAt": "2026-09-25T23:58:13.000Z","scrapedAt": "2026-10-14T08:00:00.000Z"}
In monitor mode each row also has:
{"changeType": "priceDrop","changes": ["priceDrop", "backInStock"],"previousPrice": 150,"previousAvailable": false,"firstSeenAt": "2026-10-01T08:00:00.000Z"}
changeType is one of new, priceDrop, priceIncrease, backInStock, outOfStock, removed. When several
changes happen at once, changeType holds the first one and changes lists them all.
Product level (outputLevel: "product") returns one row per product with minPrice, maxPrice,
maxCompareAtPrice, maxDiscountPercent, anyAvailable, variantsCount, availableVariantsCount and options.
In product-level monitoring, price changes refer to minPrice and stock changes to anyAvailable.
currency comes from the store itself (its storefront cart). If the store does not report it, the field is null.
The Actor never guesses it.
A per-store report (products fetched, matched, output, API domain used, currency, errors) is saved to the SUMMARY
record of the run's key-value store. Stores that are not Shopify, or that disabled products.json, are listed there
with the error Not a Shopify store or products.json disabled, and the run continues with the other stores.
How monitoring works
- The state is saved in the named key-value store
shopify-monitorunderstate-<monitorId>(gzipped JSON). - The first time a store or collection is monitored, its catalog is saved silently (if
baselineOnFirstRunis on). This also applies to stores you add to an existing watchlist later. - Removed is reported only for stores read completely in the current run. A store that fails, is cut by
maxProductsPerStoreor blocks the run never produces false "removed" alerts. - If the run's cost limit is reached, unreported changes stay pending and are reported in the next run.
- Changing
outputLevelfor an existingmonitorIdstarts a new baseline.
Pricing
Pay per result: a small fee per item in the dataset. A full catalog export costs one result per variant
(or per product with outputLevel: "product"). In monitor mode you pay only for detected changes, so a daily watch on
dozens of competitor stores usually costs cents per day. Set a maximum cost per run, and the Actor stops cleanly when it is reached.
Tips
- Scheduling: enable
monitorMode, create a Schedule (e.g. daily 08:00) and connect an integration (email, Slack, Google Sheets, Zapier, Make, webhook) to receive only changes. - Cheaper exports: use
outputLevel: "product"when you don't need sizes/colors, andkeywordsto narrow down. - Several watchlists: use a different
monitorIdfor each. - A store failed? Check
SUMMARY. Some stores are not on Shopify, are password-protected, or block the public product feed.
Limitations
- Only products published to the store's online storefront are visible. Exact inventory quantities are not public, only in-stock / out-of-stock.
- Shopify serves at most 25,000 products per store or collection through this endpoint.
- Prices are those of the store's default market/currency. Region-specific prices of Shopify Markets are not covered.
Legal
The Actor reads only public storefront data that Shopify stores publish for every visitor (/products.json).
It does not log in, bypass protections, or collect personal data. Product texts and images remain the
property of their owners. Make sure your use of the data complies with applicable laws and the stores' terms.