Shopify Store & Product Scraper: Variants, Prices, Store Leads avatar

Shopify Store & Product Scraper: Variants, Prices, Store Leads

Pricing

Pay per event

Go to Apify Store
Shopify Store & Product Scraper: Variants, Prices, Store Leads

Shopify Store & Product Scraper: Variants, Prices, Store Leads

Scrape Shopify product catalogs (/products.json), variants, discounts, stock status, and B2B store lead profiles (installed apps, theme, socials) with zero login.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Almandine Data

Almandine Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Scrape Shopify product catalogs (/products.json), variants, discounts, stock status, and B2B store lead profiles (installed apps, theme, socials) with zero login.

What it does

Extracts complete Shopify product catalogs, variant SKUs/pricing, and enriched B2B store lead intelligence via public storefront JSON feeds and headers. Export clean, deduplicated data as JSON, CSV, Excel, XML, or RSS, or connect directly via the Apify REST API, Python/JavaScript SDKs, CLI, MCP Server, n8n, Make, or Zapier — with no login, cookies, or browser overhead.

Use cases

  • Competitor Price, Discount & SKU Monitoring: Track priceMin, priceMax, compareAtPriceMax, discountPct, and variant-level stock availability (inStock) across any competitor Shopify store.
  • B2B Shopify Merchant Lead Generation: Use mode: "both" or "store_profile" to extract merchant currency, storeThemeName, detected Shopify apps (Klaviyo, Yotpo, Judge.me, Recharge, Gorgias, Attentive), and social links.
  • Dropshipping, Wholesale & Catalog Aggregation: Pull clean product titles, descriptions, high-resolution images (imageUrl), tags, and option matrices directly into Google Sheets, BigQuery, or Shopify CSV imports.
  • Automated New-Product Alerts: Schedule daily runs with onlyNew: true to receive Slack/email alerts the moment a brand launches a new product or collection.

Why use this scraper?

FeatureThis ActorGeneric Browser / HTML Scrapers
ArchitectureDirect structured API / JSON / feed requests (curl_cffi)Heavy headless browser automation
Speed & reliability2–25 seconds for 50–200 itemsMinutes of high compute burn
Pricing modelPay per result ($0.00 actor-start fee)Monthly rental or high CU overhead
Error handlingFailed inputs logged in ERRORS key-value record and never chargedBills compute time even on failures

Input parameters

  • Shopify store URLs or domains (stores, array): Shopify store URLs or bare domains (e.g. 'https://www.allbirds.com', 'ridge.com').
  • Extraction mode (mode, string): Emit normalized product catalog rows ('products'), enriched store lead profile rows ('store_profile'), or both ('both').
  • Keyword filter (optional) (search, string): Optional case-insensitive keyword filter across product title, product type, vendor, and tags.
  • Collection handle (optional) (collectionHandle, string): Optional Shopify collection slug (e.g. 'mens', 'best-sellers') to query /collections/{handle}/products.json.
  • In-stock products only (inStockOnly, boolean): Emit only products where at least one variant has available=true.
  • Discounted / on-sale products only (onSaleOnly, boolean): Emit only products where compareAtPriceMax > priceMin.
  • Only new products (onlyNew, boolean): Remember seen product IDs across runs in Key-Value Store and emit only newly added products.
  • Max products per store (maxProductsPerStore, integer): Maximum number of products to extract per Shopify store.
  • Delay between requests (delaySeconds, number): Polite pause between requests (default 0.4).

Example input

{
"stores": [
"https://www.allbirds.com",
"https://www.brooklinen.com",
"https://ridge.com"
],
"mode": "both",
"maxProductsPerStore": 30
}

Output & example output

One dataset row per result. Default table view columns: recordType, storeDomain, title, vendor, productType, priceMin, compareAtPriceMax, discountPct, inStock, variantsCount, publishedAt, url. Full structured JSON is stored in the run's default dataset.

Example output item

{
"recordType": "product",
"storeDomain": "www.allbirds.com",
"storeName": "Allbirds",
"currency": "USD",
"productId": "7340901859408",
"title": "Women's Allbirds Flip Flop - Dusty Pink",
"handle": "womens-allbirds-flip-flop-dusty-pink",
"url": "https://www.allbirds.com/products/womens-allbirds-flip-flop-dusty-pink",
"vendor": "Allbirds",
"productType": "Shoes",
"priceMin": 25.0,
"priceMax": 25.0,
"compareAtPriceMax": 50.0,
"discountPct": 50.0,
"inStock": true,
"variantsCount": 7,
"variants": [
{
"id": 42146889039952,
"title": "5",
"sku": "A12513W050",
"price": 25.0,
"compareAtPrice": 50.0,
"available": false,
"option1": "5",
"option2": null
},
{
"id": 42146889072720,
"title": "6",
"sku": "A12513W060",
"price": 25.0,
"compareAtPrice": 50.0,
"available": false,
"option1": "6",
"option2": null
},
{
"id": 42146889105488,
"title": "7",
"sku": "A12513W070",
"price": 25.0,
"compareAtPrice": 50.0,
"available": false,
"option1": "7",
"option2": null
}
],
"tags": [
"allbirds::carbon-score => undefined",
"allbirds::cfId => color-a4d5d0f6620dc304306f503bf67bc5f9",
"allbirds::complete => true"
],
"imageUrl": "https://cdn.shopify.com/s/files/1/1104/4168/files/A12513_26Q2_Allbirds-Flip-Flop-Dusty-Pink_PDP_LEFT.png?v=1774646345",
"imagesCount": 5,
"publishedAt": "2026-09-25T16:58:13-07:00",
"updatedAt": "2026-10-25T04:44:28-07:00",
"storeThemeName": "[DNAM Theme July 2026]",
"installedApps": [
"Attentive",
"Elevar",
"Google Tag Manager"
],
"socialLinks": {
"instagram": "https://www.instagram.com/allbirds",
"tiktok": "https://www.tiktok.com/@weareallbirds",
"facebook": "https://www.facebook.com/weareallbirds",
"twitter": "https://twitter.com/allbirds",
"youtube": "https://www.youtube.com/channel/UCnGErLCau5qNJ0Xwe6uEyTw",
"pinterest": "http://pinterest.com/weareallbirds"
},
"scrapedAt": "2026-10-25T11:44:27+00:00"
}

Pricing (Pay-Per-Result)

This Actor uses transparent Pay-Per-Event pricing with a $0.00 actor-start fee:

EventWhat is chargedPrice
product-resultShopify product scraped (One normalized Shopify product record with variants, prices & availability)$0.0015 / result ($1.50 / 1,000 results)
store-resultShopify store profile scraped (One enriched B2B Shopify store lead profile with installed apps, theme & socials)$0.005 / result ($5.00 / 1,000 results)
apify-actor-startActor start fee$0.00

Concrete pricing math

  • product-result (Shopify product scraped): 1,000 results = $1.50 (50 results = $0.07, 10,000 results = $15.00). Apify's $5.00/month Free Tier covers up to 3,333 results/month at $0.00 out-of-pocket.
  • store-result (Shopify store profile scraped): 1,000 results = $5.00 (50 results = $0.25, 10,000 results = $50.00). Apify's $5.00/month Free Tier covers up to 1,000 results/month at $0.00 out-of-pocket.
  • Empty runs (0 results) & skipped duplicates (onlyNew / onlyChanged): $0.00.

Data and compliance

Public Shopify storefront catalog feeds (/products.json, /collections.json) and homepage headers only. Respects Shopify robots.txt; zero customer PII. Requests are rate-limited and routed through Apify Proxy. Per-input errors are recorded in the run's ERRORS key-value record and are never charged.

FAQ

Do I need an account, login, or API key?
No. This Actor queries public endpoints directly and requires zero credentials.

What happens if I start a run with empty {} input via API or CLI?
Every required input defines both prefill and default values in .actor/input_schema.json, so an empty {} run automatically returns 50+ live records out of the box.