Shopify Store Scraper - Products, Variants, Prices & Leads avatar

Shopify Store Scraper - Products, Variants, Prices & Leads

Pricing

$4.00 / 1,000 result scrapeds

Go to Apify Store
Shopify Store Scraper - Products, Variants, Prices & Leads

Shopify Store Scraper - Products, Variants, Prices & Leads

Scrape any Shopify store: products with variants, SKUs, prices, compare-at discounts, stock, images, options & tags, plus store intelligence and merchant leads (email, phone, socials). Modes for store, collection or product. Monitoring for new products & price drops. No login.

Pricing

$4.00 / 1,000 result scrapeds

Rating

0.0

(0)

Developer

Scrape Sage

Scrape Sage

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Shopify Store Scraper — Products, Variants, Prices, Inventory & Store Leads

Extract complete product data from any Shopify store — every product with all variants, SKUs, barcodes, prices, compare-at discounts, inventory/stock, images, options and tags — plus store intelligence (currency, country, payment methods, theme, product & collection counts) and the merchant's contact lead (email, phone, social profiles). Works on millions of Shopify stores. No login, no app, no API key.

Built for dropshippers, product researchers, price-monitoring teams, and agencies/app-developers who sell to Shopify merchants. Turn any store URL into a structured catalog — and turn the store owner into a ready B2B lead.

Why this Shopify scraper?

Generic "paste-a-URL" crawlers grab a few visible fields and miss the data that actually matters. This actor reads Shopify's public product, collection and store endpoints directly and ships the richest dataset in the category — full variant arrays, computed price/discount/stock signals, store-level intelligence, and the merchant contact lead, in one clean table.

DataGeneric crawlersThis actor
Product title, vendor, type, tags, descriptionpartial
All variants — SKU, barcode, price, compare-at, availability, weight, options❌ / partial
Computed price range, discount %, on-sale flag
Computed in-stock + in-stock variant count
All product images (src, alt, position, dimensions)partial
Store intelligence — currency, country, payment cards, theme, product/collection counts
Store-owner lead — email, phone, Instagram/Facebook/TikTok/X/YouTube/Pinterest/LinkedIn
Scrape a whole store, a collection, or single productspartial
Monitoring mode — only new products & price/stock changes
One clean dataset, no empty columns

Use cases

  • Product & niche research — pull a competitor's full catalog with prices, variants and best-sellers signals to spot winning products and gaps.
  • Price & inventory monitoring — track price drops, sell-outs and back-in-stock events across the stores you care about, on a schedule.
  • Dropshipping & sourcing — export catalogs with SKUs, variants and images to seed your own store or supplier research.
  • Competitive intelligence — compare assortment, pricing, discounts and payment options across an entire set of Shopify stores.
  • B2B lead generation — use Store leads mode to prospect Shopify merchants: contact email, phone, socials and tech stack, ready for your CRM or outreach (perfect for agencies, app developers, 3PLs and B2B vendors who sell to Shopify brands).

How to use

  1. Sign up for Apify — the free plan is enough to try this actor.
  2. Open the Shopify Store Scraper, choose a mode (Products by default), and paste one or more store URLs (e.g. https://www.allbirds.com or just rothys.com).
  3. Click Start and watch results stream into the dataset table.
  4. Export as JSON, CSV, Excel, XML, or RSS — or pull results programmatically via the Apify API.

Input

{
"mode": "products",
"storeUrls": ["https://www.allbirds.com", "rothys.com"],
"maxProductsPerStore": 0,
"enrichStoreLeads": true,
"monitorMode": false
}
  • mode (default products)products (full catalog of each store in storeUrls), collection (products inside the collectionUrls you provide), product (single productUrls), or store (store intelligence + owner lead only, no products).
  • storeUrls — one or more Shopify stores. Full URL, bare domain, or *.myshopify.com domain. Used by products and store modes.
  • collectionUrls — full collection URLs (e.g. …/collections/mens-shoes) for collection mode.
  • productUrls — full product URLs (e.g. …/products/wool-runners) for product mode.
  • maxProductsPerStore (default 0 = no limit) — cap products per store for quick test runs.
  • onlyAvailable / minPrice / maxPrice — filter to in-stock products and/or a price band (in the store's own currency).
  • includeVariants / includeImages (default true) — include the full variant and image arrays.
  • includeStoreMeta (default true) — attach store intelligence (from meta.json) to each product.
  • enrichStoreLeads (default true) — read the storefront for the merchant's email, phone, socials and theme. Always on in store mode.
  • monitorMode (default false) — emit only new/changed products (see below).
  • proxyConfiguration — proxy settings (Apify Proxy by default; switch to Residential for the few large brands behind Cloudflare).

Output

By default you get one clean, dense table of products — every column applies to every row. Use the Products, Variants and Store leads dataset views to switch the visible columns.

A product record (mode: "products"):

{
"mode": "products",
"storeUrl": "https://www.allbirds.com",
"storeDomain": "www.allbirds.com",
"store": {
"name": "Allbirds",
"myshopifyDomain": "weareallbirds.myshopify.com",
"currency": "USD",
"country": "US",
"paymentCardBrands": ["visa", "master", "american_express"],
"publishedProductsCount": 72,
"publishedCollectionsCount": 1338,
"email": "help@allbirds.com",
"socials": { "instagram": "https://www.instagram.com/allbirds", "tiktok": "https://www.tiktok.com/@weareallbirds" },
"theme": "Handover theme",
"leadScore": 7
},
"id": 3687618936912,
"title": "Trino® Tubers - Onyx",
"handle": "trino-tubers-onyx",
"url": "https://www.allbirds.com/products/trino-tubers-onyx",
"vendor": "Allbirds",
"productType": "Socks",
"tags": ["unisex", "socks"],
"description": "The Trino Tubers is a tube sock that hugs just below your calf…",
"options": [{ "name": "Size", "position": 1, "values": ["S", "M", "L"] }],
"featuredImage": "https://cdn.shopify.com/…",
"imageCount": 5,
"price": 16,
"priceMin": 16,
"priceMax": 16,
"compareAtPriceMax": null,
"onSale": false,
"discountPercent": 0,
"currency": "USD",
"variantCount": 4,
"availableVariantCount": 2,
"inStock": true,
"variants": [
{ "id": 28848479666256, "title": "S (W5-7)", "sku": "ST1UONX101", "price": 16, "compareAtPrice": null, "available": false, "option1": "S (W5-7)", "grams": 99 }
],
"images": [{ "src": "https://cdn.shopify.com/…", "alt": "Trino Tubers Onyx", "position": 1 }],
"scrapedAt": "2026-06-15T18:00:00.000Z"
}

A store-lead record (mode: "store") is a flat row with name, storeDomain, myshopifyDomain, currency, country, publishedProductsCount, paymentCardBrands, email, phone, instagram/facebook/tiktok/twitter/youtube/pinterest/linkedin, theme and a leadScore.

What to expect (field coverage)

Shopify exposes products and store metadata publicly, so the catalog is highly complete. Some fields are merchant-entered and only present when the store filled them in:

Field groupCoverage
Product core (title, handle, vendor, type, price, variants, images)✅ ~100% on stores that expose products.json
barcode, inventoryQuantity, weight/weightUnitpresent when the store publishes them (varies by store)
Store intelligence (meta.json: currency, country, counts, payment cards)✅ when the store keeps meta.json public (most do)
Store lead email~50–70% (homepage/contact page)
Store lead socials, theme✅ usually present

A blank field means the merchant didn't publish it — not that scraping failed. Nothing is dropped, so you always get the richest dataset available. A small number of large brands serve their storefront behind Cloudflare or use a headless (Hydrogen) front end without products.json; for those, switch to Residential proxy or expect them to be skipped with a clear log note.

Monitoring mode — only new products & price drops

Turn on monitorMode to remember every product returned in previous runs and emit only products that are new or whose price / discount / availability changed since the last run. Each record is tagged monitorStatus (new or changed). It fingerprints on price and stock — not Shopify's volatile updated_at — so you get real signal, not noise.

Pair it with Apify Schedules: the schedule triggers the run on your cadence, and monitor mode remembers what it already returned across those runs (state is kept in a named key-value store, completely separate from the scheduler). New launches, price drops and back-in-stock events land straight in your dataset — perfect for a daily price-watch or a Slack/CRM alert.

Automate & schedule

Run this actor on autopilot and pull results into your own stack:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });
const run = await client.actor('scrapesage/shopify-store-scraper').call({
mode: 'products',
storeUrls: ['https://www.allbirds.com'],
monitorMode: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} products`);

Integrate with any app

Connect the dataset to 5,000+ apps — no code required:

  • Make — multi-step automation scenarios.
  • Zapier — push new products or price drops straight into your tools.
  • Slack — get notified when a monitored store drops a price or adds a product.
  • Google Drive / Sheets — auto-export every run to a spreadsheet.
  • Airbyte — pipe results into your data warehouse.
  • GitHub — trigger runs from commits or releases.

Use with AI assistants (MCP)

The output is clean, LLM-ready JSON. Call this actor from Claude, ChatGPT, or any agent framework through the Apify MCP server — ask your assistant to "list every product and price from this Shopify store" and let it run the scraper for you.

More scrapers from scrapesage

Build a complete e-commerce & marketplace intelligence stack:

Tips

  • Pick a single mode for a clean, fully-populated table. Use products for whole-store catalogs, collection to target a specific collection, product for a handful of URLs, and store for pure lead lists.
  • Store leads: keep enrichStoreLeads on to capture the merchant's email, phone, socials and theme — it's the difference between a product row and a contactable lead.
  • Big catalogs: leave maxProductsPerStore at 0 to get everything; products stream in pages of up to 250 so rows appear within seconds.
  • Large brands behind Cloudflare: a few big stores front their storefront with Cloudflare or run a headless (Hydrogen) front end — switch proxyConfiguration to Residential for those, or expect a clear skip note in the log.
  • Recurring monitoring: combine Schedules with monitorMode to track price drops and new launches automatically.

FAQ

Which stores work? Any store running Shopify that keeps its public product endpoints available — that's the large majority of the millions of Shopify stores. Paste the store's main domain or its *.myshopify.com domain.

Does it need the Shopify Admin API or an access token? No. This actor reads Shopify's public storefront endpoints (products.json, collections/<handle>/products.json, products/<handle>.json, meta.json) — no key, app install or login needed.

Can I get inventory quantities? You get per-variant availability (in stock / out of stock) and an in-stock variant count on every store. Exact on-hand quantities are only returned by stores that publish them — many don't expose that publicly.

Can I export to Google Sheets, CSV, or Excel? Yes — one click in the dataset view, or automatically on every run via the Google Drive integration.

How do I track price drops and new products? Turn on monitorMode and create a Schedule. Each run returns only products that are new or whose price/stock changed, tagged monitorStatus.

A field is empty — why? Some merchants don't publish barcodes, weights or a contact email, and some big brands hide products.json. Fields are blank only when the store didn't publish that data — never because the scraper skipped it.

Is scraping Shopify stores legal? This actor collects publicly available data only. You're responsible for using the data in compliance with applicable laws (e.g. GDPR/CCPA for personal data) and the stores' terms.

Need help?

Open an issue on the actor's Issues tab, or visit the Apify help center. Feature requests are welcome — this actor is actively maintained.