Shopify Store Scraper — Products, Prices & Variants
Pricing
from $0.35 / actor start
Shopify Store Scraper — Products, Prices & Variants
Export any Shopify store's full product catalog (titles, prices, SKUs, variants, images) to JSON/CSV via the store's public product feed.
Pricing
from $0.35 / actor start
Rating
5.0
(1)
Developer
Flash Scrape
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 hours ago
Last modified
Categories
Share
Shopify Store Product Scraper — export any store's catalog to CSV, Excel or JSON
A Shopify store product scraper that pulls a store's entire public catalog in one run — titles, vendors, prices, variants, SKUs, availability, tags and images — with no login, no browser automation, and no code. Paste one or more store URLs and export Shopify products to CSV, Excel or JSON minutes later. If you monitor competitors, research dropshipping niches, or track prices across Shopify stores, this replaces hours of copy-paste with a single input field.
What it does
- Reads each store's public
/products.jsonfeed — the same product data Shopify serves to any visitor, fetched over plain HTTP. - Paginates the full catalog automatically — 250 products per request, page after page, until the store runs out (with a hard safety cap of 1,000 pages ≈ 250k products per store).
- Two output shapes — one row per product with a summarized price range (
price_min/price_max,in_stock,variants_count), or one row per variant with per-variantsku,price,compare_at_price,availableandgrams— ideal for price and stock monitoring. - Handles many stores in one run — pass a list of competitor URLs; a store that fails (password-protected, feed disabled, not actually Shopify) is logged and skipped, and the run continues.
- Normalizes messy input —
allbirds.com,www.allbirds.comor a full product URL all resolve to the correct store base. - Optional per-store cap — limit each store to the first N products, or take everything with
0.
Use cases
- E-commerce competitor monitoring — schedule a daily run over your competitors' stores and diff prices, new products, and stock status over time.
- Dropshipping research — pull a winning store's full catalog with vendors, tags and product types to spot trending products and suppliers.
- Price tracking — use variant mode to get one row per SKU with
priceandcompare_at_price, then feed the dataset into a sheet or dashboard. - Catalog migration and backup — export a store's product list without private API keys or admin access.
- Market analysis — scrape every store in a niche and aggregate by
product_type,vendor, or price band.
Input
| Field | Type | Default | Description |
|---|---|---|---|
storeUrls | array | — (required) | One or more Shopify store URLs (e.g. https://www.allbirds.com). The scraper reads each store's public /products.json feed. |
maxProducts | integer | 0 | Limit how many products to fetch per store. Use 0 for no limit (entire catalog). |
oneRowPerVariant | boolean | false | ON: emit a row for every variant (best for price/SKU monitoring). OFF: one row per product with a price range. |
{"storeUrls": ["https://www.allbirds.com"],"maxProducts": 0,"oneRowPerVariant": false}
Output
Every row carries the core product record: store, product_id, title, handle, url, vendor, product_type, tags, first image URL, images_count, and the Shopify created_at / published_at / updated_at timestamps.
- With one row per product (default), each row adds
variants_count,price_min,price_max, andin_stock. - With one row per variant, each row adds
variant_id,variant_title,sku,price,compare_at_price,available, andgramsinstead.
Example row (default product mode):
{"store": "https://www.allbirds.com","product_id": 4547069443119,"title": "Men's Wool Runners","handle": "mens-wool-runners","url": "https://www.allbirds.com/products/mens-wool-runners","vendor": "Allbirds","product_type": "Shoes","tags": "mens, wool, runners","image": "https://cdn.shopify.com/s/files/1/1104/4168/products/wool-runner.jpg","images_count": 6,"created_at": "2020-03-18T09:12:44-07:00","published_at": "2020-03-20T08:00:01-07:00","updated_at": "2026-06-28T02:14:09-07:00","variants_count": 14,"price_min": 110.0,"price_max": 125.0,"in_stock": true}
Export the dataset as CSV, Excel, JSON, or HTML from the run's Dataset tab, or pull it programmatically via the Apify API — both output shapes are flat, so CSV export needs no post-processing.
Example output
A real sample from a live run:
| title | vendor | product_type | price_min | price_max | in_stock |
|---|---|---|---|---|---|
| Men's Cruiser Terralux - Anthracite (Da… | Allbirds | Shoes | 135 | 135 | false |
| Women's Wool Runner NZ Mid Waterproof -… | Allbirds | Shoes | 160 | 160 | true |
| Free Returns Coverage | re:do | return,package_protection | 0.8 | 2.98 | true |
| Women's Wool Runner-up Mizzle - Hazy In… | Allbirds | Shoes | 60 | 60 | true |
Pricing
This actor uses Apify pay-per-event pricing charged per result — you pay only for the product (or variant) rows actually delivered to your dataset. No subscription, and a run that returns nothing costs nothing. See the actor's Pricing tab for the current per-result rate. A free Apify plan is enough to try it on a full mid-size store.
Tip: variant mode produces more rows than product mode for the same store (one per SKU), so pick the shape that matches what you actually need.
Tips / FAQ
Is this legal?
It reads each store's own public /products.json feed — data Shopify serves to any anonymous visitor. No login, no private data, no paywall bypass. As always, use scraped data responsibly and within applicable laws and the store's terms.
Does it work on every Shopify store?
Most standard stores, yes. Password-protected storefronts and stores that have disabled the public product feed return an error for /products.json; those stores are logged with a warning and skipped, and the rest of the run continues. Non-Shopify URLs are skipped the same way.
Does it include product descriptions? No — rows include title, vendor, type, tags, timestamps, image URL and price/variant data, but not the HTML description body. If you need descriptions, pair it with an extraction actor on the product URLs (see Related actors below).
How do I track prices over time?
Turn oneRowPerVariant ON so every SKU gets its own row with price and compare_at_price, then schedule the actor (Apify Schedules) and compare datasets between runs.
How fast is it, and are there limits?
It fetches 250 products per request, so even multi-thousand-product catalogs finish in minutes. A built-in cap of 1,000 pages per store (≈ 250,000 products) guards against runaway loops; maxProducts lets you set your own tighter cap.
Do I need proxies or an API key? No. The feed is public and the actor uses plain HTTP requests — no Shopify API key, no login, no headless browser.
Related actors
- Shopify Leads Scraper — find Shopify stores (with contact data) instead of products; the natural front end to this actor.
- Smart Scraper by Example — extract extra fields (like descriptions) from the product URLs this actor gives you.
- Company & Domain Enricher — turn store domains into full company records with tech stack and socials.
Found a bug or need a feature? Open an Issue on this actor's Issues tab — typical response within 1 business day.