Shopify Store Products Scraper
Pricing
Pay per usage
Shopify Store Products Scraper
Extract the full product catalogue from any Shopify store - titles, variants, SKUs, prices, images and tags. No API key, no login.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
BERCIK Group
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Extract the full product catalogue from any Shopify store — titles, variants, SKUs, prices, compare-at prices, stock status, images and tags. No API key, no login, no store permission needed.
What does Shopify Store Products Scraper do?
Every Shopify storefront publishes its catalogue at a public /products.json endpoint. This Actor reads it, walks the whole catalogue, and returns clean, structured records you can drop straight into a spreadsheet or database.
You get one row per product with a nested variants array, or one row per variant (SKU-level) if you're tracking prices. Point it at several competitors at once and it returns a single unified dataset across all of them.
Because it reads a public JSON endpoint rather than rendering pages, there's no browser, no proxy and no CAPTCHA — runs are fast and cheap.
Why use Shopify Store Products Scraper?
- Competitor price monitoring — track a rival's entire catalogue on a schedule and see exactly what changed.
- Assortment and gap analysis — compare product types, vendors and price bands across several stores at once.
- Dropshipping and reselling — pull catalogues with SKUs, images and stock status ready for import.
- Market research — quantify how a category is priced across dozens of brands.
- Stock monitoring — watch which SKUs sell out and how quickly they return.
- Lead generation for agencies — profile a prospect's catalogue size and merchandising before a pitch.
How to use Shopify Store Products Scraper
- Click Try for free.
- Add one or more Shopify store URLs —
allbirds.comorhttps://www.gymshark.comboth work. - Optionally filter by product type, vendor, tag, price range or stock status.
- Turn on One row per variant if you want SKU-level rows for price tracking.
- Set Maximum results to cap your spend.
- Click Start, then download as JSON, CSV, Excel, HTML or XML.
Input
{"storeUrls": ["allbirds.com", "gymshark.com"],"productTypes": ["Shoes"],"minPrice": 50,"availableOnly": true,"oneRowPerVariant": false,"maxProductsPerStore": 1000,"maxResults": 5000}
| Field | Type | Description |
|---|---|---|
storeUrls | array | Shopify stores — bare domain or full URL |
maxProductsPerStore | integer | Stop after this many products per store |
maxResults | integer | Hard cap on total records returned |
oneRowPerVariant | boolean | SKU-level rows instead of product-level |
availableOnly | boolean | Keep only in-stock items |
productTypes, vendors, tags | array | Case-insensitive filters |
minPrice, maxPrice | integer | Price bounds, in the store's own currency |
Output
{"storeDomain": "allbirds.com","storeName": "Allbirds","currency": "USD","productId": 6842053460048,"title": "Men's Cruiser - Shadow Blue","handle": "mens-cruiser-shadow-blue","productUrl": "https://allbirds.com/products/mens-cruiser-shadow-blue","vendor": "Allbirds","productType": "Shoes","tags": ["DNAM BRANDS", "EC STOCK"],"description": "A comfy everyday shoe made with merino wool.","minPrice": 105,"maxPrice": 105,"available": true,"variantCount": 13,"variants": [{"variantId": 41990816759888,"title": "8","sku": "A12856M080","price": 105,"compareAtPrice": null,"currency": "USD","available": true,"grams": 1000}],"imageUrl": "https://cdn.shopify.com/...jpg","imageCount": 4,"publishedAt": "2026-01-14T09:12:03-08:00"}
You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.
Data fields
| Field | Description |
|---|---|
storeDomain, storeName, currency | Which store the row came from |
productId, title, handle, productUrl | Product identity and link |
vendor, productType, tags | Merchandising classification |
description | Product description, HTML stripped |
minPrice, maxPrice, available | Price range and stock across all variants |
variantCount, variants | Every variant: SKU, price, compare-at price, options, weight |
imageUrl, imageCount, images | Product imagery |
options | Option names and values, e.g. Size / Colour |
publishedAt, createdAt, updatedAt | Catalogue timestamps |
In one row per variant mode, each row carries the variant's own sku, price and available alongside the product context, and the nested variants array is dropped.
How much does it cost to scrape a Shopify store?
Priced per record returned, capped by Maximum results so you know your ceiling before the run starts. There's no browser and no proxy, so the underlying platform cost is very low.
A mid-sized catalogue is typically 200–500 products; large brands run into the thousands.
Tips
- Not every store exposes
/products.json. A minority disable it or run a custom storefront. The Actor logs a warning and moves on to the next store rather than failing the run. currencyandstoreNamecome from/meta.json, which custom storefronts don't serve. When it's unavailable both fields arenull— prices are still correct, they're just in the store's own unstated currency.- Use
oneRowPerVariantfor price tracking, product-level rows for catalogue analysis. Variant mode produces far more records, so raisemaxResultsaccordingly. - Price filters behave sensibly in both modes. At product level a product qualifies if any variant matches; in variant mode each row is filtered on its own price and stock.
compareAtPricereveals discounting — where it's higher thanprice, the item is on sale.- Schedule daily runs and diff on
productId+skuto build a price history.
FAQ
Do I need permission from the store?
/products.json is a public endpoint that Shopify serves to anyone; it's the same data the storefront itself uses. This Actor requests it at a polite rate and reads nothing private — no customer data, no orders, no admin. That said, this is general information rather than legal advice; check your own obligations before redistributing catalogue data commercially.
Why did a store return nothing? Either it isn't Shopify, or the merchant disabled the endpoint. The run log names the store and says so explicitly.
Can I get inventory quantities? No. The public endpoint exposes whether a variant is available, not how many units remain. Exact stock counts require the merchant's own Admin API credentials.
Can I scrape collections or a single product?
This version walks the full catalogue. Filter the output by productType, vendor or tags to narrow it. If you need collection-level scraping, open an issue.
Support
Found a bug or need a field that isn't here? Open an issue on the Issues tab and I'll take a look. Custom data pipelines and bespoke scraping work are available on request.