Shopify Store Scraper — Products, Prices, Store Info avatar

Shopify Store Scraper — Products, Prices, Store Info

Pricing

from $0.30 / 1,000 product results

Go to Apify Store
Shopify Store Scraper — Products, Prices, Store Info

Shopify Store Scraper — Products, Prices, Store Info

Scrape any Shopify store's products from its public products.json: title, vendor, type, tags, price range, compare-at price, stock, variants and images. Or get one store row: shop info, product count, price stats, top vendors, theme and apps. $0.30 per 1,000 products.

Pricing

from $0.30 / 1,000 product results

Rating

0.0

(0)

Developer

ActorForge

ActorForge

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

14 hours ago

Last modified

Share

Scrape any Shopify store's products from its public products.json: title, vendor, type, tags, price range, compare-at price, stock, variants and images. Or get one store row: shop info, product count, price stats, top vendors, theme and apps. $0.30 per 1,000 products.

A Shopify scraper for products, prices and store data. Give it one or more Shopify store URLs and it reads each store's public products.json feed, the same JSON catalogue Shopify serves to every visitor. You get one clean row per product: title, handle, vendor, product type, tags, created/published/updated dates, price range, compare-at price and discount %, stock availability, every variant (SKU, price, compare-at, options, weight) and every image URL. It works as a Shopify products scraper for catalogue exports, product research and dropshipping, and for competitor price monitoring: schedule a daily run with updatedSince and you only get (and pay for) the products that changed. Use collections to scrape just one collection. Switch mode to store for one Shopify store data row per shop: name, country, currency, ships-to countries, published product and collection counts (from meta.json), price stats (min/median/average/max, % on sale), top vendors, product types and tags, the biggest collections, the theme (name, base theme, version) and the apps detected on the homepage (Klaviyo, Rebuy, Yotpo, Afterpay and 7,600+ other fingerprints). It uses plain HTTP at 256 MB, an honest user agent, the store's own robots.txt and a polite 1.3 requests/second per store. $0.30 per 1,000 products, $0.005 per analysed store. Blocked, headless and non-Shopify sites are free.

📘 Step-by-step guide: How to Export Shopify Store Product Data to CSV or JSON

What data does it return?

Every run outputs clean, schema-validated rows like these:

storetitlevendorproductTypepricecompareAtPriceMindiscountPctavailablevariantCount
www.allbirds.comWomen's Allbirds Flip Flop - Dusty PinkAllbirdsShoes255050true7
www.allbirds.comMen's Canvas Runner NZ - Deep Navy Stripes (Blizzard Sole)AllbirdsShoes100true13
www.tentree.comSasquatch Peak HattentreeAccessories31.54530true1
www.deathwishcoffee.comWhite Chocolate Pistachio Ground BundleDeath Wish CoffeeBundle48.9953.999.3true1

How much does it cost?

Transparent pay-per-event pricing — you only pay for what you get, and the actor always respects your run budget: set a maximum total charge and it stops cleanly at the cap instead of overrunning.

EventPriceChargedWorked example
product-result$0.0003per product row delivered (with variants and images)A 1,000-product store = $0.30; with updatedSince, unchanged products are skipped and cost nothing
store-analyzed$0.005per store row in store/both mode (meta, price stats, top vendors/types, collections, theme, apps)100 competitor stores = $0.50; blocked, headless, robots-disallowed and non-Shopify sites are free rows
apify-actor-start$0.00005per run per GB of memory (platform start fee)One run at 256 MB = $0.0000125

Input options

FieldTypeRequiredDefaultDescription
storeUrlsarrayno—Store domains or URLs, e.g. allbirds.com or https://www.allbirds.com/collections/mens. Any page of the store works because the store is taken from the host. myshopify.com domains work too. Duplicates are removed.
storeUrlstringno—One store domain or URL. Handy for Clay, Make/Zapier and AI agents. Scraped together with storeUrls.
modestringno"products"products: one row per product ($0.30 per 1,000). store: one row per shop with meta.json details, product count, price stats, top vendors/types/tags, top collections, theme and detected apps ($0.005 per store). both: product rows plus the store row.
collectionsarrayno[]Optional collection handles (the part after /collections/ in the URL, e.g. mens-shoes). When set, products come from each collection instead of the whole catalogue, and each row says which collection it came from. Applied to every store in the run.
maxProductsPerStoreintegerno1000Stop each store after this many product rows (products/both mode), or after scanning this many products for the stats (store mode). products.json returns 250 products per page.
updatedSincestringno""Optional date (YYYY-MM-DD) or ISO timestamp. Only products whose updated_at is on or after it become rows. Products skipped by this filter are never charged. Use it for daily price and stock monitoring.
includeVariantsbooleannotrueAdd every variant (SKU, price, compare-at price, availability, options, weight) to each product row. Same price.
includeBodyHtmlbooleannofalseAdd the product description (body_html) to each row. Off by default because it makes rows much bigger. Same price.

Limits & honest notes

  • Only stores that serve Shopify's public /products.json work. Headless storefronts (Hydrogen/Oxygen or a custom frontend, e.g. fashionnova.com, hydrogen.shop) do not serve it and come back as free not-reachable rows.
  • Each store's own robots.txt is read first and obeyed, including any Crawl-delay. The actor never requests /search, /cart, /checkout, /policies/, /recommendations/products or sort_by collection URLs. A store that disallows products.json gives a free robots-disallowed row.
  • Polite by design: one request at a time per store at about 1.3 requests/second, at most 3 stores in parallel, honest user agent (ActorForge-ShopifyScraper/1.0). A 401/403/429 or bot challenge stops that store at once: no retries, proxies or bypass. Some big brands (e.g. gymshark.com with a 403, bombas.com with a Vercel challenge) block this, so their rows are free.
  • products.json returns 250 products per page and lists published products only. maxProductsPerStore caps each store (default 1,000, up to 100,000). In both mode the store stats cover the products scanned, and catalogComplete says whether that was the whole catalogue.
  • Prices are the store's base-currency prices from products.json (meta.json gives the currency). Market-specific or B2B prices, inventory quantities and sales figures are not public there.
  • Apps and theme come from the homepage HTML (Shopify.theme and the open webappanalyzer fingerprints). Apps that load only after JavaScript runs or only on product pages may be missed.
  • Catalogue data only: no customer, reviewer or contact-person data is read or returned.
  • The run's spend limit is respected: products are charged one page at a time before delivery, and the run stops cleanly when the limit is reached.

Changelog

  • 2026-10-20 — Initial release: products.json pagination (250/page), collection filter, updatedSince, variants and images, optional body_html; store mode with meta.json, price stats, top vendors/types/tags, top collections, theme and app detection; robots.txt, Crawl-delay and stop-on-block compliance.

Built and maintained by ActorForge. Reliability first: every actor in the portfolio is monitored by an automated nightly self-test, and breakages are typically fixed the same day.