Shopify Product Scraper avatar

Shopify Product Scraper

Pricing

from $2.00 / 1,000 results

Go to Apify Store
Shopify Product Scraper

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

Farhan Febrian Nauval

Maintained by Community

Actor 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

  1. You enter one or more Shopify store addresses (or collection links).
  2. The actor reads each store's public product feed, page by page, until it has the whole catalog.
  3. Every product becomes one row: a clean summary plus all of its variants, images and options.
  4. 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
}
FieldTypeDescription
modeselectstore (whole catalog per store) or collection (only the given collections). Default store.
storeUrlsarrayStore addresses or bare domains, e.g. https://www.allbirds.com or allbirds.com. Used in store mode.
collectionUrlsarrayCollection links, e.g. https://deathwishcoffee.com/collections/coffee. Used in collection mode.
limitintegerProducts fetched per page request (max 250). Leave at 250 for speed.
maxItemsintegerTotal product cap across everything. 0 = no cap (pull all).
maxItemsPerStoreintegerCap per store/collection. 0 = no cap. Handy to sample many stores evenly.
proxyConfigurationobjectOptional. 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"] }
]
}
FieldTypeDescription
_inputstringThe store/collection you entered (for traceability).
_sourcestringWhich mode produced the row: S1-store or S1-collection.
_scrapedAtstringUTC timestamp of the fetch.
idnumberShopify product id.
titlestringProduct name.
handlestringURL slug of the product.
vendorstringBrand / vendor name.
productTypestringShopify product type (category).
tagsarray/stringStore-assigned tags.
publishedAtstringWhen the product went live.
urlstringDirect link to the product page.
minPrice / maxPricenumberLowest / highest variant price.
variantsCountnumberNumber of variants (sizes/colors).
imagesCountnumberNumber of product images.
firstImagestringMain product image URL.
storeHoststringThe store's domain.
collectionstringCollection handle (collection mode only).
variantsarrayFull variant list as the store provides it (price, sku, availability, options…).
imagesarrayFull image list (src, dimensions…).
optionsarrayProduct 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_shopify note (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 maxItemsPerStore to sample when scanning many stores.
  • Proxy is optional. If a store blocks datacenter traffic, enable Residential in the proxy settings.