Shopify Products Catalog Scraper: prices, variants, stock, bulk avatar

Shopify Products Catalog Scraper: prices, variants, stock, bulk

Pricing

from $0.55 / 1,000 product listeds

Go to Apify Store
Shopify Products Catalog Scraper: prices, variants, stock, bulk

Shopify Products Catalog Scraper: prices, variants, stock, bulk

Product catalogue of any Shopify store from its public products feed, up to 200 stores a run and 5,000 products each: title, handle, URL, vendor, type, tags, dates, price range, sale and stock flags, every variant with SKU, price and options, images and description. Robots-aware. Pay per product.

Pricing

from $0.55 / 1,000 product listeds

Rating

0.0

(0)

Developer

Steadydata Team

Steadydata Team

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Product catalogue of any Shopify store from its public products feed, up to 200 stores a run and 5,000 products each: title, handle, URL, vendor, type, tags, dates, price range, sale and stock flags, every variant with SKU, price and options, images and description. Robots-aware. Pay per product.

Why this scraper

  • Only delivered results are charged. Inputs that fail come back as clear error records at no cost.
  • Straight from the store's own public products feed, 250 products per call, no browser, no start fee. Measured on the platform: 60 products with 502 variants from two stores in 10 seconds for a twentieth of a cent. Priced at a fraction of the alternatives in this niche.
  • One complete row per product: title, handle and product URL, vendor, type, tags, created, updated and published dates, currency from the shop profile, price range across variants, compare-at price with an on-sale flag, stock flag with the number of available variants, every variant as an object (id, title, SKU, price, compare-at price, availability, weight, option values), option names, image count, first image and all image URLs, and the description as plain text when asked.
  • Robots-aware and merchant-only: each store's robots.txt is read first and a store that closes its feed is skipped for free; the merchant's address and contact data in the shop profile are never delivered.

Who this is for

Paste store domains or any URL on the store in stores (up to 200 per run), set maxProductsPerStore (default 500, ceiling 5,000, newest first), switch includeDescription on when you want the text, and onlyAvailable on to skip sold-out products without paying for them. Built for competitor price and assortment monitoring, catalogue exports into feeds and marketplaces, and stock or discount tracking across many Shopify stores.

Who this is not for

Only stores that publish the standard products feed are covered; a store on another platform, or a Shopify store that has closed the feed, comes back as a free NOT_SHOPIFY row. Some stores rate-limit datacenter traffic (measured: bombas.com answers 429), which is a free BLOCKED row. Availability is what the feed says per variant, not a stock count; Shopify does not publish quantities there. Prices are in the store's own currency, without conversion. Collections, reviews and sales figures are not in the feed and not on the row.

Input example

{
"stores": [
"allbirds.com",
"gymshark.com"
],
"maxProductsPerStore": 500,
"includeDescription": false,
"onlyAvailable": false
}

Output example

  • store
  • productId
  • title
  • handle
  • url
  • vendor
  • productType
  • tags
  • createdAt
  • updatedAt
  • publishedAt
  • currency
  • priceMin
  • priceMax
  • compareAtPriceMax
  • onSale
  • available
  • variantCount
  • availableVariantCount
  • variants
  • optionNames
  • imageCount
  • imageUrl
  • images
  • description

Error codes: INVALID_STORE, NOT_SHOPIFY, NO_PRODUCTS, ROBOTS_DISALLOWED, FETCH_FAILED, BLOCKED.

One delivered row looks like this:

{
"store": "allbirds.com",
"productId": "7369944137808",
"title": "Free Returns Coverage",
"handle": "free-returns-coverage",
"url": "https://allbirds.com/products/free-returns-coverage",
"vendor": "re:do",
"productType": "return,package_protection",
"tags": [
"ATTV_GLOBAL_EXCLUSION_TAG",
"exclude_rebuy",
"klaviyo_reviews_exclude",
"NOREVIEWS",
"redo-package-protection"
],
"createdAt": "2026-06-05T14:14:57Z",
"updatedAt": "2026-09-17T01:45:17Z",
"publishedAt": "2026-09-02T18:33:11Z",
"currency": "USD",
"priceMin": 0.8,
"priceMax": 2.98,
"compareAtPriceMax": 2.98,
"onSale": false,
"available": true,
"variantCount": 2,
"availableVariantCount": 2,
"variants": [
{
"id": "42436493115472",
"title": "$0.80",
"sku": "x-redo",
"price": 0.8,
"compareAtPrice": 0.8,
"available": true,
"grams": 0,
"options": [
"$0.80"
],
"requiresShipping": false,
"taxable": true
},
{
"id": "42436493148240",
"title": "$2.98",
"sku": "x-redo",
"price": 2.98,
"compareAtPrice": 2.98,
"available": true,
"grams": 0,
"options": [
"$2.98"
],
"requiresShipping": false,
"taxable": true
}
],
"optionNames": [
"Price"
],
"imageCount": 1,
"imageUrl": "https://cdn.shopify.com/s/files/1/1104/4168/files/Screenshot_2026-06-11_at_10.12.01_AM.png?v=1781197934",
"images": [
"https://cdn.shopify.com/s/files/1/1104/4168/files/Screenshot_2026-06-11_at_10.12.01_AM.png?v=1781197934"
],
"description": null,
"status": "ok"
}

Pricing

Pay per event: one product-listed event per delivered result. No charge for inputs that fail, no separate platform-usage surcharge.

Free Apify plan: this actor delivers up to 25 rows per run for accounts on the Apify free plan, and then stops with a message. That limit is set by us, not by Apify. It exists so the actor keeps paying for itself for the people who do pay. Any paid Apify plan runs it at full size, billed per delivered row, with failed rows never charged.

Reviews: if this actor saves you time, a short review on this page is the one thing that helps most. Ratings are what other buyers look at first, and we have no other way to ask.

FAQ

Is personal data collected? No. Products, prices, stock flags and images of a store are delivered; the merchant's city, province and contact data that the shop profile carries are left out on purpose.

How do I get only discounted products? Filter on onSale true; compareAtPriceMax against priceMax gives the discount. Combine with onlyAvailable to see what is both discounted and in stock.

Does it get the whole catalogue? Up to maxProductsPerStore (ceiling 5,000), newest first, in pages of 250. For a larger store run again with a higher ceiling or split by store.

How does this differ from the Shopify store report actor? The report gives one row per store (size, price range, stock share, signals); this actor gives every product with its variants. Use the report to pick stores, this one to read them.

What does a run cost when a store fails? Nothing. NOT_SHOPIFY, NO_PRODUCTS, ROBOTS_DISALLOWED, INVALID_STORE, FETCH_FAILED and BLOCKED rows are free; only delivered products are charged.

What happens when the source changes? Sources change from time to time; that is the nature of this work. The actor is monitored daily and fixed fast, and while it is broken you are not charged, because only delivered results cost anything.