Shopify Products Scraper avatar

Shopify Products Scraper

Pricing

from $2.00 / 1,000 product scrapeds

Go to Apify Store
Shopify Products Scraper

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

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

2 days ago

Last modified

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 forUse a different actor for
Any Shopify storefront's product catalogNon‑Shopify stores (Amazon, eBay, Walmart, Etsy)
Prices, variants, SKUs, images, optionsOrder, customer, or checkout data (not public)
Bulk multi‑store product exportsShopify 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

FieldTypeDescription
storeUrlsarrayStore domains/URLs → scrape the entire catalog (e.g. gymshark.com). Add many to batch.
collectionUrlsarrayCollection URLs → scrape only that category (e.g. .../collections/leggings).
productUrlsarrayIndividual product URLs → one detailed record each.
maxProductsintegerTotal product cap across the run (default 1000). Billing stops here.
includeVariantsbooleanInclude the per‑variant breakdown (default true).
includeImagesbooleanInclude the full image URL list (default true).
proxyConfigurationobjectApify 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:

FieldDescription
productIdShopify product ID
title, handle, urlProduct name, slug, canonical URL
storeDomainStore hostname (no www)
vendor, productTypeBrand and Shopify product type
descriptionPlain‑text description (HTML stripped)
tagsProduct tags array
currencyStore currency (from meta.json)
price, priceMaxLowest and highest variant price
compareAtPriceLowest compare‑at (sale) price
availableTrue if any variant is in stock
variantsCount, imagesCountCounts
optionNames, optionsOption dimensions (Size, Color…) and values
featuredImage, imagesPrimary image and full image list
variantsPer‑variant price, sku, available, options, weight, etc.
createdAt, updatedAt, publishedAt, scrapedAtISO‑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

EventPrice
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

  1. For each store, the actor calls https://<store>/products.json?limit=250&page=N, paginating until the catalog is exhausted or maxProducts is reached.
  2. Collection URLs use /collections/<handle>/products.json; product URLs use <product>.json.
  3. Store currency is read once per store from /meta.json.
  4. Requests retry with exponential backoff on rate limits, and rotate proxy on each attempt.
  5. 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.

  • 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.

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.