Shopify Store Catalog Scraper avatar

Shopify Store Catalog Scraper

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Shopify Store Catalog Scraper

Shopify Store Catalog Scraper

Scrape the full public product catalog of any Shopify store. Returns product id, handle, title, URL, vendor, type, tags, images, price, sale and stock status, plus the complete variant list with SKUs. Handles headless Hydrogen storefronts automatically.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

Crikit

Crikit

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

Categories

Share

Scrape the complete public product catalog of any Shopify store. Give the actor one or more store domains and it returns every product with pricing, images, stock status, and the full variant list including SKUs.

This Shopify scraper reads the store's own public catalog data directly. There is no headless browser, no login, and no cookies, so it is fast and cheap: a 25,000 product catalog takes about two and a half minutes.

What makes this Shopify scraper different

Most Shopify product scrapers stop at product level and tell you a product has 13 variants. This one gives you the 13 variants: variant id, title, SKU, price, compare-at price, per-variant stock status, and the option values behind them.

That matters if you are doing price monitoring, inventory tracking, or catalog sync, because the thing that changes is almost never the product, it is the size that went out of stock or the colour that went on sale.

  • Full variant data with SKUs. Every variant, every SKU. The leading competing actors return a variant count and no SKUs at all.
  • Real store currency. Read from the store rather than assumed to be USD. A Canadian store reports CAD.
  • Headless storefronts supported. Stores built on Shopify Hydrogen and Oxygen do not serve their catalog on the public domain. This actor finds the underlying store origin and scrapes it anyway.
  • You are never billed twice for the same product. Pagination stops on repeated product ids, not on a page count, so a misbehaving store cannot generate duplicate billable rows.
  • Honest failures. A store that has switched its catalog off is reported with the reason, per store, instead of silently returning nothing.

Input

FieldTypeDescription
storeUrlsarrayRequired. Store domains. Accepts gymshark.com, https://gymshark.com, or mystore.myshopify.com.
collectionstringOptional. Scrape one collection only. Use the handle from the URL, for example mens-tops.
maxProductsPerStoreintegerCap per store. 0 means the entire catalog.
includeVariantsbooleanInclude the full variant list. Default true.
includeDescriptionbooleanInclude the product description as plain text. Default true.
proxyConfigurationobjectProxy settings. The default Apify datacenter proxy is sufficient.
{
"storeUrls": ["https://gymshark.com", "allbirds.com"],
"maxProductsPerStore": 500,
"includeVariants": true
}

Output

One row per product. Variants are nested inside the row rather than flattened, so a 13 variant product is one row and one charge, not 13.

{
"store": "allbirds.com",
"storeName": "Allbirds",
"productId": 7292464955472,
"handle": "mens-cruiser-shadow-blue-natural-white-sole",
"title": "Men's Cruiser - Shadow Blue (Natural White Sole)",
"url": "https://allbirds.com/products/mens-cruiser-shadow-blue-natural-white-sole",
"vendor": "Allbirds",
"productType": "Shoes",
"currency": "USD",
"priceMin": 105,
"priceMax": 105,
"compareAtPrice": null,
"onSale": false,
"discountPercent": null,
"available": true,
"variantCount": 13,
"availableVariantCount": 11,
"skus": ["A12856M080", "A12856M085"],
"variants": [
{
"variantId": 41990816759888,
"title": "8",
"sku": "A12856M080",
"price": 105,
"compareAtPrice": null,
"available": true,
"option1": "8",
"grams": 1000
}
],
"featuredImage": "https://cdn.shopify.com/s/files/1/1104/4168/files/All-birds_0010.png",
"imageCount": 5,
"updatedAt": "2026-08-07T09:14:02-07:00"
}

Full field list, types, and the Console table view are declared in the dataset schema.

Common uses

  • Competitor price monitoring. Run on a schedule and diff priceMin, compareAtPrice, and discountPercent between runs.
  • Inventory and stockout tracking. availableVariantCount against variantCount shows which sizes or colours are selling out.
  • Catalog sync and migration. productId and handle are stable keys for joining against your own data.
  • Dropshipping and product research. Sort a whole catalog by price, vendor, or product type.
  • Brand and MAP monitoring. Track SKU level pricing across many stores in one run.

Limits worth knowing

  • Shopify serves at most 100 pages of 250 products, so a single catalog listing tops out at 25,000 products. For larger stores, run again with a collection handle to scrape collections one at a time.
  • A small number of merchants switch the public catalog endpoint off. Those stores are reported with the reason rather than returned as empty.
  • Only publicly published products are returned. Draft and unpublished products are not exposed by the store and cannot be scraped.

Pricing

Pay per result: $0.001 per product, which is $1.00 per 1,000 products. You are charged once per unique product row, with its variants included at no extra cost. Stores that return nothing are not charged.

Data and compliance

This Shopify scraper reads only data the store publishes publicly to any visitor. It collects no personal data, no customer records, and no order information. You are responsible for how you use the data, including complying with the target store's terms and applicable law.