Run it on Apify
$0.50 per 1,000 products, no subscription. You run it with your own Apify account, and Apify handles billing.
Who it’s for
- E-commerce brands and agencies watching competitor catalogs and prices
- Developers of price trackers, product feeds and comparison sites
- Analysts building e-commerce market datasets
- AI developers who need product data as a tool or in a pipeline
What you can do with it
- Export a Shopify store’s whole catalog to a spreadsheet or database
- Track prices, discounts and sold-out variants on many stores every day
- Pull only the products that changed since the last run
How it works
Stores on Shopify’s standard storefront publish their catalog as JSON at/products.json and /collections/<handle>/products.json, with no login or API key. The Actor reads those pages over plain HTTP, 250 products per request and one request per second, until the catalog ends or your limit is reached. It honours each store’s robots.txt and crawl-delay, waits and retries a bounded number of times when a store asks it to slow down, and turns the JSON into typed records: prices as numbers, dates in ISO 8601, descriptions as clean text. The currency comes from the store’s own answer for those prices. A store that refuses, or that isn’t on Shopify, gets an error item that says why, and isn’t charged.
Example output
A real record from a test run on tentree.com on 2026-11-05. Fields the page didn’t publish are left out here; the Actor returns them asnull.
Fields
A field is filled when the source publishes it. The Actor never guesses a value: a missing field comes back as
null. “Filled in latest test” is the share of records from the latest test run (tentree.com) that had the field; other sources publish more or less.
Pricing
You pay $0.50 per 1,000 products, plus a start fee of $0.00005 per run. Products removed by your filters are not charged, and neither are inputs that fail. Each stored record is one result, so with Variant records each variant counts.
Set
maxItems or the run’s Maximum cost per run in Apify to cap spending.
API
Every Apify Actor is also a REST endpoint, so Shopify Products API & Scraper works as a Shopify products API, a Shopify product data API, a Shopify catalog API or a Shopify scraper API. Call it from any language with the Apify REST API, or with Apify’s JavaScript and Python clients. You need an Apify API token.Shopify products API request
MCP
Apify’s MCP server exposes this Actor as a tool to Claude, Cursor and other MCP clients. Open this Actor’s MCP setup page for setup steps per client, or connect it with this URL:.cursor/mcp.json) and other clients that read an mcpServers config:
Automation
n8n, Make and Zapier all connect to Apify. Each example below uses Actorrocketyard/shopify-products-scraper with this input:
n8n
Copy this workflow and paste it onto an n8n canvas. It runs the Actor every morning through an HTTP Request node and returns the records as n8n items.Apify API token, with your token from Apify Console as the bearer token. The token stays in n8n’s credential store; the workflow only names the credential. Change the input in the node’s JSON body to your own.
The node waits up to 300 seconds, which is also the limit of Apify’s synchronous endpoint. An input that yields nothing comes back as an item with an error field, which you can drop with a Filter node. Apify also publishes a community node, @apify/n8n-nodes-apify, with a Run an Actor and get dataset operation.
Make
- Add Apify’s Run an Actor module and connect your Apify account.
- Choose
rocketyard/shopify-products-scraper, paste the input above and set Run synchronously to Yes. Make limits how long a synchronous run can take, depending on your plan. For longer runs, start the scenario from Watch Actor Runs instead. - Add Get Dataset Items with the run’s default dataset ID.
- Send the items wherever you need them, for example with Google Sheets Add a Row, mapping
store,title,handleandproductId.
Zapier
- Add Apify’s Run Actor action, connect your Apify account, choose
rocketyard/shopify-products-scraperand paste the input above. - Zapier stops synchronous runs after 30 seconds. For anything larger than a small run, let the run continue in the background and start a second Zap from the Finished Actor run trigger.
- Add Fetch dataset items with the run’s dataset ID, then map
store,title,handleandproductIdinto your app. - Test with a small input and check that the Zap handles every record before you turn it on.
Limits
- On 2026-11-05, 11 of 14 well-known stores served their catalog. Two run Shopify behind their own front end or don’t publish the feed, and one refused with a bot check.
- No inventory quantities and no barcodes:
/products.jsondoesn’t publish them.availableis the store’s in-stock flag, not a count. - Shopify serves one listing up to an offset of 25,000 products (HTTP 400 after page 100). A larger store returns those 25,000 and a free
HTTP_ERRORitem that says so. Add its collection URLs to reach more; a product in several inputs is charged once. - Sites that run Shopify behind their own front end usually don’t serve the feed, and return a free
NO_STRUCTURED_DATAitem, like any site not on Shopify. - Some stores refuse automated reads or rate-limit them. Those return a free
BLOCKEDitem. The Actor never logs in, solves a check or disguises itself, and a proxy will not change a refusal aimed at the feed itself. - A store selling in several markets answers for one of them, and prices, currency and
availableall follow it. Without Market country that is the market of where the run comes from, so set it to compare runs. On 2026-11-05, one store showed 0 of 26 variants available to a visitor in Kazakhstan, and 37 of 51 withUS. - A product URL is found by reading its store or collection until the product turns up. The reading is free, but on a large catalog it takes a minute or two.
FAQ
How much does it cost?
$0.50 per 1,000 products plus $0.00005 per run, billed by Apify. 10,000 products cost $5.00. There is no subscription, and you can cap any run with Maximum cost per run. Your Apify plan sets your discount tier (Platinum and Diamond are enterprise tiers):How do I call it from the API?
One request starts a run and returns its results, using your Apify API token:What happens when a URL fails?
The dataset gets one free error item for it, with a code and the reason, and the other inputs in the run carry on. Error codes explains each code, whether a retry helps and what to do.Which stores does it work on?
Stores on Shopify’s standard storefront, which is most Shopify stores. You can check any store by openinghttps://<store>/products.json in a browser: if you see JSON with a products list, the Actor can read it.
What happens when a field is missing?
The field comes back asnull. The Actor reports what the source publishes and never fills in guesses.
Is it allowed to scrape this data?
The Actor reads only the catalog a store publishes for anyone at/products.json, honours robots.txt, sends no cookies, and doesn’t work around any refusal. The feed holds product data and no customer data. Some stores’ terms of service restrict automated access, so check the terms of the stores you read. You are responsible for how you use the data, including copyright in descriptions and photos.
