Shopify Products Scraper & API: Any Store, Prices, Stock
Pricing
from $0.70 / 1,000 product rows
Shopify Products Scraper & API: Any Store, Prices, Stock
Any Shopify store's products as JSON: prices as numbers, variants, SKUs, stock. Monitor mode returns only price and stock changes. $1 per 1,000 rows.
Pricing
from $0.70 / 1,000 product rows
Rating
0.0
(0)
Developer
Dodo Data
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Share
Get every product of any Shopify store as clean JSON. 36 fields per product (48 per variant row), 439 products from two stores in 9 seconds: prices as numbers, sale and stock flags, every variant with its SKU, images, and the store's own currency. One row per product, or one row per variant for SKU-level price and stock monitoring.
Paste store URLs (or collection URLs). The Actor reads the public product feed every Shopify storefront serves, so it is fast, light on the store, and returns exactly what the shop shows.
What you get
Ten real rows from the run of 2026-09-17 (shortened here: descriptions to 120 characters, two variants, one image and five tags per product; the dataset carries everything):
[{"id": "shopify:www.allbirds.com:4373802877072","store": "www.allbirds.com","store_name": "Allbirds","currency": "USD","country": "US","product_id": "4373802877072","title": "Trino® Tubers - Navy Night","handle": "trino-tubers-navy-night","vendor": "Allbirds","product_type": "Socks","tags": ["allbirds::carbon-score => 2.61","allbirds::cfId => color-trino-tm-tubers-navy-night","allbirds::complete => true","allbirds::edition => limited","allbirds::gender => unisex"],"description": "The Trino Tubers is a tube sock that hugs just below your calf and features a no-slip sole. Made with natural materia…","price_min": 4,"price_max": 4,"compare_at_price_max": 16,"on_sale": true,"discount_percent": 75,"available": false,"variants_count": 4,"variants": [{"variant_id": "31338069262480","variant_title": "S (W5-7)","sku": "ST1UNNT101","price": 4,"compare_at_price": 16,"on_sale": true,"available": false,"option1": "S (W5-7)","option2": null,"option3": null,"grams": 99},{"variant_id": "31338069295248","variant_title": "M (W8-10 / M8)","sku": "ST1UNNT102","price": 4,"compare_at_price": 16,"on_sale": true,"available": false,"option1": "M (W8-10 / M8)","option2": null,"option3": null,"grams": 105}],"options": [{"name": "Size","values": ["S (W5-7)","M (W8-10 / M8)","L (W11 / M9-12)","XL (M13-14)"]}],"image": "https://cdn.shopify.com/s/files/1/1104/4168/products/ST1UNNT_SOCKS_NAVY_NIGHT_FRONT.png?v=1666820168","images": ["https://cdn.shopify.com/s/files/1/1104/4168/products/ST1UNNT_SOCKS_NAVY_NIGHT_FRONT.png?v=1666820168"],"created_at": "2020-01-27T18:07:11-08:00","updated_at": "2026-09-17T12:05:43-07:00","published_at": "2026-06-16T11:02:01-07:00","url": "https://www.allbirds.com/products/trino-tubers-navy-night","scraped_at": "2026-09-17T19:05:45.076Z"},{"id": "shopify:www.deathwishcoffee.com:7347711901751","store": "www.deathwishcoffee.com","store_name": "Death Wish Coffee","currency": "USD","country": "US","product_id": "7347711901751","title": "Daily Grind Women's Corduroy Workwear Jacket","handle": "daily-grind-womens-corduroy-workwear-jacket","vendor": "Sportiqe","product_type": "Apparel","tags": ["Apparel","Men","Merch","Sale","Unisex"],"description": "Embrace the daily grind.\nSo soft it’s almost criminal but tough enough to survive the hardest of days, this limited-e…","price_min": 65,"price_max": 65,"compare_at_price_max": 90,"on_sale": true,"discount_percent": 28,"available": true,"variants_count": 5,"variants": [{"variant_id": "41900193808439","variant_title": "S","sku": "UJKINS02","price": 65,"compare_at_price": 90,"on_sale": true,"available": true,"option1": "S","option2": null,"option3": null,"grams": 765},{"variant_id": "41900193841207","variant_title": "M","sku": "UJKINS03","price": 65,"compare_at_price": 90,"on_sale": true,"available": true,"option1": "M","option2": null,"option3": null,"grams": 820}],"options": [{"name": "Size","values": ["S","M","L","XL","2XL"]}],"image": "https://cdn.shopify.com/s/files/1/0271/7209/files/DeathWishCoffee_October2025_Product_WomensJacket_Front_Web.jpg?v=1761234563","images": ["https://cdn.shopify.com/s/files/1/0271/7209/files/DeathWishCoffee_October2025_Product_WomensJacket_Front_Web.jpg?v=1761234563"],"created_at": "2025-09-29T11:53:46-04:00","updated_at": "2026-09-17T15:05:44-04:00","published_at": "2026-08-31T15:18:53-04:00","url": "https://www.deathwishcoffee.com/products/daily-grind-womens-corduroy-workwear-jacket","scraped_at": "2026-09-17T19:05:45.796Z"},{"id": "shopify:www.deathwishcoffee.com:7347711770679","store": "www.deathwishcoffee.com","store_name": "Death Wish Coffee","currency": "USD","country": "US","product_id": "7347711770679","title": "Rough Cut Canvas Jacket","handle": "rough-cut-canvas-jacket","vendor": "Sportiqe","product_type": "Apparel","tags": ["Apparel","Men","Merch","Sale","Unisex"],"description": "Cut through the cold.\nMade of heavyweight cotton canvas, this limited-edition jacket doesn't flinch when the going ge…","price_min": 75,"price_max": 75,"compare_at_price_max": 100,"on_sale": true,"discount_percent": 25,"available": true,"variants_count": 6,"variants": [{"variant_id": "41900193513527","variant_title": "S","sku": "UJBWEST02","price": 75,"compare_at_price": 100,"on_sale": true,"available": true,"option1": "S","option2": null,"option3": null,"grams": 1066},{"variant_id": "41900193546295","variant_title": "M","sku": "UJBWEST03","price": 75,"compare_at_price": 100,"on_sale": true,"available": true,"option1": "M","option2": null,"option3": null,"grams": 1126}],"options": [{"name": "Size","values": ["S","M","L","XL","2XL","3XL"]}],"image": "https://cdn.shopify.com/s/files/1/0271/7209/files/DeathWishCoffee_October2025_Product_MensJacket_Front_Web.jpg?v=1761234420","images": ["https://cdn.shopify.com/s/files/1/0271/7209/files/DeathWishCoffee_October2025_Product_MensJacket_Front_Web.jpg?v=1761234420"],"created_at": "2025-09-29T11:53:00-04:00","updated_at": "2026-09-17T15:05:44-04:00","published_at": "2026-08-31T15:18:52-04:00","url": "https://www.deathwishcoffee.com/products/rough-cut-canvas-jacket","scraped_at": "2026-09-17T19:05:45.796Z"},{"id": "shopify:www.allbirds.com:7369944137808","store": "www.allbirds.com","store_name": "Allbirds","currency": "USD","country": "US","product_id": "7369944137808","title": "Free Returns Coverage","handle": "free-returns-coverage","vendor": "re:do","product_type": "return,package_protection","tags": ["ATTV_GLOBAL_EXCLUSION_TAG","exclude_rebuy","klaviyo_reviews_exclude","NOREVIEWS","redo-package-protection"],"description": "","price_min": 0.8,"price_max": 2.98,"compare_at_price_max": 2.98,"on_sale": false,"discount_percent": 73,"available": true,"variants_count": 2,"variants": [{"variant_id": "42436493115472","variant_title": "$0.80","sku": "x-redo","price": 0.8,"compare_at_price": 0.8,"on_sale": false,"available": true,"option1": "$0.80","option2": null,"option3": null,"grams": 0},{"variant_id": "42436493148240","variant_title": "$2.98","sku": "x-redo","price": 2.98,"compare_at_price": 2.98,"on_sale": false,"available": true,"option1": "$2.98","option2": null,"option3": null,"grams": 0}],"options": [{"name": "Price","values": ["$0.80","$2.98"]}],"image": "https://cdn.shopify.com/s/files/1/1104/4168/files/Screenshot_2026-06-11_at_10.12.01_AM.png?v=1781197934","images": ["https://cdn.shopify.com/s/files/1/1104/4168/files/Screenshot_2026-06-11_at_10.12.01_AM.png?v=1781197934"],"created_at": "2026-06-05T07:14:57-07:00","updated_at": "2026-09-17T12:05:43-07:00","published_at": "2026-09-02T11:33:11-07:00","url": "https://www.allbirds.com/products/free-returns-coverage","scraped_at": "2026-09-17T19:05:45.031Z"},{"id": "shopify:www.allbirds.com:7218356060240","store": "www.allbirds.com","store_name": "Allbirds","currency": "USD","country": "US","product_id": "7218356060240","title": "Men's Strider Explore - Natural Black (Dark Grey Sole)","handle": "mens-strider-explore","vendor": "Allbirds","product_type": "Shoes","tags": ["allbirds::carbon-score => undefined","allbirds::cfId => color-187a11c8f0327fffbdefb2c298f2ce22","allbirds::complete => true","allbirds::edition => classic","allbirds::gender => mens"],"description": "From exploring urban landscapes to tackling the trails (or both), this active shoe is here for it all. Extra-grippy l…","price_min": 130,"price_max": 130,"compare_at_price_max": null,"on_sale": false,"discount_percent": null,"available": false,"variants_count": 13,"variants": [{"variant_id": "41334293889104","variant_title": "8","sku": "A11768M080","price": 130,"compare_at_price": null,"on_sale": false,"available": false,"option1": "8","option2": null,"option3": null,"grams": 919},{"variant_id": "41334293921872","variant_title": "8.5","sku": "A11768M085","price": 130,"compare_at_price": null,"on_sale": false,"available": false,"option1": "8.5","option2": null,"option3": null,"grams": 936}],"options": [{"name": "Size","values": ["8","8.5","9","9.5","10","10.5","11","11.5","12","12.5","13","13.5","14"]}],"image": "https://cdn.shopify.com/s/files/1/1104/4168/files/A11768_25Q4_Strider-Explore-Natural-Black-Dark-Grey-Sole_PDP_LEFT.png?v=1759336475","images": ["https://cdn.shopify.com/s/files/1/1104/4168/files/A11768_25Q4_Strider-Explore-Natural-Black-Dark-Grey-Sole_PDP_LEFT.png?v=1759336475"],"created_at": "2025-09-10T12:47:47-07:00","updated_at": "2026-09-17T12:05:43-07:00","published_at": "2026-08-26T10:22:14-07:00","url": "https://www.allbirds.com/products/mens-strider-explore","scraped_at": "2026-09-17T19:05:45.039Z"},{"id": "shopify:www.allbirds.com:7205198004304","store": "www.allbirds.com","store_name": "Allbirds","currency": "USD","country": "US","product_id": "7205198004304","title": "Women's Dasher NZ - Blizzard/Deep Navy (Blizzard Sole)","handle": "womens-dasher-nz-blizzard-deep-navy","vendor": "Allbirds","product_type": "Shoes","tags": ["allbirds::carbon-score => undefined","allbirds::cfId => color-c09d6e63b4a11feebc68f762220735d5","allbirds::complete => true","allbirds::edition => classic","allbirds::gender => womens"],"description": "A new take on our fan-favorite Dasher, made for busy days and spontaneous plans. Lightweight, breathable comfort keep…","price_min": 140,"price_max": 140,"compare_at_price_max": null,"on_sale": false,"discount_percent": null,"available": true,"variants_count": 13,"variants": [{"variant_id": "41271218896976","variant_title": "5","sku": "A12464W050","price": 140,"compare_at_price": null,"on_sale": false,"available": true,"option1": "5","option2": null,"option3": null,"grams": 761},{"variant_id": "41271218929744","variant_title": "5.5","sku": "A12464W055","price": 140,"compare_at_price": null,"on_sale": false,"available": true,"option1": "5.5","option2": null,"option3": null,"grams": 761}],"options": [{"name": "Size","values": ["5","5.5","6","6.5","7","7.5","8","8.5","9","9.5","10","10.5","11"]}],"image": "https://cdn.shopify.com/s/files/1/1104/4168/files/A12464_26Q1_Dasher-NZ-Blizzard-Deep-Navy-Blizzard_PDP_LEFT_e38509e9-51da-49a3-a794-53de6797a109.png?v=1768948779","images": ["https://cdn.shopify.com/s/files/1/1104/4168/files/A12464_26Q1_Dasher-NZ-Blizzard-Deep-Navy-Blizzard_PDP_LEFT_e38509e9-51da-49a3-a794-53de6797a109.png?v=1768948779"],"created_at": "2025-08-06T20:08:21-07:00","updated_at": "2026-09-17T12:05:43-07:00","published_at": "2026-08-24T09:55:31-07:00","url": "https://www.allbirds.com/products/womens-dasher-nz-blizzard-deep-navy","scraped_at": "2026-09-17T19:05:45.040Z"},{"id": "shopify:www.allbirds.com:7205191974992","store": "www.allbirds.com","store_name": "Allbirds","currency": "USD","country": "US","product_id": "7205191974992","title": "Men's Dasher NZ - Anthracite (Dark Anthracite Sole)","handle": "mens-dasher-nz-anthracite","vendor": "Allbirds","product_type": "Shoes","tags": ["allbirds::carbon-score => undefined","allbirds::cfId => color-ec0dcc8441508c674c885b8c8a990cfa","allbirds::complete => true","allbirds::edition => limited","allbirds::gender => mens"],"description": "A new take on our fan-favorite Dasher, made for busy days and spontaneous plans. Lightweight, breathable comfort keep…","price_min": 140,"price_max": 140,"compare_at_price_max": null,"on_sale": false,"discount_percent": null,"available": true,"variants_count": 13,"variants": [{"variant_id": "41271176757328","variant_title": "8","sku": "A12417M080","price": 140,"compare_at_price": null,"on_sale": false,"available": false,"option1": "8","option2": null,"option3": null,"grams": 914},{"variant_id": "41271176790096","variant_title": "8.5","sku": "A12417M085","price": 140,"compare_at_price": null,"on_sale": false,"available": false,"option1": "8.5","option2": null,"option3": null,"grams": 927}],"options": [{"name": "Size","values": ["8","8.5","9","9.5","10","10.5","11","11.5","12","12.5","13","14","15"]}],"image": "https://cdn.shopify.com/s/files/1/1104/4168/files/A12416_26Q1_Dasher-NZ-Anthracite-Dark-Anthr_PDP_LEFT.png?v=1768948005","images": ["https://cdn.shopify.com/s/files/1/1104/4168/files/A12416_26Q1_Dasher-NZ-Anthracite-Dark-Anthr_PDP_LEFT.png?v=1768948005"],"created_at": "2025-08-06T18:54:33-07:00","updated_at": "2026-09-17T12:05:43-07:00","published_at": "2026-08-24T09:53:01-07:00","url": "https://www.allbirds.com/products/mens-dasher-nz-anthracite","scraped_at": "2026-09-17T19:05:45.041Z"},{"id": "shopify:www.deathwishcoffee.com:7237656248375","store": "www.deathwishcoffee.com","store_name": "Death Wish Coffee","currency": "USD","country": "US","product_id": "7237656248375","title": "Death Grip Bottle Opener","handle": "death-grip-bottle-opener","vendor": "BAMKO","product_type": "Accessories","tags": ["Accessories","Gifting","Merch"],"description": "To the window...\nTo literally any wall you can think of. Perfect for any basement bar, man cave or she-shed, you won'…","price_min": 8,"price_max": 8,"compare_at_price_max": null,"on_sale": false,"discount_percent": null,"available": true,"variants_count": 1,"variants": [{"variant_id": "41524646871095","variant_title": "Default Title","sku": "UWMDWC25","price": 8,"compare_at_price": null,"on_sale": false,"available": true,"option1": "Default Title","option2": null,"option3": null,"grams": 54}],"options": [{"name": "Title","values": ["Default Title"]}],"image": "https://cdn.shopify.com/s/files/1/0271/7209/files/DeathWishCoffee_March2025_Product_BottleOpener_Front2_Web.jpg?v=1741809353","images": ["https://cdn.shopify.com/s/files/1/0271/7209/files/DeathWishCoffee_March2025_Product_BottleOpener_Front2_Web.jpg?v=1741809353"],"created_at": "2025-03-06T09:27:54-05:00","updated_at": "2026-09-17T15:05:44-04:00","published_at": "2026-09-16T15:20:29-04:00","url": "https://www.deathwishcoffee.com/products/death-grip-bottle-opener","scraped_at": "2026-09-17T19:05:45.789Z"},{"id": "shopify:www.deathwishcoffee.com:7509119434807","store": "www.deathwishcoffee.com","store_name": "Death Wish Coffee","currency": "USD","country": "US","product_id": "7509119434807","title": "Call of the Wild Mug","handle": "call-of-the-wild-mug","vendor": "Deneen Pottery","product_type": "Mugs","tags": ["HCM","Merch","Mug","Society of Strong Coffee"],"description": "The chase never ends.\nInspired by the elusive nature and enduring power of the stag, this limited-edition mug is a sy…","price_min": 38,"price_max": 38,"compare_at_price_max": null,"on_sale": false,"discount_percent": null,"available": true,"variants_count": 1,"variants": [{"variant_id": "42401565179959","variant_title": "Default Title","sku": "UMSTAG26K","price": 38,"compare_at_price": null,"on_sale": false,"available": true,"option1": "Default Title","option2": null,"option3": null,"grams": 794}],"options": [{"name": "Title","values": ["Default Title"]}],"image": "https://cdn.shopify.com/s/files/1/0271/7209/files/DeathWishCoffee_September2026_Product_Mug_Stag_Front_EA.jpg?v=1789400417","images": ["https://cdn.shopify.com/s/files/1/0271/7209/files/DeathWishCoffee_September2026_Product_Mug_Stag_Front_EA.jpg?v=1789400417"],"created_at": "2026-08-20T16:27:00-04:00","updated_at": "2026-09-17T15:05:44-04:00","published_at": "2026-09-15T10:34:05-04:00","url": "https://www.deathwishcoffee.com/products/call-of-the-wild-mug","scraped_at": "2026-09-17T19:05:45.791Z"},{"id": "shopify:www.deathwishcoffee.com:7459550658615","store": "www.deathwishcoffee.com","store_name": "Death Wish Coffee","currency": "USD","country": "US","product_id": "7459550658615","title": "Allfather’s Aloha Button Up","handle": "allfathers-aloha-button-up","vendor": "BAMKO","product_type": "Apparel","tags": ["Apparel","Men","Merch","Unisex","Valhalla Java"],"description": "Dress like a legend.\nIt's time to trade your boring button-up for one worthy of the gods. Donning a full front-to-bac…","price_min": 40,"price_max": 40,"compare_at_price_max": null,"on_sale": false,"discount_percent": null,"available": true,"variants_count": 6,"variants": [{"variant_id": "42247555907639","variant_title": "S","sku": "USHVJA02","price": 40,"compare_at_price": null,"on_sale": false,"available": true,"option1": "S","option2": null,"option3": null,"grams": 236},{"variant_id": "42247555940407","variant_title": "M","sku": "USHVJA03","price": 40,"compare_at_price": null,"on_sale": false,"available": true,"option1": "M","option2": null,"option3": null,"grams": 252}],"options": [{"name": "Size","values": ["S","M","L","XL","2XL","3XL"]}],"image": "https://cdn.shopify.com/s/files/1/0271/7209/files/DeathWishCoffee_June2026_Product_ValhallahJava_GraphicShirt_Front_Web2.jpg?v=1782323548","images": ["https://cdn.shopify.com/s/files/1/0271/7209/files/DeathWishCoffee_June2026_Product_ValhallahJava_GraphicShirt_Front_Web2.jpg?v=1782323548"],"created_at": "2026-05-27T11:05:04-04:00","updated_at": "2026-09-17T15:05:44-04:00","published_at": "2026-09-10T09:40:11-04:00","url": "https://www.deathwishcoffee.com/products/allfathers-aloha-button-up","scraped_at": "2026-09-17T19:05:45.792Z"}]
In that run 23 of 439 products were on sale (priced below their compare-at price) and 246 were in stock.
What people use it for
- Monitor competitor prices and stock. For example, "every morning, which of my rival's SKUs changed price or sold out". Use One row per: Variant, schedule it daily, and compare on the stable
id. - Find what is on sale. For example, "all discounted products across these 50 streetwear stores, with the discount in percent". Turn on Only on sale.
- Build a catalogue or a product feed. For example, "titles, images, variants and prices from my suppliers' stores into my own database or an AI agent".
Why not build it yourself
Building this yourself: pagination, collections, variant maths, sale logic, currency per store, HTML descriptions, stores that answer differently: about 8 hours, then upkeep. This Actor: $1.00 per 1,000 rows, and when something changes we fix it within 48 hours. Every Apify account includes $5 of free usage a month, so your first 5,000 rows cost nothing.
Founding price: $1.00 per 1,000 rows for the first 100 users. It then rises to $1.50. Users who joined at the founding price keep it.
Proof
| Success rate (staging runs on Apify, 17 to 18 Sept 2026) | 100% from 4 runs, 20 requests, 0 failed attempts |
| Last verified against live stores | 2026-09-18 |
| Typical run | 439 products from 2 stores in 5 to 9 seconds |
| Issues answered within | 6 hours |
| Changes fixed within | 48 hours |
Changelog at the bottom of this page, and every fix is dated.
What we deliberately do not collect
- No personal data. This Actor reads products, not people: no store-owner contacts, no e-mails, no phone numbers, no customer reviews. E-mail addresses and phone numbers inside product descriptions are replaced with
[email removed]/[phone removed]. - Public storefront feed only. No logins, no admin API, no checkout.
- Light on the store: 250 products per request, pages of one store read one after another, at most 5 requests a second overall.
- This Actor declares limited permissions: it can only write to its own dataset.
How to run it
- Click Run. The defaults read two sample stores (Allbirds and Death Wish Coffee, about 440 products).
- Replace them with your own Store or collection URLs, for example
https://www.allbirds.com,allbirds.com, orhttps://www.allbirds.com/collections/mens. Hundreds of stores per run are fine. - Choose One row per product or variant, and narrow with Keywords, Only in stock, Only on sale. Turn on Include stock and barcodes for stock counts, barcodes and inventory policy per variant (details below). Products that do not match are never saved and never charged.
- Set Max rows to cap the run. That is also your spend cap.
- Download as JSON, CSV or Excel, or call it from the API or from an AI agent through the Apify MCP server.
Price and stock monitor: only what changed
A price monitor is this Actor on a schedule with one extra field. Give the run a Monitor name:
- every row comes back with
change_status(new,updated,unchanged),previous_price,price_change_percent(negative for a price drop) andprevious_available, so "back in stock" and "sold out" are one filter away updatedmeans the price, the crossed-out price, the availability, the stock count where it was read, or the set of variants and their prices changed. A product that gains or loses a variant counts as updated- with Only changes on, unchanged rows are left out and not billed. Measured on a real store (Death Wish Coffee, 145 products): the first run returned 145 rows, the next run returned only the rows whose price, crossed-out price, availability or stock had moved. A daily watch on a 2,000-product shop usually costs cents, not dollars
- removed products are reported too: a product or variant that was in the previous run and is gone from the feed comes back once with
change_status: "removed", its last known price and the dates it was first and last seen - works per product or per variant. In variant mode each SKU is tracked on its own price and stock; with Stock counts on, a change in
inventory_quantitycounts as a change too
A removal is only claimed when the feed was read to its end in that run, measured against the unfiltered feed, so a filter or a row cap cannot produce a false alarm, and never at all for a run the platform moved to another server mid-way. Before a product is reported removed the shop is asked about it directly, one request per candidate: the feed is paged, so a product deleted while we page shifts the window and can leave a still-live product unlisted, and that product must not be reported as gone. A removed row carries only what the monitor remembered about it: id, store, title, URL, previous_price, previous_available and the two dates. Every other field is null, because the product is no longer in the feed to read. State is kept in a key-value store on your own Apify account, one per Actor (the same name in another Dodo Data Actor tracks that Actor's sources separately) under the name you chose, one record per store and mode. Nothing is written until the run ends. The first run under a new name marks everything new; switching Stock counts on or off marks rows updated once, because the stock count joins or leaves the comparison.
Stock counts and barcodes
The catalogue feed carries prices and an in-stock flag, but not quantities or barcodes. Those live on a second public
endpoint, one request per product, which Include stock and barcodes reads for you. It adds inventory_quantity,
barcode, inventory_tracked and inventory_policy to every variant, plus total_inventory per product.
Three things we are careful about, because each of them silently corrupts a dataset:
- Shopify reports
999999for variants whose stock it does not track (digital add-ons, made-to-order). That is a placeholder, not a quantity. Those variants getinventory_quantity: nulland are left out oftotal_inventory. - A missing figure is
null, never0. Zero means sold out, which is a real signal; "this shop publishes no numbers" is not the same thing, and the two must not be mixed. - Whether a shop publishes any of this is the merchant's choice, so some stores return barcodes without quantities, or an internal code where you expected a GTIN. Quantities can also be negative when a shop has oversold.
It costs one extra request per product, so leave it off when you only need prices.
In variant mode each row is one variant: the product fields are repeated, the nested variants list is replaced by top-level variant_id, variant_title, sku, price, compare_at_price, option1 to option3 and grams, id and url point at the variant, and Only in stock / Only on sale apply to the variant itself.
Good to know: a small number of stores switch their product feed off or protect it; those are reported in the log and skipped, and you are not charged for them. A site that is not on Shopify is reported the same way.
Use it from an AI agent (MCP)
Add this Actor as a tool in Claude, Cursor, VS Code or any other MCP client through the hosted Apify MCP server:
https://mcp.apify.com/?tools=actors,docs,dododata/shopify-products-scraper
The input is small and typed, and every field in the output is documented in the dataset schema, so an agent can call it without reading this page. The Actor is enabled for Apify's agentic payments (x402, experimental on Apify's side): an agent can pay per run without an Apify account. With a Monitor name, an agent that checks a competitor's shop every morning pays only for what changed.
Related Actors
- Career Page Jobs Scraper: jobs from Greenhouse, Lever, Ashby, Workday and eight more career-page systems
- France Travail Jobs Scraper: French public-service job offers with salary as numbers
Input reference
| Field | Default | Meaning |
|---|---|---|
startUrls | two sample stores | Store or collection URLs |
rowPer | product | product (variants nested) or variant (one row per SKU) |
includeInventory | false | Add stock, barcode and inventory policy per variant (one extra request per product) |
keywords | none | Keep products whose title, vendor, type or tags contain one of these |
onlyAvailable | false | Keep only products in stock |
onlyOnSale | false | Keep only discounted products |
monitorName | none | Turns on price and stock tracking between runs; use the same name every run |
onlyChanges | false | With a monitor name: leave out, and do not bill, unchanged rows |
includeRemoved | true | With a monitor name: report products that are gone since the previous run |
maxItems | 500 | Stop after this many rows |
maxConcurrency | 5 | Parallel requests |
useProxy | true | Use Apify proxy (recommended) |
FAQ
Does Shopify have a public API for a store's products?
Every Shopify storefront serves its own catalogue as JSON at /products.json, 250 products per page, the same data the shop renders for any visitor. This Actor reads that feed plus /meta.json for the store's currency, and turns prices into numbers and variants into rows.
How do I track a competitor's prices on Shopify? Schedule this Actor daily with a Monitor name and Only changes. Each run returns the products whose price or availability moved, with the previous price and the change in percent, plus new and removed products.
How do I get alerted when a product is back in stock?
Monitor in variant mode and filter the results on available = true and previous_available = false.
Do I need proxies, an API key or the store's permission? No key and no login: the feed is public. Some merchants switch it off or put it behind a bot check; that is reported in the log and the store is skipped, never worked around.
How fresh is the data? Every run is live. There is no database in between.
Changelog
- 2026-09-21, v0.1: price and stock monitor. A monitor name adds
change_status,previous_price,price_change_percent,previous_available,first_seen_at,last_seen_at; Only changes returns and bills only what moved. - 2026-09-17, v0.1: first release. Verified against live stores on 17 and 18 September 2026.