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

Shopify Store Scraper - Products, Variants, Prices & Stock

Pricing

from $2.00 / 1,000 store scrapeds

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

Shopify Store Scraper - Products, Variants, Prices & Stock

Export any Shopify store's full catalogue in one run: products, variants, SKUs, prices, compare-at prices, stock flags, tags and images. One row per product or per variant. Uses the store's own public endpoint, no API key. Ideal for price and inventory feeds.

Pricing

from $2.00 / 1,000 store scrapeds

Rating

0.0

(0)

Developer

mohamed alaya

mohamed alaya

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

18 days ago

Last modified

Share

Shopify Store Scraper - Products, Variants, Prices, Discounts & Stock

Export the full catalogue of any Shopify store (Allbirds, Gymshark, Stanley, Kylie Cosmetics, SKIMS, Brooklinen and any other Shopify storefront) in one run: every product, every size/colour variant, SKU, price, compare-at price, discount percent, in-stock flag, vendor, tags and images. No API key, no login, no browser.

It reads the store's own public endpoints (/products.json and /meta.json) - the same ones the storefront itself uses - so it is fast: a 250-product store takes about a second.

Who uses this

  • Dropshippers and resellers: find what a competitor sells, at what price, and what is on sale.
  • Price-monitoring and repricing tools: one row per variant with SKU, price and stock, run on a schedule.
  • Market researchers: catalogue size, price bands, vendors and product types of any DTC brand.
  • Agencies and marketplaces: bulk-import a brand's catalogue (titles, images, descriptions, variants).

What you get

One row per product (default) or per variant (expandVariants).

GroupFields
Storestore · storeName · currency (from the store's /meta.json)
Productid · handle · title · url · vendor · productType · tags[] · description (plain text) · publishedAt · createdAt · updatedAt
Images / optionsimages[] · imageCount · featuredImage · optionNames[] · options[] (name + all values)
Variantsvariants[] with id · title · sku · price · compareAtPrice · discountPercent · available · option1-3 · grams · image · requiresShipping · taxable · timestamps
Price summaryminPrice · maxPrice · minCompareAtPrice · onSale · maxDiscountPercent
StockinStock · availableVariants · variantCount
Metasource (products.json or sitemap+jsonld) · scrapedAt · type (product, variant or error)

Sample row (product mode)

{
"type": "product",
"store": "https://www.allbirds.com",
"storeName": "Allbirds",
"currency": "USD",
"id": "7340901859408",
"handle": "womens-allbirds-flip-flop-dusty-pink",
"title": "Women's Allbirds Flip Flop - Dusty Pink",
"url": "https://www.allbirds.com/products/womens-allbirds-flip-flop-dusty-pink",
"vendor": "Allbirds",
"productType": "Shoes",
"optionNames": ["Size"],
"variantCount": 7,
"minPrice": 25, "maxPrice": 25, "minCompareAtPrice": 50,
"onSale": true, "maxDiscountPercent": 50,
"inStock": true, "availableVariants": 1,
"variants": [{ "id": "42146889039952", "title": "5", "sku": "A12513W050", "price": 25, "compareAtPrice": 50, "discountPercent": 50, "available": false }],
"source": "products.json"
}

Sample row (expandVariants)

{
"type": "variant",
"store": "https://www.stanley1913.com",
"currency": "USD",
"productTitle": "The Quencher ProTour Flip Straw Tumbler | 40 OZ",
"variantTitle": "Soft Orchid",
"sku": "100000144469",
"price": 33.75, "compareAtPrice": 45, "discountPercent": 25,
"available": true,
"option1": "Soft Orchid"
}

Input

FieldWhat it does
storesBare domains, store URLs, collection URLs (https://store.com/collections/mens-shoes) or single product URLs. Mix freely.
collectionLimit all stores to one collection handle (all, mens-shoes).
maxProductsPerStoreCap on products returned per store (after filters). Up to 10,000 products are scanned per store.
expandVariantsOne row per variant - best for price/inventory feeds.
inStockOnly / onSaleOnlySkip sold-out products / keep only discounted ones.
minPrice / maxPriceLowest-variant price range in the store currency (0 = no limit).
vendorFilter / productTypeFilterExact (case-insensitive) match.
keywordsKeep products mentioning any of these words in title, description, tags, vendor or type.
updatedSinceOnly products changed since a date, e.g. 2026-09-01. Good for daily change feeds.
includeDescriptionTurn off for a smaller dataset.
sitemapFallbackRead stores that disabled /products.json from their sitemap (see below).
concurrency, proxyConfigurationParallel stores; optional proxy.

Example - discounted in-stock tumblers from two stores, one row per variant:

{
"stores": ["https://www.stanley1913.com/collections/tumblers", "colourpop.com"],
"expandVariants": true,
"onSaleOnly": true,
"inStockOnly": true,
"maxProductsPerStore": 100
}

An empty input {} runs a small default sample (Allbirds, 250 products) so you can see the output format.

Pricing

Pay per event: a small fee per store that returned data (store-scraped) and per row delivered (product-scraped). Stores that fail or return nothing are never charged, and the run stops cleanly if you hit your maximum charge limit.

Reliability and limits (honest notes)

  • Per-store errors never fail the run. A store that is unreachable, is not Shopify, or blocks us becomes a type: "error" row (not charged) with the reason, and every other store carries on. The run summary (SUMMARY key-value record) lists each store's status, page count and any warning.
  • Blocked stores. When a store answers 403/429, requests are retried with back-off and then through Apify datacenter proxy automatically. Very protected stores may still need a residential proxy in the proxyConfiguration input.
  • Sitemap fallback. Headless Shopify storefronts (for example ruggable.com or gymshark.com) switch /products.json off. For those, the Actor lists products from the sitemap and reads each product page's schema.org data. You get title, price, currency, availability, images, brand, SKU and description, labelled source: "sitemap+jsonld". You do not get tags, compare-at prices, timestamps or the option list, and it is capped at 1,000 products per store and is slower.
  • Inventory. Shopify's public data exposes whether each variant is available (available), not the stock quantity. This Actor does not claim exact unit counts.
  • Prices are in the store's currency (currency field). Stores that sell in several currencies by market show the default-market price.
  • Only public storefront data is read; password-protected stores are reported as errors.

FAQ

How do I know a site runs on Shopify? Try it: a non-Shopify site returns an error row saying it does not look like Shopify. (The Tech Stack Detector Actor can also identify the platform in bulk.)

Can I get only a collection? Yes: pass the collection URL in stores, or set collection.

Can I track price changes over time? Schedule the Actor with expandVariants and compare datasets by variantId, or use updatedSince to pull only what changed.

Does it scrape reviews? No.