Shopify Scraper & Price Tracker - Products, Stock, Alerts avatar

Shopify Scraper & Price Tracker - Products, Stock, Alerts

Pricing

from $0.70 / 1,000 result rows

Go to Apify Store
Shopify Scraper & Price Tracker - Products, Stock, Alerts

Shopify Scraper & Price Tracker - Products, Stock, Alerts

Shopify scraper & API: store and product scraper for any store, collection or product link, with variants, prices per country, stock, images, videos. Shopify competitor price tracker & monitor with price history and restock alerts: price drops, new and removed products, to Slack, Discord or Teams.

Pricing

from $0.70 / 1,000 result rows

Rating

0.0

(0)

Developer

Akhil rajesh

Akhil rajesh

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Features

Limited permissions

Share

Shopify Scraper & Price Tracker

Scrape any Shopify store's products, prices and stock, and track what changes. Give it a store, a collection link or a product link and get every product with its variants, prices in the currency of the country you pick, compare-at (sale) prices, stock per variant, SKU, barcode, vendor, product type, tags, every image, product videos, the full HTML description, SEO title and description, subscription plans, the collections it belongs to and links. A store's /collections link lists its collections, and Shopify's own "you may also like" products can be added to each row. Switch on Only changes and schedule it: each run returns only new products, price drops and rises, products back in stock, sold out, newly on sale or removed, and can post them to Slack, Discord or Microsoft Teams.

Why this scraper

  • Any Shopify store, no login, no API key. It reads the store's own Storefront API, the one Shopify gives every storefront, so the data is what the store shows its shoppers.
  • Best sellers or newest first. Shopify's own best-seller order, newest products, price low to high or high to low, or the store's order. Most scrapers only read /products.json, which has no best-seller order and no local prices.
  • Prices for a country. Set Country to United Kingdom, Canada or DE and prices come in that market's currency, exactly as the store charges there. A store that doesn't sell to that country is named, and its own prices are kept.
  • Stock per variant. Every size and colour with its price, compare-at price, SKU, barcode, weight and whether it can be bought now; variantsInStock counts them.
  • Change tracking built in. New products, price drops and rises past a minimum %, back in stock, sold out, newly on sale and removed, each reported once, with every price the tracker has seen (trackedPrices).
  • The whole product page. Every image with its size, hosted videos (the best MP4) and YouTube or Vimeo links, the description as the store's own HTML, SEO title and description, subscribe-and-save plans, and the product's collections. Switch off Product details for lean rows read 250 at a time.
  • Recommendations and collection lists. Up to 10 of Shopify's own recommended products per row, and a store's whole list of collections from its /collections link.
  • Already using another Shopify scraper? Its input works here as it is: startUrls, domains, maxRequestsPerCrawl, maxProducts and maxRecommendationsPerProduct are read with the same meaning, so a saved task or API call can switch by changing only the Actor's name.
  • Alerts where your team works. Paste a Slack, Discord or Teams webhook and each change is posted once.
  • Filters that run on the store's side. Product types, stock and price ranges are sent with the request where Shopify allows, so a filtered run of a 20,000-product store reads only what matches.

Use cases

  • Competitor price monitoring: watch rival stores' prices and sales every day, with alerts for drops.
  • Restock alerts: know the moment a sold-out product or size comes back.
  • New product tracking: see what a brand launches, newest first.
  • Market research and dropshipping: a store's best sellers, price ranges, vendors and product types.
  • Catalogue exports: every product and variant of a store as JSON, CSV or Excel.

How to use it in 4 steps

  1. Paste one or more stores (allbirds.com), collection links (https://www.allbirds.com/collections/mens) or product links into Stores, collections or products.
  2. Pick Sort by and, if you want local prices, a Country.
  3. Set Max results (rows in all) and any filters.
  4. Click Start. For tracking, switch on Only changes, add a webhook if you like, and schedule the run.

What you get

One row per product (or per variant, with One row per variant):

{
"type": "product",
"store": "www.allbirds.com",
"storeName": "Allbirds",
"rank": 1,
"country": "US",
"productId": "1878193471557",
"handle": "mens-wool-runners",
"title": "Men's Wool Runner - Natural Grey (Light Grey Sole)",
"vendor": "Allbirds",
"productType": "Shoes",
"price": 110,
"onSale": false,
"currency": "USD",
"available": true,
"variantsCount": 7,
"variantsInStock": 3,
"options": [{"name": "Size", "values": ["8", "9", "10", "11", "12", "13", "14"]}],
"tags": ["allbirds::gender => mens", "allbirds::material => wool", "shoprunner"],
"url": "https://www.allbirds.com/products/mens-wool-runners",
"imageUrl": "https://cdn.shopify.com/s/files/1/1104/4168/files/Allbirds_WL_RN_SF_PDP_Natural_Grey_LAT.png?v=1751143404",
"variants": [
{"variantId": "31338073981072", "title": "8", "sku": "WR3MNCW080", "barcode": "843416126274", "price": 110,
"currency": "USD", "available": false, "options": {"Size": "8"}, "weight": 1.872, "weightUnit": "POUNDS"}
],
"createdAt": "2018-11-12T22:25:43Z",
"publishedAt": "2026-09-25T23:06:01Z",
"scrapedAt": "2026-11-12T23:40:00.000Z"
}

A real row from Allbirds' best sellers (2026-11-12), with its tags and variants cut short here. Fields a product doesn't have (no compare-at price, for one) are left out of its row.

FieldWhat it is
price, maxPriceThe lowest and highest variant price, in currency
compareAtPrice, discountPercent, onSaleThe store's "was" price and the discount, when a variant is on sale
available, backorderWhether it can be bought now, and whether that's on backorder
variantsCount, variantsInStockVariants in all, and those that can be bought
variantsEvery variant: id, title, options, price, compare-at price, stock, SKU, barcode, weight, image
vendor, productType, tagsThe store's own catalogue fields
rankPosition in the order you picked, per store or collection
descriptionThe product description as text (first 1,000 characters)
countryThe market the prices are for
imagesEvery product image (up to 10): url, alt, width, height
videosHosted videos (type: video, the tallest MP4) and YouTube or Vimeo links (type: externalVideo, with host), each with previewImageUrl
descriptionHtmlThe description as the store's HTML (up to 20,000 characters)
seoTitle, seoDescriptionThe product's search-engine title and description, when the store set them
sellingPlans, requiresSellingPlanSubscription plans (group, name, recurring), and whether the product can only be bought on one
collectionsThe collections the product is in (up to 10): handle, title
recommendationsWith Recommendations per product: Shopify's recommended products, each with id, title, vendor, price, stock, link and image

With Only changes, rows also carry change (and changes when there are several), previousPrice, previousAvailable, changeAmount, changePercent, trackedPrices (every price the tracker has seen, by date), firstSeenDate and lastSeenDate.

A store's /collections link gives one collection row per collection: collectionId, handle, title, description, updatedAt, url and imageUrl.

A store, collection or product the Actor can't read gets a free notFound row that says why.

How to use it

Stores, collections and products

  • A store: allbirds.com, https://kith.com, or a .myshopify.com address. The Actor follows the store to its own domain.
  • A collection: https://www.allbirds.com/collections/mens. Only its products, in the collection's order when you pick Store order.
  • A product: https://www.allbirds.com/products/mens-wool-runners, with all of its variants.
  • A store's collections: https://www.allbirds.com/collections. One row per collection, to pick which ones to read next.

Several inputs share Max results evenly; a store with fewer products gives its unused share to the others. Max products per store caps how far each store is read (10,000 unless set).

Sort and country

Sort by: best selling (Shopify's own order), newest, price low to high, price high to low, title, or store order. Country takes a name or a two-letter code; the store's own currency is used when it's empty.

Filters

Keywords (title, vendor, type or tags hold every word), words to exclude, vendors, product types, tags, minimum and maximum price, in stock only, on sale only, and published within N days. Product types, stock and (without a country) prices are applied by Shopify itself; a product type the store doesn't have is named with the types it does have, before anything is read.

Product details and recommendations

Product details (on unless switched off) adds images, videos, the HTML description, SEO texts, subscription plans and collections. Shopify limits how much one request may ask for, so with details a request reads 60 products; without them, 250. Recommendations per product (0 to 10, off unless set) asks Shopify for each product's recommendations, one request per product, so it slows a run down: use it on the rows you need.

Switching from another Shopify scraper

Paste your existing input. These names are read as they are meant there: startUrls and domains (stores), maxRequestsPerCrawl (Max results, 0 for no limit), maxProducts (per store, 0 for the whole store), maxRecommendationsPerProduct (capped at Shopify's 10). Proxy settings aren't needed and are set aside with a note. Stock counts per variant (grabRealInventory, includeInventoryDetails) aren't available without the store's own token: Shopify answers "access denied" to everyone else, so rows say whether each variant can be bought instead.

Tracking changes on a schedule (Shopify price tracker)

Switch on Only changes and schedule the Actor (daily is typical). The first run reads each store and saves it as the baseline: its rows come with change: firstRun. From then on, each run returns only what changed since the last one:

ChangeWhen
newProductA product that wasn't there last run (one that was only new to the read, such as a collection it joined, is recorded quietly)
priceDrop, priceIncreaseThe lowest price moved by at least Minimum price change (%) (1% unless set)
backInStock, soldOutIt became available, or stopped being available
onSaleA compare-at price appeared
removedThe store no longer has it (checked by id when a store was read only in part)

Tracking watches products: a /collections list isn't tracked, and recommendations are left out of tracked runs.

Change types limits the output to the changes you want; the others are still recorded. Each store, collection or product has its own history for each combination of settings (country, filters, sort), kept in the named store History name (shopify-scraper-history unless set). A run stopped by an abort, a timeout or your spending limit records what it delivered; the rest comes with the next run.

Alerts in Slack, Discord or Microsoft Teams

Paste a webhook URL in Alert webhook URL (Slack incoming webhook, Discord webhook, Teams Workflows URL, or any HTTPS endpoint for JSON). The first run posts a short "alerts are set up" message; from the next run on, the changes picked in Alert on (new products, price drops and restocks unless set) are posted, at most 50 a run, most important first. Alerts switch Only changes on. The URL is treated as a secret and never written to the log.

Run summary for pipelines

Each run saves RUN_SUMMARY in its key-value store: rows by type, changes, stores read (products, currency, in stock, on sale, median price), not found, not loaded, notes and the requests made.

How much does it cost?

You pay $1.00 per 1,000 rows (products, variants with One row per variant, or collections), less on paid Apify plans, plus a start fee of $0.00005 per run. Platform usage is included. Not-found rows are free. With Only changes you pay only for the changes returned.

Apify planPer 1,000 rows
Free$1.00
Starter$0.90
Scale$0.80
Business and above$0.70
RunRowsCost (Free plan)
A store's 500 best sellers500about $0.50
A 5,000-product catalogue5,000about $5.00
10 competitor stores tracked daily, about 30 changes a day30 a dayabout $0.03 a day

To cap spending, lower Max results or set a maximum cost per run in the run options; the Actor stops cleanly at the limit.

Good to know

  • Speed: one request a second per store, 60 products per request with Product details and 250 without: a 5,000-product store in about 90 seconds with details, 30 without. Stores are read one after another. Recommendations add one request per product.
  • Identified, not disguised: requests carry this Actor's name in their User-Agent. Stores that turn away automated visitors (some put a browser check in front of a custom storefront) are named in the run summary and not worked around.
  • Headless stores: a store whose shop runs on its own front end, with Shopify only at checkout, may not answer; it gets a notFound row that says so.
  • What isn't collected: inventory counts (Shopify's public API answers "access denied" without the store's own token; rows say whether each variant can be bought), customer data and reviews.

FAQ

Can it track a Shopify competitor's prices? Yes: put the store (or a collection) in, switch on Only changes and schedule it. Price drops and rises past your minimum %, restocks and new products come back once each.

Does it work on any Shopify store? On stores whose storefront answers Shopify's public Storefront API, which is nearly all of them. Stores with a separate front end or a bot check in front are named, not read.

Can I get prices in another currency? Yes, through Country: the prices are the ones the store charges shoppers in that country, in its currency.

How do I scrape only one collection? Paste the collection's link (.../collections/<name>). To see which collections a store has, paste .../collections first.

Does it get product images and videos? Yes, every image (up to 10 per product) with its size, and hosted videos as MP4 links, plus YouTube or Vimeo links.

Is there a Shopify scraper API? Yes: start a run through Apify's API (or the run-sync-get-dataset-items endpoint) with the same JSON input, and get the rows back as JSON, CSV or Excel.

Is it legal? It reads the product catalogue a store publishes to every shopper, through Shopify's public Storefront API, at a modest pace and without logging in. Use the data in line with each store's terms and the laws that apply to you.

Other Actors by this developer

Disclaimer

This Actor is an independent tool. It is not affiliated with, endorsed by or sponsored by Shopify Inc. or any store it reads. Use the data in line with each store's terms and the laws that apply to you.