Shopify Store Scraper — Products, Prices & Variants
Pricing
from $4.00 / 1,000 products
Shopify Store Scraper — Products, Prices & Variants
Scrape all products from any Shopify store: title, vendor, product type, description, price range, compare-at price, discount percent, stock status, every variant with SKU and price, options, tags and images. Filter by collection, keyword, price or discount. No API key.
Pricing
from $4.00 / 1,000 products
Rating
0.0
(0)
Developer
Hichem Ben Moussa
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Scrape every product from any Shopify store — title, vendor, type, description, full price range, compare-at price, discount percent, stock status and every variant with its SKU — from the JSON feed Shopify itself publishes on the storefront.
Millions of stores run on Shopify, which makes this the single highest-leverage competitor-monitoring actor: one input, a complete catalogue out.
No API key required.
What you get
| Field | Description |
|---|---|
store, storeUrl, currency | Shop name, domain and selling currency |
productId, title, handle | Identifiers |
vendor, productType | Brand and category |
description | Product description as plain text |
priceMin, priceMax | Cheapest and dearest variant |
compareAtPrice | The struck-through "was" price |
onSale | True when compare-at is genuinely above the current price |
discountPercent | Calculated discount, e.g. 50 |
inStock | Any variant purchasable |
variantCount, availableVariantCount | Total and in-stock variants |
skus | Every SKU on the product |
options | Option names and values, e.g. Size → 5,6,7 |
variants | Per-variant array: id, title, SKU, price, compare-at, availability, weight, options |
tags | Store tags — often exposes internal merchandising data |
images, image | All image URLs and the primary one |
publishedAt, createdAt, updatedAt | Timestamps, useful for spotting new launches |
url | Product page |
Example input
{"storeUrls": ["https://www.allbirds.com"],"onlyDiscounted": true,"maxProducts": 200}
Scrape one collection, or several competitors at once:
{"storeUrls": ["https://store-a.com", "https://store-b.com"],"collection": "mens","minPrice": 50,"maxProductsPerStore": 500}
Example output
{"store": "Allbirds","currency": "USD","title": "Women's Allbirds Flip Flop - Dusty Pink","vendor": "Allbirds","productType": "Shoes","priceMin": 25,"priceMax": 25,"compareAtPrice": 50,"onSale": true,"discountPercent": 50,"inStock": true,"variantCount": 7,"availableVariantCount": 5,"skus": ["A12513W050", "A12513W060", "A12513W070"],"url": "https://www.allbirds.com/products/womens-allbirds-flip-flop-dusty-pink"}
Who uses this
- Price monitoring — run daily and diff
priceMinto catch every competitor price change and promotion the day it happens - Dropshipping and product research — find what a winning store sells, at what margin, and which variants keep selling out
- Brand and MAP enforcement — spot retailers selling your product below your minimum advertised price
- Market and assortment analysis — full catalogues by
productTypeandvendor, sized and priced - Affiliate and comparison sites — populate a catalogue with images, options and live stock
- Stock-out intelligence —
availableVariantCountagainstvariantCountshows exactly which sizes a competitor has sold out of
What to expect
/products.jsonis a documented public Shopify endpoint, not a loophole — it is what many storefront themes and apps read. That makes it far more durable than HTML scraping, which breaks whenever a theme changes.- A minority of stores are not reachable. Some put Cloudflare or a bot filter in front of the endpoint, and some disable it. When that happens the actor reports the store and status clearly and moves to the next one rather than failing the run. Verified working on a large sample; expect the occasional 403.
compareAtPriceis only set when the merchant set it. In a normal catalogue most products are not discounted, so expect this field — anddiscountPercent— to be null for the majority of rows. That is a correct reading of the store, not missing data:onSaleis always present and is the field to filter on.- Prices are in the store's own currency (
currency), taken from the shop metadata. A store with multiple markets serves its primary currency here. - Hidden and draft products are not included — the feed carries published products only.
Pricing
Pay per result. Each product returned counts as one result, and filters are applied before charging.
Notes
- Give the storefront domain, not the
*.myshopify.comadmin domain, when the store has a custom domain. - The collection handle is the slug in the URL: for
/collections/mensthe handle ismens. - Large catalogues are paged automatically at 250 products per request; use
maxProductsPerStoreto keep multi-store runs balanced. - This is an unofficial actor and is not affiliated with Shopify.