Shopify Store Products Scraper avatar

Shopify Store Products Scraper

Pricing

from $0.60 / 1,000 results

Go to Apify Store
Shopify Store Products Scraper

Shopify Store Products Scraper

Shopify Store Products Scraper reads any Shopify store's public products.json feed — title, price, compare-at price, discount %, stock, SKU and images, one row per product or variant.

Pricing

from $0.60 / 1,000 results

Rating

0.0

(0)

Developer

Murat Uzun

Murat Uzun

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

2 days ago

Last modified

Share

What is Shopify Store Products Scraper?

Shopify Store Products Scraper is an Apify Actor that reads any Shopify store's own public products.json feed and returns a clean, flat dataset — title, price, compare-at price, discount %, stock status, SKU, options and images — for every product, or every variant, in the catalog. It hits the exact same JSON endpoint the store's own theme uses to render its collection pages, so there is no HTML parsing, no anti-bot wall, no proxy and no API key required. Give it a store URL like https://www.allbirds.com and it returns one row per product variant (size/color) in seconds.

What data does Shopify Store Products Scraper extract?

Shopify Store Products Scraper extracts up to 33 fields per row, covering the product, the variant and pricing:

FieldTypeDescription
store, productId, productHandle, productUrlstring, number, stringWhich store the row came from and the product's id, slug and live URL
title, vendor, productType, tagsstring, arrayProduct title, brand, merchant category and tags
createdAt, updatedAt, publishedAtstringProduct lifecycle dates (ISO 8601)
variantId, variantTitle, sku, barcodenumber, stringVariant identity (variant mode)
price, compareAtPrice, currency, discountPercentnumber, stringSelling price, list price, currency (when derivable) and % off
available, inventoryQuantityboolean, numberIn-stock status and units on hand (when the store exposes it)
option1, option2, option3stringVariant option values, e.g. color / size
weightGrams, requiresShippingnumber, booleanShipping weight and whether the variant ships physically
imageUrl, imageCount, bodyTextstring, number, stringPrimary image, image count and the description with HTML stripped
variantCount, minPrice, maxPrice, anyAvailablenumber, booleanAggregates used instead of the variant fields in product mode
error, scrapedAtstringPer-store failure reason and the scrape timestamp

How to use Shopify Store Products Scraper

  1. Paste one or more store URLs into Store URLs, e.g. https://www.allbirds.com. A bare domain like gymshark.com also works.
  2. Leave One row per variant on for a price/stock feed keyed by SKU, or turn it off for one row per product with minPrice/maxPrice/anyAvailable.
  3. Optionally add Collection handles (e.g. mens-shoes) to scrape only those collections instead of the whole catalog.
  4. Click Start, then export the dataset as JSON, CSV, Excel or HTML.

Example input

{
"stores": ["https://www.allbirds.com"],
"maxProductsPerStore": 100,
"includeVariants": true,
"onlyAvailable": false
}

Example output

{
"store": "https://www.allbirds.com",
"productId": 7218356060240,
"productHandle": "mens-strider-explore",
"productUrl": "https://www.allbirds.com/products/mens-strider-explore",
"title": "Men's Strider Explore - Natural Black (Dark Grey Sole)",
"vendor": "Allbirds",
"productType": "Shoes",
"variantId": 41334293921872,
"variantTitle": "8.5",
"sku": "A11768M085",
"price": 130,
"compareAtPrice": null,
"discountPercent": null,
"available": true,
"option1": "8.5",
"imageUrl": "https://cdn.shopify.com/s/files/1/1104/4168/products/mens-strider-explore.jpg",
"imageCount": 3,
"scrapedAt": "2026-09-12T18:10:00.000Z"
}

Input parameters

ParameterTypeDefaultDescription
storesarray["https://www.allbirds.com"]Store URLs to scrape, one or many
maxProductsPerStoreinteger100Cap on products fetched per store (1-20000)
collectionHandlesarray[]Scope to specific collections instead of the whole catalog
includeVariantsbooleantrueOne row per variant (true) or one aggregated row per product
onlyAvailablebooleanfalseDrop out-of-stock variants/products
maxConcurrencyinteger3Stores scraped in parallel (1-10); pages within a store are sequential

Pricing

Shopify Store Products Scraper uses pay-per-event pricing: $0.001 per result row, i.e. $1 per 1,000 rows, plus a negligible actor-start fee. A default run against one mid-size store (250 products, ~4 variants each) costs about $1 for roughly 1,000 rows — cheaper than any headless-browser Shopify scraper, because every request is one small JSON call to the store's own storefront API. Set Maximum cost per run and the Actor trims the store list, and then the row list, to what the budget covers.

Shopify Store Products Scraper vs. browser-based scrapers

Most "universal" e-commerce scrapers render every product page in a headless browser to scrape prices off the DOM — slow, and easily broken by a theme update. Shopify Store Products Scraper reads the same structured JSON the store's own theme fetches, so it is faster, cheaper and immune to CSS/layout changes. It cannot see private apps, wholesale-only catalogs or draft products that are not on the public storefront, which is by design: it only reads what the merchant already publishes.

Using Shopify Store Products Scraper with AI agents and MCP

Shopify Store Products Scraper is pay-per-event with limited permissions — the two requirements for an Actor to be callable through the Apify MCP server at mcp.apify.com. An agent passes stores (and optionally collectionHandles) and gets back a flat table of prices and stock, ready for a competitor price-monitoring step, a dropshipping catalog import, or a lead-scoring pipeline. The same run works from n8n, Make, Zapier and LangChain through Apify's integrations.

FAQ

Does this work on any Shopify store? Yes, as long as the store has not disabled its public products.json feed (rare) and is not password-protected (pre-launch/private stores). Both cases return a single row with the reason in error instead of failing the run.

Why is inventoryQuantity often null? Shopify's public products.json feed does not include live stock counts for most themes — only available (in stock or not). inventoryQuantity is filled in on the rare stores that do expose it publicly.

Why is currency usually null? The public JSON feed does not name its currency; it is only included when it can be reliably derived. Treat price as being in the store's default storefront currency.

What counts as a "row" for pricing? Each variant (or, in product mode, each product) is one row. A store with 250 products and 4 variants each produces about 1,000 rows.

Is this legal to run? Yes. products.json is a public, unauthenticated endpoint Shopify serves to every visitor and search engine; no login or personal data is involved.

Can I export to CSV or Excel? Yes, from the Output tab or the API, with a ready-made Overview view.

Part of the webdatatools web-intelligence suite — every Actor is pay-per-event, reads public data without a login, and returns one clean row per entity:

Browse the whole suite at webdatatools, or call ten of these Actors straight from Claude, Cursor or Cline with the webdatatools MCP server.

Website & domain intelligence

Content for AI, LLMs and RAG

Search, video and social

Leads, jobs and company data

Developer, app and research data

Support and feedback

Found a store the Actor mis-detects as non-Shopify, or a field worth adding? Open an issue on the Issues tab.