Shopify Store Scraper - Products, Prices & Stock avatar

Shopify Store Scraper - Products, Prices & Stock

Pricing

from $0.50 / 1,000 product scrapeds

Go to Apify Store
Shopify Store Scraper - Products, Prices & Stock

Shopify Store Scraper - Products, Prices & Stock

Exports the catalog of any Shopify store as clean rows: title, vendor, type, tags, price, compare-at price, discount, availability, variants, images and links. Filter by collection or keyword; schedule it to catch new products, price changes and stock changes. No browser. $0.0005 per product.

Pricing

from $0.50 / 1,000 product scrapeds

Rating

0.0

(0)

Developer

Antonio del Olmo Tena

Antonio del Olmo Tena

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

Export the full product catalog of any Shopify store as clean, structured rows, and keep it monitored. Paste the store URL (or a collection URL) and the Actor reads the public catalog feed that every Shopify storefront exposes: one row per product with title, vendor, type, tags, price, crossed-out price, discount, availability, variants, options, images and links. Filter by keyword, schedule it, and each run flags new products, price changes and stock changes compared with the previous run.

No browser, no proxies, no HTML parsing: the data comes from the same JSON feed the store theme uses, so it is complete, fast and cheap. You pay $0.0005 per product returned.

What you get

One Dataset row per product:

  • title, url, handle, id, vendor, productType, tags, createdAt, updatedAt, publishedAt.
  • price (cheapest variant), maxPrice, compareAtPrice (original price when discounted), discountPercent, currency.
  • available (at least one variant in stock), variantsCount, variants (id, title, sku, price, compareAtPrice, available, grams), options (for example Size and Color with their values).
  • imageUrl (first image) and images (all).
  • store, storeName, collection: where the product comes from.
  • isNew, previousPrice, availabilityChange: what changed since the previous run of that store (out_of_stock or back_in_stock).
  • description: plain text of the product page, only when Include product description is on.

A store that cannot be read (not Shopify, password-protected, catalog feed disabled) produces a single row with an error field and is not charged.

How to use it

  1. Open the Input tab.
  2. In Stores paste one URL per line. A store URL such as https://www.allbirds.com reads the whole catalog; a collection URL such as https://www.allbirds.com/collections/mens reads only that collection.
  3. Optionally set Keyword (for example hoodie) to keep only matching products, and Max products per store to cap the size and the cost.
  4. Click Start. Read the rows in Output or export them as JSON, CSV or Excel.
  5. To monitor prices and stock, schedule the Actor (hourly or daily). Every run compares each store with the previous one: new products come with isNew: true, repriced ones with previousPrice, and stock changes with availabilityChange. Connect a webhook or an email integration to be notified.

Input

{
"stores": ["https://www.allbirds.com/collections/mens", "https://colourpop.com"],
"query": "",
"includeDescription": false,
"maxProducts": 1000
}
FieldDescription
storesStore URLs or collection URLs. Up to 50 per run.
queryOptional. Keeps products whose title, vendor, type or tags contain the text.
includeDescriptionAdds the product description as plain text (up to 2,000 characters).
maxProductsProducts are read in pages of 250 up to this limit (1 to 10,000), then filtered by keyword. Default 1,000.

Output example

{
"store": "https://www.allbirds.com",
"storeName": "Allbirds",
"currency": "USD",
"collection": "mens",
"id": "7340901859408",
"handle": "mens-tree-runners-blizzard",
"title": "Men's Tree Runners - Blizzard",
"url": "https://www.allbirds.com/products/mens-tree-runners-blizzard",
"vendor": "Allbirds",
"productType": "Shoes",
"tags": ["mens", "tree"],
"price": 98,
"maxPrice": 98,
"compareAtPrice": 120,
"discountPercent": 18.3,
"available": true,
"variantsCount": 7,
"variants": [{ "id": "42146889039952", "title": "8", "sku": "A10001M080", "price": 98, "compareAtPrice": 120, "available": true, "grams": 455 }],
"options": [{ "name": "Size", "values": ["8", "9", "10"] }],
"imageUrl": "https://cdn.shopify.com/s/files/1/1104/4168/files/tree-runner.png",
"images": ["https://cdn.shopify.com/s/files/1/1104/4168/files/tree-runner.png"],
"publishedAt": "2026-09-25T23:58:13.000Z",
"isNew": false,
"previousPrice": 110,
"availabilityChange": null,
"timestamp": "2026-10-04T10:00:00.000Z"
}

Pricing

Pay per event, no subscription:

  • Product scraped: $0.0005 per product row. A 1,000-product store costs $0.50.
  • Product changed: $0.002 per product flagged as new, repriced or with a stock change in a scheduled run. Runs with no changes only pay for the rows.

Stores that cannot be read are free. Compare with typical Shopify scrapers at $0.001 to $0.003 per product.

Use it as an API

Run it from your code with the Apify API or client libraries:

curl -X POST "https://api.apify.com/v2/acts/aolmo~shopify-catalog/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"stores": ["https://www.allbirds.com"], "maxProducts": 500}'

The response is the list of product rows. You can also call it from AI agents through the Apify MCP server.

FAQ

Does it work with every Shopify store? With every storefront that exposes the public catalog feed, which is the default. A few stores disable it or sit behind a bot wall (the Actor reports blocks automated access), and password-protected stores cannot be read.

Is stock quantity included? The feed exposes availability per variant (in stock or not), not the exact quantity.

What is the price when variants differ? price is the cheapest variant and maxPrice the most expensive; each variant keeps its own price in variants.

How are discounts detected? When the cheapest variant has a compare_at_price higher than its price, compareAtPrice and discountPercent are filled.

How do I get only one collection? Paste the collection URL exactly as in the browser, for example https://store.com/collections/sale.

Where is the data stored between runs? In a Key-Value Store of your account named micro-saas-state-shopify-catalog, one key per store. Delete it to start fresh.