Shopify Store Catalog Scraper
Pricing
from $1.00 / 1,000 results
Shopify Store Catalog Scraper
Scrape the full public product catalog of any Shopify store. Returns product id, handle, title, URL, vendor, type, tags, images, price, sale and stock status, plus the complete variant list with SKUs. Handles headless Hydrogen storefronts automatically.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
Crikit
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Share
Scrape the complete public product catalog of any Shopify store. Give the actor one or more store domains and it returns every product with pricing, images, stock status, and the full variant list including SKUs.
This Shopify scraper reads the store's own public catalog data directly. There is no headless browser, no login, and no cookies, so it is fast and cheap: a 25,000 product catalog takes about two and a half minutes.
What makes this Shopify scraper different
Most Shopify product scrapers stop at product level and tell you a product has 13 variants. This one gives you the 13 variants: variant id, title, SKU, price, compare-at price, per-variant stock status, and the option values behind them.
That matters if you are doing price monitoring, inventory tracking, or catalog sync, because the thing that changes is almost never the product, it is the size that went out of stock or the colour that went on sale.
- Full variant data with SKUs. Every variant, every SKU. The leading competing actors return a variant count and no SKUs at all.
- Real store currency. Read from the store rather than assumed to be USD. A Canadian store reports CAD.
- Headless storefronts supported. Stores built on Shopify Hydrogen and Oxygen do not serve their catalog on the public domain. This actor finds the underlying store origin and scrapes it anyway.
- You are never billed twice for the same product. Pagination stops on repeated product ids, not on a page count, so a misbehaving store cannot generate duplicate billable rows.
- Honest failures. A store that has switched its catalog off is reported with the reason, per store, instead of silently returning nothing.
Input
| Field | Type | Description |
|---|---|---|
storeUrls | array | Required. Store domains. Accepts gymshark.com, https://gymshark.com, or mystore.myshopify.com. |
collection | string | Optional. Scrape one collection only. Use the handle from the URL, for example mens-tops. |
maxProductsPerStore | integer | Cap per store. 0 means the entire catalog. |
includeVariants | boolean | Include the full variant list. Default true. |
includeDescription | boolean | Include the product description as plain text. Default true. |
proxyConfiguration | object | Proxy settings. The default Apify datacenter proxy is sufficient. |
{"storeUrls": ["https://gymshark.com", "allbirds.com"],"maxProductsPerStore": 500,"includeVariants": true}
Output
One row per product. Variants are nested inside the row rather than flattened, so a 13 variant product is one row and one charge, not 13.
{"store": "allbirds.com","storeName": "Allbirds","productId": 7292464955472,"handle": "mens-cruiser-shadow-blue-natural-white-sole","title": "Men's Cruiser - Shadow Blue (Natural White Sole)","url": "https://allbirds.com/products/mens-cruiser-shadow-blue-natural-white-sole","vendor": "Allbirds","productType": "Shoes","currency": "USD","priceMin": 105,"priceMax": 105,"compareAtPrice": null,"onSale": false,"discountPercent": null,"available": true,"variantCount": 13,"availableVariantCount": 11,"skus": ["A12856M080", "A12856M085"],"variants": [{"variantId": 41990816759888,"title": "8","sku": "A12856M080","price": 105,"compareAtPrice": null,"available": true,"option1": "8","grams": 1000}],"featuredImage": "https://cdn.shopify.com/s/files/1/1104/4168/files/All-birds_0010.png","imageCount": 5,"updatedAt": "2026-08-07T09:14:02-07:00"}
Full field list, types, and the Console table view are declared in the dataset schema.
Common uses
- Competitor price monitoring. Run on a schedule and diff
priceMin,compareAtPrice, anddiscountPercentbetween runs. - Inventory and stockout tracking.
availableVariantCountagainstvariantCountshows which sizes or colours are selling out. - Catalog sync and migration.
productIdandhandleare stable keys for joining against your own data. - Dropshipping and product research. Sort a whole catalog by price, vendor, or product type.
- Brand and MAP monitoring. Track SKU level pricing across many stores in one run.
Limits worth knowing
- Shopify serves at most 100 pages of 250 products, so a single catalog listing tops out at 25,000 products. For larger stores, run again with a
collectionhandle to scrape collections one at a time. - A small number of merchants switch the public catalog endpoint off. Those stores are reported with the reason rather than returned as empty.
- Only publicly published products are returned. Draft and unpublished products are not exposed by the store and cannot be scraped.
Pricing
Pay per result: $0.001 per product, which is $1.00 per 1,000 products. You are charged once per unique product row, with its variants included at no extra cost. Stores that return nothing are not charged.
Data and compliance
This Shopify scraper reads only data the store publishes publicly to any visitor. It collects no personal data, no customer records, and no order information. You are responsible for how you use the data, including complying with the target store's terms and applicable law.