Shopify Products Scraper avatar

Shopify Products Scraper

Pricing

from $1.30 / 1,000 products

Go to Apify Store
Shopify Products Scraper

Shopify Products Scraper

Extract complete product catalogs from any Shopify store — titles, prices, variants, SKUs, inventory, images, and tags. Works on 4M+ stores worldwide with zero proxy cost.

Pricing

from $1.30 / 1,000 products

Rating

0.0

(0)

Developer

Unfenced Group

Unfenced Group

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

shopify-products-scraper

Extract complete product catalogs from any Shopify-powered store — titles, prices, variants, SKUs, inventory, images, and tags. Works on 4M+ stores worldwide with zero proxy cost required.


Why this scraper?

🛍️ Universal Shopify support

Any store on the Shopify platform can be scraped — from small indie brands to large retailers. Supply one domain or a list of dozens for batch extraction.

📦 Full variant coverage

Every size, colour, and option is captured as a structured variant record — including price, compare-at price, availability flag, SKU, and position.

📊 Inventory-level data

Enable fetchDetails to retrieve per-variant inventory quantities, barcodes, and weights from product detail pages.

💸 Discount detection

The hasDiscount flag and compareAtPrice per variant make sale-monitoring workflows trivial.

🗂️ Collection-scoped runs

Restrict extraction to a specific product collection (e.g. mens-shoes, sale) for targeted monitoring without scraping an entire catalogue.

⚡ High throughput, zero proxy cost

Built on Shopify's public JSON API — no browser rendering, no proxy spend. Typical stores yield 250 products per second in list-only mode.


Input parameters

ParameterTypeDefaultDescription
domainsstring listShopify store domains to scrape, e.g. allbirds.com
startUrlsURL listAlternative to Domains — paste store URLs
maxProductsinteger5Max total products across all stores (0 = unlimited)
fetchDetailsbooleanfalseEnrich with inventory qty, barcode, weight
collectionHandlestringScope to a collection, e.g. mens-shoes
includeOutOfStockbooleantrueInclude products where all variants are unavailable

Output schema

Always present

FieldTypeDescription
productIdstringShopify product ID
titlestringProduct title
handlestringURL-friendly slug
vendorstringBrand / manufacturer
productTypestringStore-defined category
tagsarrayProduct tags
urlstringFull product URL
descriptionHtmlstring|nullRaw HTML description
descriptionTextstring|nullPlain-text description
descriptionMarkdownstringFull description converted to Markdown.
publishedAtstringISO date published
createdAtstringISO date created
updatedAtstringISO date last updated
optionsarrayOption names and values (size, colour, etc.)
imagesarrayImage URLs with dimensions
variantsarrayAll variants (see below)
variantCountintegerTotal number of variants
minPricestringLowest variant price
maxPricestringHighest variant price
hasDiscountbooleanTrue if any variant has a compare-at price
storestringSource store domain
contentHashstringMD5 of handle+updatedAt for change detection
scrapedAtstringISO datetime of extraction

Variant fields (always present)

FieldTypeDescription
variantIdstringShopify variant ID
titlestringVariant title (e.g. "M / Black")
option1/2/3string|nullRaw option values
skustring|nullStock-keeping unit
pricestringVariant price
compareAtPricestring|nullOriginal price (if on sale)
availablebooleanIn-stock flag
positionintegerDisplay order
imageIdstring|nullAssociated image ID

Additional variant fields with fetchDetails: true

FieldTypeDescription
inventoryQuantityinteger|nullUnits in stock
barcodestring|nullEAN/UPC barcode
weightnumber|nullPhysical weight
weightUnitstring|nulllb, kg, g, or oz
inventoryPolicystring|nulldeny or continue
requiresShippingboolean|nullPhysical product flag

Example output record

{
"productId": "6616124981328",
"title": "Trino® Cozy Crew - Heathered Onyx",
"handle": "trino-cozy-crew-heathered-onyx",
"vendor": "Allbirds",
"productType": "Accessories",
"tags": ["merino-wool", "socks", "unisex"],
"url": "https://www.allbirds.com/products/trino-cozy-crew-heathered-onyx",
"descriptionHtml": "<p>The Trino Cozy Crew is a breathable, odor-reducing sock...</p>",
"descriptionText": "The Trino Cozy Crew is a breathable, odor-reducing sock...",
"publishedAt": "2021-10-22",
"createdAt": "2021-10-22",
"updatedAt": "2026-06-04",
"options": [{ "name": "Size", "values": ["S (W5-7)", "M (W8-10)", "L (W11-13)"] }],
"images": [{ "src": "https://cdn.shopify.com/...", "width": 800, "height": 800, "position": 1 }],
"variants": [
{
"variantId": "39574630924368",
"title": "S (W5-7)",
"option1": "S (W5-7)",
"sku": "PCC1HONU301",
"price": "24.00",
"compareAtPrice": null,
"available": true,
"position": 1,
"imageId": null
}
],
"variantCount": 4,
"minPrice": "24.00",
"maxPrice": "24.00",
"hasDiscount": false,
"store": "www.allbirds.com",
"contentHash": "a3f9c12e45b6d7e8",
"scrapedAt": "2026-06-04T08:30:00.000Z"
}

Examples

Extract first 100 products from a single store:

{ "domains": ["allbirds.com"], "maxProducts": 100 }

Full catalogue with inventory quantities:

{ "domains": ["allbirds.com"], "maxProducts": 0, "fetchDetails": true }

Scope to the sale collection only:

{ "domains": ["gymshark.com"], "collectionHandle": "sale", "maxProducts": 500 }

Batch run across multiple stores:

{
"domains": ["allbirds.com", "gymshark.com", "hiut.com"],
"maxProducts": 1000,
"fetchDetails": false
}

In-stock products only, with price monitoring fields:

{
"domains": ["allbirds.com"],
"maxProducts": 0,
"includeOutOfStock": false,
"fetchDetails": true
}

Daily catalog sync (run on a schedule):

{
"startUrls": [
{
"url": "https://www.allbirds.com"
}
],
"maxProducts": 500
}

Schedule this input to run once a day in the Apify Scheduler to keep a synced copy of the store's catalog and catch price changes.

💰 Pricing

$1.49 per 1,000 results — you only pay for successfully extracted products. Failed stores and skipped out-of-stock items are never charged.

ResultsCost
100~$0.15
1,000~$1.49
10,000~$14.90
100,000~$149.00

Flat-rate Shopify intelligence tools typically charge $29–$99/month regardless of usage.

Use the Max products cap to control your spend exactly.


Performance

Run sizeApprox. time (list-only)Approx. time (fetchDetails)
250 products~3s~4 min
1,000 products~10s~15 min
10,000 products~1.5 min~2.5 hrs

Performance varies by store size, product count, and server response time.


Known limitations

  • Stores built on Shopify Hydrogen (custom headless storefronts) do not expose /products.json. The actor detects these automatically and logs a clear message.
  • Password-protected stores require credentials not supported in this actor.
  • Some very large enterprise stores (>50k products) may apply rate limits — the actor handles these with automatic backoff.
  • inventory_quantity requires fetchDetails: true and is significantly slower.

Technical details

  • Zero proxy cost — Shopify's public JSON API requires no browser and no proxy on the vast majority of stores
  • Automatic store detection — headless and password-protected stores are identified before crawling begins
  • Efficient pagination — retrieves 250 products per API call (Shopify's maximum page size)
  • Exponential backoff — automatic retry on rate limits and server errors
  • Change detection — every product includes a contentHash derived from handle and last-updated timestamp

Additional services

Need custom integrations, scheduled runs, or data delivered to your warehouse? Contact us via the Apify messaging system.


Other scrapers in our General Marketplaces & Retail collection:


Run it on a schedule

This actor is built for repeat use. Set it to run daily, weekly, or hourly, and the data keeps flowing without you touching it.

  • Schedule runs — open the actor, go to Schedules, and pick a cadence. Each run only charges you for the results it returns.
  • Connect it to your stack — push results straight to Google Sheets, Slack, a webhook, or your database using Apify Integrations. No glue code needed.
  • Pull results via API — every run writes a clean dataset you can fetch with one API call, ready for whatever you build on top of it.

Set it once and it runs on its own.


Need a custom scraper?

Unfenced Group builds Apify actors for any website — for free.

If the site you need isn't in our portfolio yet, just ask. We scope, build, and publish it at no cost to you. You only pay for results — we absorb the compute and proxy costs ourselves. Same pay-per-result pricing, same quality, same standards as every actor in this portfolio.

Get in touch: www.unfencedgroup.nl