Shopify Store Products & Price Change Monitor avatar

Shopify Store Products & Price Change Monitor

Pricing

Pay per event

Go to Apify Store
Shopify Store Products & Price Change Monitor

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

Max Prozapas

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 hours ago

Last modified

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.com domain 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

FieldDescription
storesStore 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.
maxProductsPerStoreMax products per store or collection (default 1000, up to 25,000).
outputLevelvariant (one row per SKU, default) or product (one row per product).
includeDescriptionAdd plain-text product description.
keywordsKeep products whose title, product type, vendor or tags contain any keyword.
onlyAvailableOnly in-stock variants/products.
monitorModeOutput only changes since the previous run.
monitorIdSeparate saved state per watchlist (default default).
baselineOnFirstRunFirst run for a store saves its catalog silently (no output, no cost).
reportNewProducts, reportPriceDrops, reportPriceIncreases, reportBackInStock, reportOutOfStockChange types to output (default on).
reportRemovedAlso 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-monitor under state-<monitorId> (gzipped JSON).
  • The first time a store or collection is monitored, its catalog is saved silently (if baselineOnFirstRun is 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 maxProductsPerStore or 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 outputLevel for an existing monitorId starts 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, and keywords to narrow down.
  • Several watchlists: use a different monitorId for 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.

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.