Shopify Scraper: Any Store's Full Product Catalog
Pricing
from $1.40 / 1,000 products
Shopify Scraper: Any Store's Full Product Catalog
Export the complete catalog of any Shopify store: every product and variant with price, compare-at price, live discount, SKU, stock status, images, tags, vendor and description. Filter by keyword, vendor, type, price range, in-stock or on-sale. Official Shopify endpoint, no key.
Pricing
from $1.40 / 1,000 products
Rating
0.0
(0)
Developer
Daniel Meshulam
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Export the complete catalog of any Shopify store: every product, every variant, with live prices and stock.
Uses the /products.json endpoint Shopify publishes on every storefront. No key, no login, no headless browser, nothing rendered by JavaScript.
One row per variant
A shirt in 4 sizes is 4 sellable SKUs: 4 prices, 4 stock states. That's what you get by default, because "is the medium in stock at $39?" is the question people are actually asking.
Set oneRowPerProduct: true to collapse to one row per product with priceMin / priceMax instead.
What you get
| Field | Example |
|---|---|
title, variantTitle, sku | Men's Cruiser, 10, A12856M080 |
price, compareAtPrice | 105.00, 140.00 |
onSale, discountPercent | true, 25.0 |
inStock | true |
vendor, productType, tags | Allbirds, Shoes, […] |
option1/2/3, options | Blue, 10 · ["Color","Size"] |
url, image, variantImage, imageCount | |
description | plain text, HTML stripped |
publishedAt, createdAt, updatedAt | |
productId, variantId, grams |
discountPercent is computed for you, price monitoring shouldn't require arithmetic on your end.
Filters that actually save you money
Everything below filters before billing, and the row cap counts rows kept, not scanned, so a narrow filter never comes back empty just because the first 250 products didn't match.
{"storeUrls": ["allbirds.com", "gymshark.com"],"onSaleOnly": true,"inStockOnly": true,"minPrice": 20,"maxPrice": 150,"keywords": ["shoe", "runner"],"maxProductsPerStore": 500}
keywords, match on title, type, vendor or tagsvendors,productTypes, exact matchinStockOnly,onSaleOnlyminPrice/maxPrice
Collections
Set includeCollections: true to also get the store's collections with product counts, a fast map of how a competitor organises their catalog.
Who this is for
- Competitor & price monitoring: schedule it daily, diff the prices, catch every discount the day it launches
- Dropshippers & resellers: pull a supplier's full catalog with SKUs and stock in one run
- Market research: how many SKUs, what price bands, what's sold out
- Affiliate & deal sites:
onSaleOnly: trueis a ready-made deals feed - AI / dataset builders: clean structured product data, no HTML parsing
Pricing
Pay per result. One row = one variant (or one product, or one collection). Stores that fail come back as error rows and are not charged, and neither is anything removed by your filters.
products.json, paged for you
Every Shopify storefront serves its catalogue at /products.json. It needs no
key and no app install, because it is the same endpoint the storefront itself
reads. The reasons people give up on calling it directly are all handling:
| The limitation | What this does about it |
|---|---|
limit is capped at 250 per page | pages automatically, up to 10,000 products per store |
page must be walked until empty | walks it, and stops cleanly at the end |
| No sort, no filter, no search on the endpoint | filters after fetch on keyword, vendor, product type, price range, in-stock and on-sale |
| One row per variant, or one per product? | your choice, via oneRowPerProduct |
| Password-protected stores return HTML | detected and reported as a named error row, not a parse failure |
oneRowPerProduct decides the shape: on, one row per product with
priceMin and priceMax across its variants; off, one row per variant with
a single price, sku, variantTitle and variantId. Neither is a summary of
the other, so pick by what you are loading it into.
/collections.json is available the same way via includeCollections, giving a
quick map of how the catalogue is organised with product counts per collection.
Notes
- If a store isn't on Shopify, or has password-protected its storefront, you get a clear
errorrow saying exactly that, not a raw HTTP code. - Shopify caps this endpoint at 250 products per page; the Actor pages automatically up to 10,000 products per store.
- Prices are in the store's own currency. Shopify does not expose the currency code on this endpoint, so check the store if you're mixing regions.
- Set a max charge per run in the run options for a hard spend ceiling. The Actor honors it and stops cleanly.