Shopify Products Scraper - $1.00/1k, Full Catalog avatar

Shopify Products Scraper - $1.00/1k, Full Catalog

Pricing

$1.00 / 1,000 product returneds

Go to Apify Store
Shopify Products Scraper - $1.00/1k, Full Catalog

Shopify Products Scraper - $1.00/1k, Full Catalog

Shopify's own ceiling on /products.json is 250 products a page, and it hands those to anyone, no key. This walks the pages: title, URL, vendor, product type, tags, min and max price, availability, every variant with SKU and price, all image URLs. $1.00 per 1,000 products, no run-start fee.

Pricing

$1.00 / 1,000 product returneds

Rating

5.0

(2)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

2

Monthly active users

3 days ago

Last modified

Share

Shopify Products Scraper

Shopify's own ceiling on /products.json is 250 products a page, and it hands those 250 to anyone who asks. That endpoint, and that ceiling, are the whole trick here.

This pages through it, 250 products at a time, and flattens the result into rows you can drop straight into a sheet: one row per product, with every variant and image. The endpoint is open, so there's no key to request and no anti-bot standing in front of it.

What you get per product

FieldNotes
storeThe origin the row came from.
productId, handle, urlShopify's id, the slug, and the canonical /products/<handle> link.
title, vendor, productTypeAs the store set them.
tagsArray. Many stores use these for internal metadata, so expect entries like allbirds::gender => mens alongside real tags.
descriptionbody_html stripped to plain text.
createdAt, publishedAtISO timestamps.
priceMin, priceMaxAcross the product's variants.
availabletrue if any variant is in stock.
variantCount, variantsEach variant carries title, sku, price, compareAtPrice and available.
imagesArray of image URLs.

A real variant, from an Allbirds row:

{ "title": "8", "sku": "A11718M080", "price": 91, "compareAtPrice": 130, "available": false }

Input

{
"storeUrls": ["https://www.gymshark.com", "allbirds.com"],
"maxItems": 500
}
FieldDefaultNotes
storeUrlsA bare domain, a full URL, or any page on the store — all get normalised to the origin.
maxItems1000Products per store.
proxyConfigurationoffOptional. The endpoint is public with no anti-bot, so leave it off unless a huge sweep starts hitting IP rate limits.
notionConnector / notionParentIdOptional delivery into Notion via an Apify MCP connector.

If a store blocks the www host but serves on the apex (or the reverse), both are tried before giving up.

Limits worth knowing

  • Published products only. Drafts and unpublished products aren't in /products.json at all, so nothing here can reach them.
  • No stock numbers. Shopify keeps inventory_quantity out of the public feed. You get the boolean available per variant, and that's the most anyone gets from this endpoint.
  • Some stores disable or password-protect the endpoint. Those come back as a NOT_SHOPIFY diagnostic row rather than failing the run.
  • 250 per page is Shopify's limit, handled for you.
  • Fields mirror the store's own data, so title, handle, vendor, productType and the price fields can be null when the store left them empty. tags, variants and images are always arrays, sometimes empty.

Billing

$1.00 per 1,000 products ($0.001 each), with no run-start fee. Flat on every plan.

One charge per product row with ok: true. Diagnostic rows — NOT_SHOPIFY, NO_RESULTS, BAD_INPUT, network errors — are ok: false and cost nothing. So if you feed it a list of domains and half turn out not to be Shopify, you pay for the half that are.