Shopify Scraper - Products, Collections, Analysis avatar

Shopify Scraper - Products, Collections, Analysis

Pricing

Pay per event

Go to Apify Store
Shopify Scraper - Products, Collections, Analysis

Shopify Scraper - Products, Collections, Analysis

Scrape products and collections from any Shopify-powered store. Pay-per-event pricing — only pay for the items you actually scrape. No API key needed.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Arnas

Arnas

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

Shopify Scraper (Pay-Per-Event)

Shopify Scraper is a high-fidelity crawler that extracts product and collection data from any Shopify-powered store. This is the Pay-Per-Event edition — there is no monthly rental, no compute-unit guesswork, and no minimum spend. You pay only for the products and collections you actually scrape.

Use it on the Apify platform for scheduling, API access, dataset exports (JSON, CSV, Excel, HTML), residential proxy rotation, run monitoring, and integration with Make, Zapier, and 5000+ other tools.

What does Shopify Scraper do?

Give it a Shopify store homepage, a collection URL, or an individual product URL — the actor classifies each input and hits Shopify's public storefront JSON endpoints (/products.json, /collections.json, /products/<handle>.json, /recommendations/products.json, /search/suggest.json). No API key or merchant authentication is required because every Shopify storefront serves these endpoints publicly.

The scraper extracts:

  • Title, vendor, product type, tags, description (HTML and stripped plaintext)
  • All variants with SKU, price, compare-at price, availability, and option values (size / color / etc.)
  • All product images with dimensions and alt text
  • Option matrices (e.g. Size × Color)
  • Real-time stock status (available)
  • Optional related-product recommendations per scraped product

Prices are normalized to integer cents (multiply by 100 to display) so financial totals never drift due to floating-point errors. 2000 means $20.00.

Why use Shopify Scraper?

  • Market research — Analyze competitor pricing, inventory depth, variant strategy, and copy.
  • Trend monitoring — Track new product launches and stock changes across multiple brands daily.
  • Catalog aggregation — Pull product data from many Shopify stores into a unified dataset.
  • Lead enrichment — Augment your CRM with product-line data on Shopify-merchant prospects.
  • Pricing intelligence — Watch promotional cycles, compare-at-price drops, and cross-store undercutting.

How to use Shopify Scraper

  1. Verify the target is a Shopify store. Open https://<domain>/admin (e.g. https://gymshark.com/admin). If you see a Shopify login page, the site is compatible.
  2. Click "Try for free" on this actor's page.
  3. Add one or more Start URLs in the input form. Homepages, collection pages, and product pages all work.
  4. Set "Max products per run" to control your spend. The default 100 keeps test runs cheap.
  5. (Optional) Provide a search query to find specific products inside a store, or set "Recommendations per product" to pull related items.
  6. Click "Save & Start". Watch the live log; results stream into the dataset as they're scraped.
  7. Export as JSON, CSV, Excel, or HTML, or hit the Apify Dataset API directly.

Input

ParameterTypeRequiredDescription
startUrlsArrayYesHomepage, collection, single-product, or search URLs.
queryStringNoSearch query — combined with a homepage URL, runs the store's predictive search and scrapes the matching products.
maxRequestsPerCrawlIntegerNoMax products to emit per run. 0 = unlimited. Default 100.
maxRecommendationsPerProductIntegerNoRecommendations to fetch per product. 0 disables. Max 20.
currencyStringNo3-letter ISO code (e.g. USD, EUR). Forces the store to return prices in this currency when supported.
maxRequestRetriesIntegerNoRetry budget for transient failures. Default 5.
proxyConfigurationObjectNoApify proxy. Residential is the default and is strongly recommended — datacenter IPs are often blocked by Cloudflare-fronted Shopify stores.

Input examples

Use caseInput JSON
Scrape all products from a store{ "startUrls": [{ "url": "https://kith.com" }], "maxRequestsPerCrawl": 0 }
Scrape products from a collection{ "startUrls": [{ "url": "https://kith.com/collections/kith-tops" }], "maxRequestsPerCrawl": 0 }
Scrape a single product page{ "startUrls": [{ "url": "https://kith.com/products/kith-williams-iii-hoodie-black" }] }
Search products by keyword{ "startUrls": [{ "url": "https://kith.com" }], "query": "hoodie" }
Fetch product with recommendations{ "startUrls": [{ "url": "https://kith.com/products/kith-williams-iii-hoodie-black" }], "maxRecommendationsPerProduct": 10 }
Limit total scraped results{ "startUrls": [{ "url": "https://kith.com" }], "maxRequestsPerCrawl": 100 }
Force a specific currency{ "startUrls": [{ "url": "https://kith.com" }], "currency": "EUR" }

Output

All results land in the run's default dataset. Each record has a type field ("product" or "collection") so a single dataset cleanly carries both.

Sample product record

{
"type": "product",
"id": "8123456789012",
"handle": "kith-williams-iii-hoodie-black",
"title": "Kith Williams III Hoodie",
"vendor": "Kith",
"productType": "Hoodies",
"tags": ["hoodie", "fleece", "ss26"],
"url": "https://kith.com/products/kith-williams-iii-hoodie-black",
"storeDomain": "kith.com",
"currency": null,
"price": 18000,
"compareAtPrice": null,
"available": true,
"publishedAt": "2026-01-12T17:00:00-05:00",
"updatedAt": "2026-04-10T09:14:22-04:00",
"descriptionHtml": "<p>Heavyweight French-terry hoodie...</p>",
"description": "Heavyweight French-terry hoodie...",
"images": [
{
"id": "31234567890",
"src": "https://cdn.shopify.com/s/files/.../front.jpg",
"alt": null,
"width": 2000,
"height": 2500
}
],
"options": [
{ "name": "Size", "values": ["S", "M", "L", "XL"] },
{ "name": "Color", "values": ["Black"] }
],
"variants": [
{
"id": "44123456789",
"sku": "KH8000-001-S",
"title": "S / Black",
"price": 18000,
"compareAtPrice": null,
"available": true,
"option1": "S",
"option2": "Black",
"option3": null
}
],
"isRecommendation": false,
"recommendedFor": null,
"scrapedAt": "2026-04-29T16:34:30.000Z"
}

Sample collection record

{
"type": "collection",
"id": "456123789",
"handle": "kith-tops",
"title": "Kith Tops",
"url": "https://kith.com/collections/kith-tops",
"storeDomain": "kith.com",
"descriptionHtml": "",
"description": "",
"publishedAt": null,
"updatedAt": "2026-04-22T11:02:18-04:00",
"productsCount": 184,
"image": {
"src": "https://cdn.shopify.com/s/files/.../tops-banner.jpg",
"alt": null,
"width": 1200,
"height": 600
},
"scrapedAt": "2026-04-29T16:34:30.000Z"
}

You can download the dataset in JSON, JSONL, CSV, Excel, or HTML.

Data table

FieldTypeDescription
typestring"product" or "collection"
idstringShopify numeric ID, stringified
handlestringShopify URL-safe slug
titlestringDisplay title
vendorstringBrand / vendor (products only)
productTypestringProduct taxonomy (products only)
tagsstring[]Merchant-defined tags
priceintegerMin variant price in cents (multiply ÷100)
compareAtPriceintegerMin variant compare-at price in cents
availablebooleanTrue if any variant is in stock
variantsarrayPer-SKU details: id, sku, price, options, availability
imagesarrayAll product images with src, dimensions, alt
optionsarrayVariant axes (Size, Color, etc.)
productsCountintegerNumber of products in collection (collections only)
isRecommendationbooleanTrue for products fetched via recommendations
recommendedForstringParent product ID when this is a recommendation

Pricing / Cost estimation

This actor uses Pay-Per-Event pricing. There is no monthly rental — you pay only when records are emitted to the dataset.

EventFired whenCost driver
actor-startThe run begins (handled automatically by Apify)Per run
product-scrapedA product is written to the datasetPer product
collection-scrapedA collection metadata record is writtenPer collection
recommendation-scrapedA recommended product is writtenPer recommendation

Refer to the Pricing tab on this actor's listing for the current per-event rates.

Cost levers:

  • maxRequestsPerCrawl is the hard ceiling on emitted products (and recommendations).
  • Setting maxRecommendationsPerProduct to 0 (default) disables recommendation events entirely.
  • A single-product URL run typically results in 1 × actor-start + 1 × product-scraped plus optional recommendations.
  • Failed runs (invalid input, no Shopify endpoints reachable) emit no product/collection events.

Tips and advanced options

  • Use residential proxies. Cloudflare-fronted stores 403 datacenter IPs aggressively. The default proxy group is RESIDENTIAL for this reason.
  • Pagination is automatic. The actor walks ?page=N until Shopify returns an empty products array. There's no need to set page bounds manually.
  • Currency selection. Pass currency: "EUR" (or any 3-letter ISO code) to scrape localized prices, when supported by the store.
  • SKUs are not merged. Some Shopify themes visually combine multiple SKUs onto a single product page. This scraper treats every SKU as its own variant — no SKU merging is performed.

FAQ, disclaimers, and support

Is this legal? Scraping public product data is generally legal in most jurisdictions, but you are responsible for complying with the target site's Terms of Service, copyright on images and copy, and applicable data-protection laws (GDPR, CCPA). Don't scrape personal data and don't use scraped content in ways that violate the merchant's rights.

Why are no products returned? Either (a) the site isn't Shopify-based — verify with the /admin trick above — or (b) Cloudflare blocked the request. Switch to residential proxies and try again.

Why is the price wrong? Shopify returns prices as strings or integer cents depending on the endpoint. This actor normalizes everything to integer cents (×100). 1999 means $19.99. If your store supports multiple currencies, set the currency field to force a specific one.

How do I report bugs or request features? Open an issue on this actor's Issues tab on the Apify Store. We also build custom Shopify scraping pipelines on request — reach out via the Apify contact form.