Shopify & WooCommerce Store Scraper ⚡ Products, Prices, Stock avatar

Shopify & WooCommerce Store Scraper ⚡ Products, Prices, Stock

Pricing

from $1.00 / 1,000 product rows

Go to Apify Store
Shopify & WooCommerce Store Scraper ⚡ Products, Prices, Stock

Shopify & WooCommerce Store Scraper ⚡ Products, Prices, Stock

Extract all products from any Shopify or WooCommerce store: prices, discounts, availability, variants, images, dates. Plus one summary row per store (currency, country, total products, price stats, share on sale / sold out, top brands, theme). No login, no proxies. Pay per product.

Pricing

from $1.00 / 1,000 product rows

Rating

0.0

(0)

Developer

Pulse Lab

Pulse Lab

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Categories

Share

Shopify & WooCommerce Store Scraper – Products, Prices, Stock, Store Info

Give it a list of store URLs and get back every product with prices, discounts, availability, variants and images – plus a one-row summary per store (currency, country, total products, price range, share on sale, share sold out, top brands, theme).

Works with Shopify stores (via the public products.json / meta.json endpoints) and WooCommerce stores (via the public Store API). No login, no API key, no proxies, no HTML scraping of product pages – so it is fast and reliable, and the data is exactly what the store publishes.

What it does

  1. Detects the platform for each URL: tries Shopify's products.json, then the WooCommerce Store API, then checks the homepage for platform signals.
  2. Checks robots.txt of the store and skips stores that disallow the endpoint it would use (reported as BLOCKED_BY_ROBOTS, not charged).
  3. Fetches the catalog page by page (250 products per request on Shopify, 100 on WooCommerce) and normalizes every product into one common row.
  4. Writes a store summary row: platform, store name, currency, country/city (Shopify), total products and collections, price min / max / average / median, number and share of products on sale, average discount, share sold out, top brands / product types / categories / tags, newest product date, products added in the last 30 days, theme name, shipping countries, Shop Pay installments.

Optional: inventory quantity per variant (Shopify, via each product's .js endpoint), descriptions, and filters for keywords, on sale, available and updated after a date (new products / price changes since your last run).

Use cases

  • Competitor price monitoring – run daily with updatedAfter to catch price drops, new products and sell-outs.
  • Dropshipping & product research – find what a store sells, which products are discounted, which are sold out, how many variants.
  • Lead generation / market research – store summaries tell you size (product count), price positioning, platform and theme.
  • Catalog export – pull a clean product list from any store for feeds, spreadsheets or comparison tools.

Input

FieldDescription
storeUrls (required)Store homepages or domains. Platform is auto-detected.
maxProductsPerStoreMax product rows saved per store (default 500, max 20,000).
keywordsKeep only titles containing one of these words.
onlyOnSaleKeep only discounted products.
onlyAvailableKeep only products with at least one purchasable variant.
updatedAfterKeep only products created/updated on or after this date (Shopify only – the WooCommerce Store API has no dates).
includeDescriptionAlso store the description (text + HTML).
includeInventoryShopify only: fetch exact inventory quantity per variant (one extra request per product).
includeStoreSummaryAdd the store summary row (default on).

Example:

{
"storeUrls": ["allbirds.com", "https://colourpop.com", "kyliecosmetics.com"],
"onlyOnSale": true,
"maxProductsPerStore": 1000
}

Output

Two dataset views:

Products – one row per product (type: "product"): platform, store, storeName, productId, title, handle, url, brand, productType, tags, categories, currency, price, priceMax, compareAtPrice, onSale, discountPercent, available, variantCount, availableVariantCount, totalInventory, variants[], images[], imageCount, mainImage, rating, reviewCount, createdAt, publishedAt, updatedAt, descriptionText, descriptionHtml, sku, stockStatus, onBackorder, checkedAt

Each entry in variants[] has id, title, sku, price, compareAtPrice, available, options[], inventoryQuantity, inventoryPolicy, grams.

Store summaries – one row per store (type: "store"): store, status, platform, storeName, url, currency, country, city, province, myshopifyDomain, theme, productCount, collectionCount, productsFetched, productsMatched, priceMin, priceMax, priceAvg, priceMedian, onSaleCount, onSaleShare, avgDiscountPercent, availableCount, soldOutShare, topBrands[], topProductTypes[], topCategories[], topTags[], newestProductAt, latestUpdateAt, productsAddedLast30Days, shipsTo[], shopPayInstallments, checkedAt

status values: OK, PRODUCT_API_DISABLED (platform detected but the public product endpoint is turned off – common for big "headless" brands), BLOCKED_BY_ROBOTS, PLATFORM_NOT_FOUND, ERROR, INVALID_INPUT.

Example product row (Shopify):

{
"type": "product",
"platform": "shopify",
"store": "gymshark.com",
"storeName": "Gymshark US",
"title": "Gymshark Leather Lifting Straps - Spiced Brown",
"url": "https://gymshark.com/products/gymshark-leather-lifting-straps-equipment-brown-aw25",
"productType": "Unisex>Accessories>Equipment>lifting_straps",
"currency": "USD",
"price": 19.6,
"compareAtPrice": 28,
"onSale": true,
"discountPercent": 30,
"available": true,
"variantCount": 1,
"availableVariantCount": 1,
"variants": [{ "id": "39795354009802", "title": "Default Title", "sku": "I1B6R-NC52-OS", "price": 19.6, "compareAtPrice": 28, "available": true }],
"imageCount": 3,
"createdAt": "2025-01-20T16:04:31.000Z",
"updatedAt": "2026-10-20T03:09:06.000Z"
}

Example store summary row:

{
"type": "store",
"store": "colourpop.com",
"status": "OK",
"platform": "shopify",
"storeName": "ColourPop",
"currency": "USD",
"country": "US",
"productCount": 1063,
"collectionCount": 190,
"priceAvg": 26.83,
"priceMedian": 16,
"onSaleShare": 0,
"soldOutShare": 3.33,
"theme": "Colourpop/Main",
"shipsTo": ["AD", "AE", "AF", "…", "ZW"]
}

Pricing

Pay per event – you only pay for what is found:

  • product – one product row saved
  • store – one store summary row

Stores that are not Shopify/WooCommerce, have their product endpoint disabled, or disallow it in robots.txt are reported for free. Platform usage is included in the event price.

Limitations (please read)

  • Only stores whose public product endpoint is enabled return products. Large brands running custom "headless" storefronts (e.g. Fashion Nova, Tesla Shop) disable it – they come back as PRODUCT_API_DISABLED. The actor also tries the www. / non-www. variant of the domain, which is enough for some brands (e.g. gymshark.com works while www.gymshark.com is headless).
  • Shopify prices are in the store's own currency (from meta.json); the WooCommerce Store API returns prices with their currency code. No currency conversion is done.
  • totalInventory and variant inventoryQuantity are filled only with includeInventory (Shopify). Many stores hide exact quantities; available is always reliable.
  • The WooCommerce Store API has no created/updated dates, so updatedAfter cannot filter WooCommerce products; rating/reviewCount exist only for WooCommerce.
  • This actor respects robots.txt. If a store disallows the endpoint, nothing is fetched.