Shopify Products Scraper & Price Change Monitor avatar

Shopify Products Scraper & Price Change Monitor

Pricing

from $1.00 / 1,000 product rows

Go to Apify Store
Shopify Products Scraper & Price Change Monitor

Shopify Products Scraper & Price Change Monitor

Scrape any Shopify store: products, prices, stock, ratings & customer review texts (Judge.me, Okendo, Yotpo, Junip, REVIEWS.io, Loox, Stamped) — or store tech stack. Monitor price drops & restocks. $1/1,000 rows.

Pricing

from $1.00 / 1,000 product rows

Rating

0.0

(0)

Developer

Bin

Bin

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

11 days ago

Last modified

Share

Scrape every product, variant, price and stock status from any Shopify store — or switch to Monitor mode and get only what changed since the last run: price drops, price increases, new products, removed products, restocks and sell-outs.

New: stock levels & estimated sales — turn on includeInventory to get the units in stock per variant and barcodes (GTIN/UPC/EAN), and in Monitor mode an inventory_change feed with estimated units sold and revenue between runs.

New: product ratings & review counts — turn on includeRatings to add rating, reviewCount and the star distribution per product (Okendo, Yotpo, Judge.me, Junip, REVIEWS.io, Loox, Stamped and schema.org ratings), filter to proven best sellers with minReviewCount, and in Monitor mode get a new_reviews feed — review velocity, a strong demand signal.

New: product review texts — outputLevel: "reviews" returns the customer reviews themselves: stars, title, full text, author display name, date, verified buyer, helpful votes, the store's reply, and on Yotpo stores the fit / size / comfort answers — from the store's public Judge.me, Okendo, Yotpo, Junip, REVIEWS.io, Loox or Stamped widget, newest first. Filter by stars (reviewMaxRating: 2 = complaints only) and date (reviewsSince). In Monitor mode, new_reviews events now carry the new review texts too.

New: one row per store — outputLevel: "store" turns a list of store URLs into a competitor / lead table: catalog size, price range and median, % on sale and average discount, sold-out share, new products in the last 30/90 days and launches per month, top vendors and product types, Shopify theme and detected apps (Klaviyo, Attentive, Recharge, Yotpo, Okendo, Gorgias, Meta/TikTok pixels, Klarna, Afterpay, Global-e… 60+ checked), plus total reviews / stock value when ratings or inventory are on.

Works with millions of Shopify stores (Allbirds, Gymshark, Kylie Cosmetics, Fashion Nova, …). No browser, no login, no proxies — fast and cheap.

Why use it

  • 🛍️ Full catalog — title, vendor, type, tags, all variants (size/color), SKU, price, compare-at price, availability, images, dates.
  • 🔔 Change monitor — schedule it daily/hourly and receive a clean feed of price_drop, price_increase, new_product, new_variant, removed_product, back_in_stock, out_of_stock events. You only pay for changes, not the whole catalog.
  • 🗂️ Collections — paste a collection URL (e.g. /collections/sale) to scrape only that collection.
  • 🎯 Track specific products — paste individual product URLs (/products/...) to watch just those items for price drops and restocks.
  • 🔍 Filters — keywords / exclude keywords (title, vendor, type, tags), min/max price, on-sale only, in-stock only.
  • 🏷️ Discount % — every product has discountPercent (largest compare-at vs. current price gap) for deal hunting.
  • 🔕 Noise control — report only the change types you care about (e.g. just price_drop + back_in_stock) and ignore price moves under X%. You pay only for reported changes.
  • 📦 Product or variant rows — one row per product (variants nested) or flattened per variant for spreadsheets.
  • 📊 Inventory & sales velocity — inventoryQuantity per variant and totalInventory per product (on the many stores that publish stock counts), plus estimatedUnitsSold / estimatedRevenue per variant in Monitor mode.
  • ⭐ Ratings & reviews — rating, reviewCount, ratingSource and ratingDistribution (1–5 stars) per product; minRating / minReviewCount filters; new_reviews events with reviewsAdded in Monitor mode.
  • 💬 Review texts — outputLevel: "reviews": one row per customer review (Judge.me, Okendo, Yotpo, Junip, REVIEWS.io, Loox, Stamped) with rating, text, date, verified buyer, store reply and Yotpo fit answers; star and date filters; reviews shared across product variants are output once.
  • 🔢 Barcodes — GTIN / UPC / EAN per variant for matching products across stores and marketplaces.
  • 💱 Store currency detected automatically.

Use cases

  • Competitor price tracking for DTC brands and e-commerce teams.
  • Dropshipping & product research — find new launches and best sellers of top stores.
  • Deal / sale alerts — post price drops to Slack, Telegram, Discord or a deals site.
  • Stock alerts — know when a sold-out product is back.
  • Market research — catalog size, pricing and assortment of any brand.
  • Competitor & lead lists — paste 100 store URLs with outputLevel: "store": one row each with catalog size, price point, launch cadence and tech stack (who uses Klaviyo, Recharge, Yotpo…), ready for a spreadsheet or CRM.
  • Sales estimation — track a competitor's stock daily to see which products actually sell (and how fast).
  • Best-seller research — rank a competitor's catalog by review count, or watch which products collect new reviews fastest.
  • Voice of customer — pull every 1–2★ review of a competitor's best sellers to find product defects, sizing problems and unmet needs before you design your own product or ad copy.
  • Product matching — join catalogs from different stores or Amazon listings by barcode.

Input example

Monitor two competitors for meaningful price drops and restocks:

{
"stores": ["https://www.allbirds.com", "https://gymshark.com/collections/sale"],
"mode": "changes",
"stateKey": "competitors-daily",
"changeTypes": ["price_drop", "back_in_stock"],
"minChangePercent": 10
}

Scrape only discounted running shoes under $120 that are in stock:

{
"stores": ["https://www.allbirds.com"],
"keywords": ["runner"],
"excludeKeywords": ["kids", "gift card"],
"maxPrice": 120,
"onlyOnSale": true,
"onlyAvailable": true
}

Estimate a competitor's daily sales from stock changes (first run saves the baseline):

{
"stores": ["https://www.taylorstitch.com"],
"mode": "changes",
"stateKey": "taylor-sales",
"includeInventory": true,
"changeTypes": ["inventory_change", "new_product"]
}

Example inventory_change event:

{
"changeType": "inventory_change",
"title": "The Yosemite Shirt in Buckeye Plaid",
"variantTitle": "M - 40",
"barcode": "197102118471",
"price": 138,
"oldInventory": 40,
"inventory": 34,
"inventoryDelta": -6,
"estimatedUnitsSold": 6,
"estimatedRevenue": 828
}

Find a competitor's proven best sellers (4.5★+ with 100+ reviews):

{
"stores": ["https://www.beardbrand.com", "https://www.brooklinen.com"],
"includeRatings": true,
"minRating": "4.5",
"minReviewCount": 100
}

Track review velocity daily (first run saves the baseline):

{
"stores": ["https://www.beardbrand.com"],
"mode": "changes",
"stateKey": "beardbrand-reviews",
"includeRatings": true,
"changeTypes": ["new_reviews", "new_product"]
}

Example new_reviews event:

{
"changeType": "new_reviews",
"title": "Norse Winter Sea Salt Spray",
"oldReviewCount": 867,
"reviewCount": 872,
"reviewsAdded": 5,
"oldRating": 4.53,
"rating": 4.54,
"ratingSource": "judgeme"
}

Watch a few specific products:

{
"stores": [
"https://www.allbirds.com/products/mens-wool-runners",
"https://www.allbirds.com/products/mens-canvas-runner-nz"
],
"mode": "changes",
"stateKey": "my-wishlist"
}

Store-level example (competitor table / tech stack)

{
"stores": ["https://www.brooklinen.com", "https://www.rothys.com", "https://colourpop.com"],
"outputLevel": "store",
"includeRatings": true
}

Real result (October 2026): ColourPop — 1,049 products, median price $10, 62 new products in the last 90 days, 2.73M reviews (Okendo, average 4.73★), apps detected: Klaviyo, Attentive, Yotpo, Okendo, Gorgias, Nosto, Klevu, Klarna, Elevar, Triple Whale. Rothy's — 713 products, median $135, 84 new in 90 days, 397,723 reviews (4.55★), Yotpo + Yotpo Loyalty + Global-e. Brooklinen — 491 products, 81 new in 90 days, 16.5% on sale (average −47%), Attentive, Yotpo, Meta Pixel.

Customer reviews example (voice of customer)

All 1–2★ reviews written since September on a competitor's sea salt sprays:

{
"stores": ["https://www.beardbrand.com"],
"outputLevel": "reviews",
"keywords": ["sea salt"],
"maxReviewsPerProduct": 0,
"reviewMaxRating": 2,
"reviewsSince": "2026-09-01"
}

Example review row (real, Yotpo store, October 2026):

{
"type": "review",
"store": "https://rothys.com",
"productTitle": "The Ivy Sneaker - ReVelvet™ Cobalt",
"productUrl": "https://rothys.com/products/womens-ivy-sneaker-revelvet-cobalt",
"rating": 5,
"title": "Love the leopard matches my",
"body": "Love the leopard matches my bag",
"author": "Carol D.",
"verifiedBuyer": true,
"createdAt": "2026-10-06T18:55:24.000Z",
"helpfulCount": 0,
"customFields": { "Comfort": 5, "Usual Size": "9.5", "Size Purchased": "9.5", "Fit": 2, "Width": 2 },
"storeReply": null,
"reviewSource": "yotpo"
}

Judge.me rows also include reviewerCountry, variant and mediaCount; Okendo rows include recommended. Stamped rows include reviewerCountry, variant, mediaCount, customFields (the store's extra questions) and featured. Junip rows include recommended, variant, mediaCount, incentivized and featured (Junip's public API has no reviewer names, so author is empty). REVIEWS.io rows include reviewerCountry, variant (matched by SKU), mediaCount, customFields (e.g. "How was the product fit?" on a 1–5 scale) and the store's reply. Loox rows include mediaCount (photo/video reviews) and translated; Loox's public widget cuts texts over ~500 characters with "..." — those rows have bodyTruncated: true (about 1 in 10 reviews). When a store pools reviews across a product line, reviewedProductTitle shows the product the review was actually written for. In Monitor mode with includeRatings, each new_reviews event carries newReviews (up to 10 newest texts) and newLowRatingReviews.

Output examples

Change event:

{
"changeType": "price_drop",
"store": "https://www.allbirds.com",
"title": "Men's Canvas Runner NZ - Deep Navy Stripes",
"variantTitle": "10",
"sku": "A12345",
"oldPrice": 110,
"price": 100,
"changePercent": -9.1,
"currency": "USD",
"url": "https://www.allbirds.com/products/mens-canvas-runner-nz",
"detectedAt": "2026-10-04T12:00:00.000Z"
}

Catalog product:

{
"store": "https://www.allbirds.com",
"productId": 7123456789,
"title": "Women's Tree Runners",
"vendor": "Allbirds",
"productType": "Shoes",
"tags": ["women", "runners"],
"currency": "USD",
"minPrice": 98,
"maxPrice": 98,
"onSale": false,
"discountPercent": 0,
"available": true,
"variantsCount": 12,
"variants": [{ "variantId": 1, "title": "5", "sku": "...", "price": 98, "compareAtPrice": null, "available": true }]
}

Store row (outputLevel: "store", shortened):

{
"type": "store",
"storeName": "ColourPop",
"store": "https://colourpop.com",
"country": "US",
"currency": "USD",
"productsAnalyzed": 1049,
"catalogComplete": true,
"soldOutSharePct": 4.1,
"priceMin": 3, "priceMedian": 10, "priceMax": 159,
"onSaleSharePct": 1.5, "averageDiscountPct": 30.14,
"newProductsLast30Days": 14, "newProductsLast90Days": 62,
"launchesByMonth": [{ "month": "2026-09", "products": 52 }, { "month": "2026-10", "products": 1 }],
"topProductTypes": [{ "name": "Shadow Palette", "count": 53 }, { "name": "Super Shock Shadow", "count": 45 }],
"theme": { "name": "Colourpop/Main", "schemaName": "Colourpop", "schemaVersion": "3.10.0" },
"techStack": ["Klaviyo", "Attentive", "Yotpo", "Okendo", "Gorgias", "Nosto", "Klevu", "Klarna", "Google Tag Manager", "Elevar", "Triple Whale", "Microsoft Clarity"],
"techStackByCategory": { "email & SMS": ["Klaviyo", "Attentive"], "reviews & UGC": ["Yotpo", "Okendo"], "support chat": ["Gorgias"] },
"totalReviews": 2733643, "averageRating": 4.73,
"mostReviewedProducts": [{ "title": "Tulum", "price": 6.3, "rating": 4.45, "reviewCount": 21795 }]
}

Pricing

Pay only for results:

  • $1 per 1,000 products/rows (catalog mode)
  • $1 per 1,000 reviews (outputLevel: "reviews" — products are not charged)
  • $0.01 per store row (outputLevel: "store" — the whole catalog summarised in one row)
  • $2 per 1,000 change events (monitor mode — the first baseline run is free of change charges)

How monitoring works

  1. Set Mode to "Monitor: only changes since last run" and give the monitor a name.
  2. The first run saves a baseline snapshot.
  3. Create a Schedule (e.g. daily) — each run outputs only the differences.
  4. Add an integration (Slack, email, Google Sheets, webhook, Zapier, Make) to get alerts automatically.

FAQ

Which stores work? Any Shopify store that hasn't disabled its public product feed (the vast majority).

How do I get alerts only for big price drops? Use mode: "changes", changeTypes: ["price_drop"] and minChangePercent: 15. Connect a Slack, email or webhook integration to the schedule.

Can I track a single product? Yes — paste the product URL. Multiple product URLs from the same store are fetched together and tracked as one monitor.

How do keyword filters match? Case-insensitive, whole words and their endings: runner matches "Runners" but not "shoprunner". Tags are included, so store tags like sale or new-arrival work too.

Why do I get 0 products? The store may hide its product feed, or the collection handle is wrong — open https://<store>/collections to see valid collection URLs. The run's SUMMARY record lists every store that failed.

Can I export to CSV / Excel / Google Sheets? Yes — choose "Flatten per variant" for spreadsheet-friendly rows, then export from the dataset or connect Google Sheets.

Can I see how many units are in stock? Yes, on stores that publish it (many do — e.g. Taylor Stitch, ColourPop). Turn on includeInventory; inventoryQuantity is null when a store hides stock levels. Barcodes are returned whenever the store sets them.

How are sales estimated? In Monitor mode with includeInventory, every drop in a variant's stock between two runs is reported as estimatedUnitsSold (× price = estimatedRevenue). Restocks show as a positive inventoryDelta with 0 units sold. Run it daily or hourly for a sales-velocity time series. It's an estimate: returns, manual stock edits and bundles can affect it.

Which review apps are supported for ratings? Okendo, Yotpo, Junip and Loox (with the 1–5 star distribution; Junip adds recommendedPct), Stamped and REVIEWS.io (read from their public widget APIs), Judge.me (the rating badge on the product page) and any store that publishes schema.org aggregateRating on product pages (many themes do). Stores using other apps (e.g. Fera, Ali Reviews) or no reviews return rating: null. The log says which app was detected and how many products had ratings.

Can I get the review texts, not just ratings? Yes — outputLevel: "reviews". Stores using Judge.me, Okendo, Yotpo, Junip, REVIEWS.io, Loox or Stamped (the seven most common Shopify review apps) are supported; reviews come newest first, up to maxReviewsPerProduct per product (0 = all). The log says which app was found; stores on other apps (Fera, Ali Reviews, Rivyo…) are reported in SUMMARY with "no supported review app".

Does it work with Junip and REVIEWS.io stores? Yes. Junip is detected from the store key its theme block publishes on product pages; REVIEWS.io reviews are matched by the product's variant SKUs (REVIEWS.io groups them per product) and the store's REVIEWS.io name is checked against the product before use. Junip's public API doesn't expose reviewer names, so Junip rows have no author.

How do I collect only negative reviews? Set reviewMaxRating: 2 (and optionally reviewsSince). Pages are read newest first and stop at the date limit, so date-limited runs are fast.

Loox stores are slower — why? Loox rate-limits its public review widget per IP, so the Actor reads Loox one page per second. If Loox still blocks the run, it logs a clear warning, skips the remaining Loox requests (SUMMARY shows the store with an error) and other stores carry on; run again later or with fewer products.

Why do several products show the same rating? Some stores group reviews across variants of one product line (e.g. all colors of a T-shirt pack share one review pool in Okendo or Judge.me). That is the number the store itself shows to shoppers.

Does includeRatings cost more? No extra charge per row — it only adds one request per product, so big catalogs take a bit longer. Use maxProductsPerStore, a collection URL or keywords to keep runs short.

Is it legal? It reads only public product information that the store publishes for browsing and shopping. Review rows contain only what the store shows publicly on its product pages (reviewer display name, usually first name + initial, and country on Judge.me) — no emails, phone numbers or other contact data.

Can I see which apps a Shopify store uses? Yes — outputLevel: "store" checks the homepage for 60+ apps and pixels (email/SMS, subscriptions, reviews, support chat, loyalty, search, BNPL, returns, cross-border, ads & analytics, page builders) and reads the Shopify theme name. Apps that load only through a tag manager or only on other pages can be missed.

How do I know how often a competitor launches products? Use outputLevel: "store": newProductsLast30Days, newProductsLast90Days, lastProductLaunchAt and launchesByMonth (last 12 months) are based on each product's creation date, so re-published old products don't count as new.

More tools from the same developer