Shopify & WooCommerce Price Scraper: Real Discounts avatar

Shopify & WooCommerce Price Scraper: Real Discounts

Pricing

from $1.00 / 1,000 products

Go to Apify Store
Shopify & WooCommerce Price Scraper: Real Discounts

Shopify & WooCommerce Price Scraper: Real Discounts

Scrape the products of Shopify and WooCommerce stores that keep their product feed open: price, compare-at price and the discount per variant. Scheduled runs bill only products whose price or stock changed.

Pricing

from $1.00 / 1,000 products

Rating

0.0

(0)

Developer

Honest Data

Honest Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

20 hours ago

Last modified

Categories

Share

What does Shopify & WooCommerce Price Scraper do?

In short: Returns product prices from public Shopify /products.json and WooCommerce Store API endpoints, with the real discount computed from price vs compare-at (only where compare-at is higher), per variant and with stock, plus an only-new-or-changed mode for monitoring. $0.001 per product, no browser needed; stores that can't be read come back as free miss rows.

Price trackers, dropshippers, deal sites, competitor-watchers and market researchers keep asking the same question: what does this store charge today, what is really on sale, and what changed since last week? Shopify stores publish their catalogue as open JSON (/products.json) and WooCommerce stores through the public Store API; this actor reads both, adds up each product's variants, and turns them into one clean row per product. Schedule it with Only new or changed since the last run and each run returns, and bills, only what moved.

It also shows what a price list can't tell you on its own: the discount against the store's own compare-at price per variant (counted only where that price is higher), whether anything is in stock, and a note that a store can set a compare-at price to anything and the feed doesn't say how long a sale has run.

What you get

Sample output (a real row from a test run on allbirds.com, trimmed to two variants):

{
"id": "allbirds.com|7091689848912|e0cdd296df",
"store": "allbirds.com",
"platform": "shopify",
"title": "Women's Tree Dasher 2 - Weathered White (Weathered White Sole)",
"url": "https://allbirds.com/products/womens-tree-dashers-weathered-white",
"vendor": "Allbirds",
"productType": "Shoes",
"currency": "USD",
"priceMin": 70,
"priceMax": 70,
"onSale": true,
"maxDiscountPercent": 50,
"variantCount": 13,
"inStock": false,
"variants": [
{"id": "40874029514832", "title": "5", "sku": "A11459W050", "price": 70, "compareAtPrice": 140, "discountPercent": 50, "available": false},
{"id": "40874029547600", "title": "5.5", "sku": "A11459W055", "price": 70, "compareAtPrice": 140, "discountPercent": 50, "available": false}
]
}
FieldMeaning
title, url, vendor, productType, tagsAs the store lists them (WooCommerce: first category as productType)
priceMin, priceMax, currencyLowest and highest variant price. Currency is null when the store doesn't state it
onSale, maxDiscountPercentTrue / biggest percent off, only where a variant's compare-at price is above its price
variantsEvery variant with its own price, compare-at price, discount and stock flag
inStockTrue when at least one variant is in stock; null when the feed has no stock flag
createdAt, publishedAt, updatedAtShopify's own timestamps. updatedAt moves on any edit, so it is not when a sale started
idProduct plus a fingerprint of every variant's price, compare-at price and stock. It changes when those change

Honest limits.

  • The feed doesn't say when a sale started or how long it has run, so there is no "sale length" field. Scheduled runs show you when a price changed from the day you started watching.
  • A compare-at price is whatever the store typed in. A 50% discount against an inflated regular price is still 50% in this data; compare across your own runs and stores.
  • Only stores that leave their product feed on can be read. Of 13 well-known Shopify stores we tried, 10 worked (allbirds, gymshark, kith, colourpop, brooklinen, taylorstitch, tentree, glossier, rothys, fashionnova); mejuri.com and ruggable.com had no open feed, and bombas.com refused its product feed with HTTP 429 in 4 of our 5 runs, including through residential IPs. Those come back as free rows with the reason (no_open_feed, blocked). Addresses that can't be reached at all come back as unreachable.
  • Products with no positive price (placeholder entries, $0 samples) are skipped and not billed.
  • Prices are in the currency of the store's default market. Stores that localise prices by country show the default one. Currency comes from the store's /meta.json and is null if that isn't readable.
  • WooCommerce rows are one row per product with a single "variant" entry. For variable products the row shows the price range (priceMin, priceMax) and onSale as the store reports it, but no discount percent. WooCommerce support is verified on two stores (woocommerce.com, mercantile.wordpress.org, both run by Automattic, simple products); of 10 other stores we tried, none exposed an open WooCommerce feed (some were Shopify, some had no open feed or refused).
  • Catalogues are read in the store's own order, 250 products (Shopify) or 100 (WooCommerce) per request with a one-second pause between requests.
  • Filters match whole words ("boot" matches "Boot" but not "Bootcut").
  • "Only new or changed" remembers the latest state of each product, up to 50,000 products per input. Past that, the oldest are forgotten and those products are delivered and billed again; the run log and the seenIdsForgotten field of the OUTPUT record say when it happens.

How to use it

  1. Enter store addresses (allbirds.com or https://www.allbirds.com), one per line.
  2. Optionally keep only products that are on sale, in stock, or have a word in their title.
  3. Click Start. Results appear in the Overview tab; export to CSV, JSON or Excel, or use the API.
  4. For price monitoring: schedule it daily or weekly with Only new or changed since the last run on and a Max products per store above the store's size (the default 100 is a cap, and the cap is applied before the change check). The first run delivers everything; later runs deliver only what changed.

How much does it cost?

$0.001 per product delivered, so 1,000 products cost $1. Stores that can't be read and filters that match nothing are listed free with the reason, and with "only new or changed" on, products whose price and stock haven't changed on the same input are free. Changing the input (stores, filters, max products) starts a fresh memory, so the next run delivers and bills those products again. There's also a tiny start fee of $0.00005 per run. Apify's free plan includes $5 of monthly credit.

Input

See the Input tab. Max products per store keeps the store's own order. The memory for "only new or changed" is kept per input, so two schedules with different stores or filters don't share state. Proxy is off by default because the feeds are open; turn Apify Proxy on if a store refuses your runs (a few refuse anyway).

Tips

  • Start with one store and 20 products to see the fields, then add stores.
  • Run it daily with On sale only and Only new or changed for a deal alert feed.
  • Compare priceMin between runs to catch price cuts and rises; stock flips show up as changed rows.
  • Sort by maxDiscountPercent, but check variants: a 60% discount on one size is not 60% on the product.

FAQ

Can I use it from Claude, ChatGPT or Cursor? Yes, through Apify's MCP server: https://mcp.apify.com?tools=honestdata/shopify-store-prices.

Does it collect personal data? No. It reads public product listings, not customers or orders.

Is it legal? It reads the public product data stores publish on their own sites. You are responsible for how you use it; check each store's terms and your local laws.

Something broke? Open an issue on the Issues tab. We test every tool every morning and answer fast.

More from Honest Data

Found it useful? A short review helps others find it.