Tools / Shopify Products Data, Shopify Collection Scraper, Shopify CSV
Shopify Products Data, Shopify Collection Scraper, Shopify CSV
Full product catalog of any Shopify store or collection: prices, compare-at prices, discount %, every variant with SKU, options, stock and image, plus tags, images, plain-text and HTML descriptions. Filter by price window (minPrice/maxPrice, matched against each product's own variant price range), discount depth (onSaleOnly/minDiscountPercent), brand or product type (vendors/productTypes, OR-matched lists) or keyword before any row is charged. Optional Apify Proxy routing for rate-limited or geo-priced stores. Optional detailLevel:"full" adds each product's SEO title/description, star-rating summary, per-variant quantity rules (min/max/case-pack) and subscription plans (one extra request/product, priced separately). Watch mode (watchLabel) turns a scheduled run into a diff: after a free baseline run it returns only new products, price drops/increases, sale starts/ends and stock flips, so unchanged products are never charged.
Works on any Shopify storefront without login. Pass a store homepage for the whole catalog, a /collections/<handle> URL for one collection, or a /products/<handle> URL for a single product.
One charge per product. Overlapping collections are the normal case — /collections/all plus a category, or two categories sharing a product. Each product is returned, and charged, once per run, under the first URL that returned it; repeats are skipped before any filter and before billing. Every row carries sourceUrl, the input URL it came from, so several collections of one store stay distinguishable.
Watch mode: set watchLabel and the first run records each product’s price, availability and sale status for free; every later run under that label returns only what changed (new, priceDrop, priceIncrease, wentOnSale, saleEnded, backInStock, outOfStock, delisted) with previousPriceMin, previousIsOnSale and priceChange on each row. Unchanged products are never pushed and never charged, and a delisted row is only produced when the run walked that store’s whole feed.
Run it
curl -X POST https://fetchsmith.com/api/v1/run/shopify-products-scraper \
-H "Authorization: Bearer YOUR_KEY" -H "Content-Type: application/json" \
-d '{"includeVariants": true, "maxProductsPerStore": 250, "max_results": 250, "storeUrls": ["https://www.allbirds.com"]}'
Output fields
id title handle url vendor productType tags currency priceMin priceMax compareAtPriceMin compareAtPriceMax isOnSale discountPercent available availableVariantCount variantCount totalInventory images imageUrl imageCount options variants description descriptionHtml createdAt updatedAt publishedAt store sourceUrl scrapedAt seoTitle seoDescription ratingValue reviewCount hasSubscriptionOption subscriptionPlans watchLabel watchChange watchChanges previousPriceMin previousAvailable previousIsOnSale priceChange
Sample output
{
"available": true,
"handle": "mens-wool-runners",
"id": 6543210987,
"priceMin": 98,
"title": "Men\u0027s Wool Runner",
"url": "https://www.allbirds.com/products/mens-wool-runners",
"variantCount": 12,
"vendor": "Allbirds"
}
Guides
- "Shopify's bulk products.json hides stock counts and barcodes — the per-product endpoint doesn't" — "products.json?limit=250 strips inventory_quantity, inventory_management, inventory_policy and barcode from every variant. The per-product /products/<handle>.json endpoint (same auth, same key-free access) carries all four. Here's what actually differs and what to watch for."
- Every Shopify store's catalog is public JSON — no login, no browser, no API key — "/products.json and /meta.json expose a Shopify store's full catalog, prices, variants and currency to anyone, paginated, with zero authentication. Here's the shape of it and what most scrapers still get wrong."
- We timed HTTP-only scraping against a headless browser on the same page. It wasn't close. — A real benchmark on a 1 vCPU / 2 GB box — fetching a Shopify catalog via its public JSON endpoint vs. rendering the same collection page with headless Chromium. Time, memory, and data quality, all measured.
Only publicly accessible pages are read. Respect the source site's terms when using the data.