Shopify Product Scraper
Pricing
from $2.00 / 1,000 results
Shopify Product Scraper
Pull the full product catalog from any Shopify store — title, price, variants, images, vendor, type and tags — one row per product. Works with any Shopify store or collection URL. No account or API key needed.
Pricing
from $2.00 / 1,000 results
Rating
0.0
(0)
Developer
Farhan Febrian Nauval
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Pull the entire product catalog from any Shopify store — titles, prices, variants, images, vendor, product type and tags — with one row per product. Point it at a store domain (or a specific collection) and get clean, structured JSON back. Works with any Shopify store, no account needed.
Why use this actor
- No account, no login, no API key — just give it a store address.
- Works with any Shopify store — one actor, no per-store setup. If it runs on Shopify, this reads its catalog.
- Full detail per product — every size/color variant with its own price, SKU and in-stock flag, plus all product images.
- Whole store or a single collection — grab an entire catalog, or just one collection (e.g. "Men's" or "Coffee").
- Ready-to-use JSON — flat summary fields (min/max price, variant count, product URL) alongside the complete raw product data, suitable for spreadsheets, databases and pipelines.
- Runs on a schedule with automatic retries; export to JSON, CSV or Excel.
How it works
- You enter one or more Shopify store addresses (or collection links).
- The actor reads each store's public product feed, page by page, until it has the whole catalog.
- Every product becomes one row: a clean summary plus all of its variants, images and options.
- Results stream into your dataset as they are found — download any time.
You don't manage any scrapers, browsers or blocks — just enter a store and press Run. Some stores keep their product feed private; for those the actor returns a clear "blocked" note instead of guessing.
Input
Mode: Whole store (default)
{"mode": "store","storeUrls": ["https://www.allbirds.com", "deathwishcoffee.com"],"limit": 250,"maxItems": 0,"maxItemsPerStore": 0}
Mode: Single collection
{"mode": "collection","collectionUrls": ["https://deathwishcoffee.com/collections/coffee"],"limit": 250,"maxItems": 100}
| Field | Type | Description |
|---|---|---|
mode | select | store (whole catalog per store) or collection (only the given collections). Default store. |
storeUrls | array | Store addresses or bare domains, e.g. https://www.allbirds.com or allbirds.com. Used in store mode. |
collectionUrls | array | Collection links, e.g. https://deathwishcoffee.com/collections/coffee. Used in collection mode. |
limit | integer | Products fetched per page request (max 250). Leave at 250 for speed. |
maxItems | integer | Total product cap across everything. 0 = no cap (pull all). |
maxItemsPerStore | integer | Cap per store/collection. 0 = no cap. Handy to sample many stores evenly. |
proxyConfiguration | object | Optional. The feed is public, so usually not needed; turn on Residential for stores that block datacenter traffic. |
Output
One record per product. Summary fields sit at the top; the complete raw variants, images and options are kept exactly as the store provides them.
{"_input": "deathwishcoffee.com","_source": "S1-store","_scrapedAt": "2026-07-10T00:00:00Z","id": 7460599660599,"title": "Blueberry Coffee (9oz)","handle": "blueberry-9oz","vendor": "Death Wish Coffee","productType": "Coffee","tags": [],"publishedAt": "2026-07-08T09:17:43-04:00","url": "https://deathwishcoffee.com/products/blueberry-9oz","minPrice": 12.99,"maxPrice": 12.99,"variantsCount": 1,"imagesCount": 3,"firstImage": "https://cdn.shopify.com/s/files/1/0271/7209/files/Blueberry_9oz_Ground_Angle_DTC_FT.jpg?v=1782931128","storeHost": "deathwishcoffee.com","variants": [{"id": 42000000000000,"title": "Default Title","sku": "LGBLBY09","price": "12.99","compare_at_price": null,"available": true,"grams": 255,"option1": "Default Title","position": 1}],"images": [{ "id": 3300000, "src": "https://cdn.shopify.com/s/files/.../Blueberry_9oz.jpg", "width": 2000, "height": 2000 }],"options": [{ "name": "Title", "position": 1, "values": ["Default Title"] }]}
A product with sizes looks like this (from https://www.allbirds.com/collections/mens):
{"_source": "S1-collection","title": "Men's Dasher NZ - Natural Black (Blizzard Sole)","vendor": "Allbirds","productType": "Shoes","minPrice": 140.0,"maxPrice": 140.0,"variantsCount": 13,"url": "https://www.allbirds.com/products/mens-dasher-nz-natural-black-blizzard","collection": "mens","variants": [{ "title": "8", "sku": "A12647M080", "price": "140.00", "available": true, "option1": "8" }],"options": [{ "name": "Size", "position": 1, "values": ["8", "8.5", "9", "9.5", "10", "… 8 more"] }]}
| Field | Type | Description |
|---|---|---|
_input | string | The store/collection you entered (for traceability). |
_source | string | Which mode produced the row: S1-store or S1-collection. |
_scrapedAt | string | UTC timestamp of the fetch. |
id | number | Shopify product id. |
title | string | Product name. |
handle | string | URL slug of the product. |
vendor | string | Brand / vendor name. |
productType | string | Shopify product type (category). |
tags | array/string | Store-assigned tags. |
publishedAt | string | When the product went live. |
url | string | Direct link to the product page. |
minPrice / maxPrice | number | Lowest / highest variant price. |
variantsCount | number | Number of variants (sizes/colors). |
imagesCount | number | Number of product images. |
firstImage | string | Main product image URL. |
storeHost | string | The store's domain. |
collection | string | Collection handle (collection mode only). |
variants | array | Full variant list as the store provides it (price, sku, availability, options…). |
images | array | Full image list (src, dimensions…). |
options | array | Product options (e.g. Size, Color) with their possible values. |
If a store keeps its product feed private, the actor returns a single note for that store instead of products:
{"_input": "www.gymshark.com","_source": "S1-store","_error": "blocked_or_not_shopify","_errorDetail": "page 1 http_403"}
Notes / limits
- Works only where the store exposes its public product feed. Most Shopify stores do; a minority keep it private and will return a clear
blocked_or_not_shopifynote (verified example: gymshark.com). Verified working: allbirds.com, deathwishcoffee.com, redbullshopus.com. - Prices are shown in the store's own currency and format.
- Very large catalogs are read in pages of up to 250 products; use
maxItemsPerStoreto sample when scanning many stores. - Proxy is optional. If a store blocks datacenter traffic, enable Residential in the proxy settings.