Pricing
from $2.00 / 1,000 product scrapeds
Shopify Products Scraper
Scrape every product from any Shopify store via the public products.json endpoint — prices, variants, images.
Pricing
from $2.00 / 1,000 product scrapeds
Rating
0.0
(0)
Developer
Actor stats
0
Bookmarked
1
Total users
0
Monthly active users
2 days ago
Last modified
Categories
Share
Scrape every product from any Shopify store — prices, variants, images, options, vendor, tags, and inventory availability — without login, cookies, or an API key. Point it at a store domain, a collection, or individual product URLs and get clean, structured JSON in seconds.
This actor reads each store's public products.json endpoint (the same data the storefront uses), so it is fast, HTTP‑only, and extremely reliable — no browser, no anti‑bot fight, no breakage when a theme changes.
What you can do with it
- Export a competitor's full catalog with prices and variants for pricing intelligence.
- Pull a single collection/category to monitor a product line.
- Enrich a shortlist of specific product URLs with full detail.
- Batch many stores in one run for market research or dropshipping product discovery.
- Feed an AI agent (Claude, ChatGPT, MCP clients) structured product data on demand.
When to use it (and when not)
| Use this actor for | Use a different actor for |
|---|---|
| Any Shopify storefront's product catalog | Non‑Shopify stores (Amazon, eBay, Walmart, Etsy) |
| Prices, variants, SKUs, images, options | Order, customer, or checkout data (not public) |
| Bulk multi‑store product exports | Shopify App Store listings or store‑lead discovery |
Most stores built on Shopify expose products.json. A small number disable it or sit behind a password page — those are reported clearly and skipped, never billed as products.
Input
| Field | Type | Description |
|---|---|---|
storeUrls | array | Store domains/URLs → scrape the entire catalog (e.g. gymshark.com). Add many to batch. |
collectionUrls | array | Collection URLs → scrape only that category (e.g. .../collections/leggings). |
productUrls | array | Individual product URLs → one detailed record each. |
maxProducts | integer | Total product cap across the run (default 1000). Billing stops here. |
includeVariants | boolean | Include the per‑variant breakdown (default true). |
includeImages | boolean | Include the full image URL list (default true). |
proxyConfiguration | object | Apify proxy (default: Apify Proxy auto). |
Provide at least one of storeUrls, collectionUrls, or productUrls.
Example input
{"storeUrls":["gymshark.com"],"collectionUrls":["https://www.allbirds.com/collections/mens"],"productUrls":["https://your-store.com/products/product-handle"],"maxProducts":500,"includeVariants":true,"includeImages":true}
Output
One row per product. Fields:
| Field | Description |
|---|---|
productId | Shopify product ID |
title, handle, url | Product name, slug, canonical URL |
storeDomain | Store hostname (no www) |
vendor, productType | Brand and Shopify product type |
description | Plain‑text description (HTML stripped) |
tags | Product tags array |
currency | Store currency (from meta.json) |
price, priceMax | Lowest and highest variant price |
compareAtPrice | Lowest compare‑at (sale) price |
available | True if any variant is in stock |
variantsCount, imagesCount | Counts |
optionNames, options | Option dimensions (Size, Color…) and values |
featuredImage, images | Primary image and full image list |
variants | Per‑variant price, sku, available, options, weight, etc. |
createdAt, updatedAt, publishedAt, scrapedAt | ISO‑8601 timestamps |
Example output (truncated)
{"productId":"1234567890","title":"Vital Seamless Leggings","handle":"vital-seamless-leggings","url":"https://gymshark.com/products/vital-seamless-leggings","storeDomain":"gymshark.com","vendor":"Gymshark","productType":"Leggings","currency":"USD","price":40,"priceMax":50,"compareAtPrice":60,"available":true,"variantsCount":18,"optionNames":["Color","Size"],"featuredImage":"https://cdn.shopify.com/...jpg","variants":[{"variantId":"987","title":"Black / S","sku":"GS-VSL-BLK-S","price":40,"available":true,"options":["Black","S"]}],"scrapedAt":"2026-06-17T00:00:00.000Z"}
Pricing — Pay Per Event
| Event | Price |
|---|---|
| Actor start | $0.001 per run |
| Product scraped | $0.002 per product |
A 1,000‑product export costs about $2.00. You are charged per product returned, never per page or per variant, and billing stops at maxProducts. Blocked or empty stores are not billed as products.
How it works
- For each store, the actor calls
https://<store>/products.json?limit=250&page=N, paginating until the catalog is exhausted ormaxProductsis reached. - Collection URLs use
/collections/<handle>/products.json; product URLs use<product>.json. - Store currency is read once per store from
/meta.json. - Requests retry with exponential backoff on rate limits, and rotate proxy on each attempt.
- Records are flattened to a stable, agent‑friendly schema and pushed to the dataset.
Reliability
Because it uses Shopify's own public JSON endpoints rather than HTML scraping, output does not break when a store changes its theme. Stores that disable products.json or are password‑protected are detected and reported; a run that finds zero products across all targets fails honestly with a clear message instead of returning an empty dataset silently.
MCP / AI agents
This actor is MCP‑ready. Expose it through the Apify MCP server as khadinakbar/shopify-products-scraper and call it with a single store URL to get structured product JSON back. Input descriptions are written for an LLM to route correctly between the three modes.
Related actors
- shopify-all-in-one-scraper — products + storefront intelligence in one actor.
- google-shopping-scraper, walmart-data-extractor, ebay-all-in-one-scraper — cross‑marketplace pricing.
FAQ
Does it need a Shopify API key or login? No. It uses only public endpoints.
Can it scrape any store? Any standard Shopify storefront. A minority disable products.json or use a password page; those are skipped with a clear note.
Does it get inventory quantities? It returns per‑variant in‑stock availability (available). Exact stock counts are not exposed on the public endpoint.
How fresh is the data? Live at scrape time — the same data the store's own theme renders.
Legal
This actor collects only publicly available product data from Shopify storefronts. It does not access private, authenticated, or personal data. You are responsible for ensuring your use complies with the target store's Terms of Service, robots directives, and applicable laws (including copyright and database rights). Use the data responsibly and lawfully.
