Shopify Store Scraper — Products, Prices & Variants avatar

Shopify Store Scraper — Products, Prices & Variants

Pricing

from $4.00 / 1,000 products

Go to Apify Store
Shopify Store Scraper — Products, Prices & Variants

Shopify Store Scraper — Products, Prices & Variants

Scrape all products from any Shopify store: title, vendor, product type, description, price range, compare-at price, discount percent, stock status, every variant with SKU and price, options, tags and images. Filter by collection, keyword, price or discount. No API key.

Pricing

from $4.00 / 1,000 products

Rating

0.0

(0)

Developer

Hichem Ben Moussa

Hichem Ben Moussa

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Scrape every product from any Shopify store — title, vendor, type, description, full price range, compare-at price, discount percent, stock status and every variant with its SKU — from the JSON feed Shopify itself publishes on the storefront.

Millions of stores run on Shopify, which makes this the single highest-leverage competitor-monitoring actor: one input, a complete catalogue out.

No API key required.

What you get

FieldDescription
store, storeUrl, currencyShop name, domain and selling currency
productId, title, handleIdentifiers
vendor, productTypeBrand and category
descriptionProduct description as plain text
priceMin, priceMaxCheapest and dearest variant
compareAtPriceThe struck-through "was" price
onSaleTrue when compare-at is genuinely above the current price
discountPercentCalculated discount, e.g. 50
inStockAny variant purchasable
variantCount, availableVariantCountTotal and in-stock variants
skusEvery SKU on the product
optionsOption names and values, e.g. Size → 5,6,7
variantsPer-variant array: id, title, SKU, price, compare-at, availability, weight, options
tagsStore tags — often exposes internal merchandising data
images, imageAll image URLs and the primary one
publishedAt, createdAt, updatedAtTimestamps, useful for spotting new launches
urlProduct page

Example input

{
"storeUrls": ["https://www.allbirds.com"],
"onlyDiscounted": true,
"maxProducts": 200
}

Scrape one collection, or several competitors at once:

{
"storeUrls": ["https://store-a.com", "https://store-b.com"],
"collection": "mens",
"minPrice": 50,
"maxProductsPerStore": 500
}

Example output

{
"store": "Allbirds",
"currency": "USD",
"title": "Women's Allbirds Flip Flop - Dusty Pink",
"vendor": "Allbirds",
"productType": "Shoes",
"priceMin": 25,
"priceMax": 25,
"compareAtPrice": 50,
"onSale": true,
"discountPercent": 50,
"inStock": true,
"variantCount": 7,
"availableVariantCount": 5,
"skus": ["A12513W050", "A12513W060", "A12513W070"],
"url": "https://www.allbirds.com/products/womens-allbirds-flip-flop-dusty-pink"
}

Who uses this

  • Price monitoring — run daily and diff priceMin to catch every competitor price change and promotion the day it happens
  • Dropshipping and product research — find what a winning store sells, at what margin, and which variants keep selling out
  • Brand and MAP enforcement — spot retailers selling your product below your minimum advertised price
  • Market and assortment analysis — full catalogues by productType and vendor, sized and priced
  • Affiliate and comparison sites — populate a catalogue with images, options and live stock
  • Stock-out intelligence — availableVariantCount against variantCount shows exactly which sizes a competitor has sold out of

What to expect

  • /products.json is a documented public Shopify endpoint, not a loophole — it is what many storefront themes and apps read. That makes it far more durable than HTML scraping, which breaks whenever a theme changes.
  • A minority of stores are not reachable. Some put Cloudflare or a bot filter in front of the endpoint, and some disable it. When that happens the actor reports the store and status clearly and moves to the next one rather than failing the run. Verified working on a large sample; expect the occasional 403.
  • compareAtPrice is only set when the merchant set it. In a normal catalogue most products are not discounted, so expect this field — and discountPercent — to be null for the majority of rows. That is a correct reading of the store, not missing data: onSale is always present and is the field to filter on.
  • Prices are in the store's own currency (currency), taken from the shop metadata. A store with multiple markets serves its primary currency here.
  • Hidden and draft products are not included — the feed carries published products only.

Pricing

Pay per result. Each product returned counts as one result, and filters are applied before charging.

Notes

  • Give the storefront domain, not the *.myshopify.com admin domain, when the store has a custom domain.
  • The collection handle is the slug in the URL: for /collections/mens the handle is mens.
  • Large catalogues are paged automatically at 250 products per request; use maxProductsPerStore to keep multi-store runs balanced.
  • This is an unofficial actor and is not affiliated with Shopify.