Shopify Store Products & Price Tracker — Any Store avatar

Shopify Store Products & Price Tracker — Any Store

Pricing

from $0.40 / 1,000 products

Go to Apify Store
Shopify Store Products & Price Tracker — Any Store

Shopify Store Products & Price Tracker — Any Store

Any Shopify store's catalogue as clean rows: price, compare-at price, sale flag, stock, SKU, vendor, tags and image per variant. Run it again or on a schedule for price drops, restocks, sell-outs, new and removed products since the last run. Store domains or collection URLs. No login.

Pricing

from $0.40 / 1,000 products

Rating

0.0

(0)

Developer

Northbell

Northbell

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 hours ago

Last modified

Share

Shopify Store Products & Price Tracker

Give it any Shopify store — a domain like allbirds.com or a collection URL — and get every product as clean rows: price, compare-at price, sale flag, in-stock flag, SKU, vendor, product type, tags and image for each variant. $0.50 per 1,000 rows, no login, no API key. Most Shopify product scrapers stop at today's list; this one also tells you what changed since your last run.

Run it again — or put it on a daily schedule — and every row also says what changed since the last run: the old price and the price change, items back in stock or sold out, products that are new, and a free summary row per store that counts them and lists the ids of removed products. A plain product scraper hands you today's list and leaves the comparison to you; this is the part of competitor price and stock monitoring you would otherwise build yourself.

What you get

One row per variant (size, colour…) — or per product, if you switch variants off.

FieldWhat it is
type, observedAtproduct for these rows; when the row was read (UTC)
store, collectionthe store (without www.) and, when you read a collection, its handle
productId, handle, title, vendor, productType, tags, url, imageUrlthe product, as the store lists it; url opens the exact variant when variants are on
variantId, variantTitle, sku, variantCountthe variant, and how many variants the product has
price, compareAtPrice, onSale, discountPercent, currencycurrent price, the store's compare-at price when it set one, whether that makes it a sale (onSale: compare-at is above the price), the discount, and the currency the prices are in
availabletrue if the variant can be bought (Shopify's public feed says in stock or not, not how many)
createdAt, publishedAt, updatedAtwhen the product was created, published and last changed (UTC)
isNew, previousPrice, priceChange, priceChangePercent, becameAvailable, becameUnavailablethe change since your previous run (null on the first run). priceChange is new minus old, so negative means cheaper

Each store also gets one free store-summary row:

FieldWhat it is
products, variants, rows, onSaleProducts, onSaleSharewhat was read, and the share of products with at least one variant on sale
catalogueComplete, stoppedBecausetrue when the whole catalogue was read; otherwise limit (Max products per store), pages (the store hands out fewer products per page than asked for) or error
newSinceLastRun, removedSinceLastRun, removedSinceLastRunCountnew products, and the ids of products that disappeared (first 500)
priceChanges, priceDrops, priceIncreases, restocked, soldOuthow many rows (variants, or products) changed price, came back in stock or sold out
firstRun, previousRunAt, country, currency, noterun context, and a plain-English note when something limits the comparison

Use it for

  • Competitor price monitoring — schedule it daily on the stores you compete with and see every price drop and increase, with the old price
  • Sale and discount watch — onSale, discountPercent and onSaleShare show how deep and how wide a competitor's promotion is
  • Restock and sell-out alerts — becameAvailable and becameUnavailable per size, for resellers and for buyers waiting on a drop
  • Assortment tracking — new products and removed products per store, per collection

Input

{ "stores": ["allbirds.com", "https://colourpop.com"], "maxProductsPerStore": 1000, "includeVariants": true, "country": "US" }
  • Stores — domains or store URLs, one per line. A collection URL such as https://www.allbirds.com/collections/mens-sneakers reads just that collection; the Collection field does the same for every store in the list.
  • Max products per store — 1,000 by default, up to 20,000.
  • One row per variant — on by default. Off gives one row per product with its lowest price, and available is true if any variant is in stock.
  • Country — which country's prices to read (default US).

The previous values are remembered per store, collection, country and row mode in a named key-value store in your Apify account, so the second run of the same Actor already shows changes. Schedule it (Apify → Schedules) for a daily history.

Pricing

$0.50 per 1,000 rows, plus $0.01 per run. With variants on, every size and colour is a row: a store with 700 products and 7,500 variants is about $3.75, and the same store with variants off (700 rows) is about $0.35. Error rows and store-summary rows are free. The $0.01 run-start fee is the one charge every run pays, even one that returns nothing.

Notes

  • Public data only: the product feed every Shopify store publishes for visitors. No customer, reviewer or other personal data, and no product descriptions are returned. Titles, vendors and tags are cleaned of HTML and entities (& becomes &).
  • Prices follow the country. Stores that sell in several currencies show a different price per country, so the Actor pins one country (US unless you change it; UK is read as GB) and reads the currency from the store's own reply. currency is null only if a store does not report one. Changing country starts a separate history for that store, and if a store switches currency between runs the summary says so and does not report price changes.
  • New and removed products need the whole catalogue. They are only reported when this run and the previous run both read everything (catalogueComplete is true). If a run stops at Max products per store, isNew can be null for products it has not seen before and removedSinceLastRun is null — set the limit above the store's size to track them. With variants on, a new size on an old product is isNew: true, while newSinceLastRun in the summary counts products.
  • Fields that are empty on some rows by nature: compareAtPrice is filled only where the store set a compare-at price (it can equal the price, then onSale is false) and discountPercent only while onSale is true; productType, sku and imageUrl are blank where the store leaves them blank; collection appears only when you read a collection; the six change fields are null on a store's first run (and everything but isNew for an item that is new). With variants off, variantId, variantTitle and sku are null and price is the lowest variant price. variantTitle is Default Title for products with a single variant — that is Shopify's own name for it.
  • Some stores cannot be read: those behind a bot-protection wall (Cloudflare and similar), password-protected stores, and sites that are not on Shopify. Each gets a free error row saying why — nothing is made up. Not sure a competitor runs on Shopify? The Tech Stack Detector tells you what a site is built with.
  • Shopify's feed pages through at most 25,000 products, so a single store is capped at 20,000. A catalogue of 5,400 products and 24,500 variant rows is read in about 25 seconds and fits in the default 256 MB; for catalogues several times bigger, set the run's memory to 512 MB.

Looking at the Shopify app side instead? See the Shopify App Reviews Scraper.

For AI agents

{"stores": ["allbirds.com"], "maxProductsPerStore": 5} returns the variant rows of 5 products (about 60 rows) with price, compare-at price and availability, plus one free store-summary row. Run it again with the same input to get priceChange, becameAvailable and isNew filled in. Rows have type: product, store-summary or error.

**Something broke or looks wrong?** Open an issue on this Actor's Issues tab and I'll look at it. **Found it useful?** A short review on the Store page helps other people find it.