How to export all products from any Shopify store to CSV or JSON
Updated 2026-10-08 · Tool used: Shopify Products Scraper - Prices, Variants, Stock & Monitoring on Apify · Price: $0.70 per 1,000 products (+$0.50 per 1,000 for optional stock details)
Shopify's admin export only works for your own store. For competitor research, dropshipping catalogs or price monitoring you need the public product data of other stores, including every variant, the compare-at price and availability.
This guide shows how to export the complete catalog of any Shopify store (or just one collection) to CSV or JSON in a single run, and how to schedule it to track price changes.
Open Shopify Products Scraper on Apify →Steps
- Add store domains or collection URLs to
stores(custom domains work, headless stores too). - Choose
outputMode: one row per product or one row per variant (better for spreadsheets). - Download as CSV/Excel, or schedule daily runs to monitor prices and discounts.
Example input
{
"stores": [
"deathwishcoffee.com",
"https://www.allbirds.com/collections/mens"
],
"outputMode": "products",
"onlyAvailable": true,
"maxProductsPerStore": 500
}
Example output (one item, shortened)
{
"storeUrl": "https://deathwishcoffee.com",
"storeName": "Death Wish Coffee",
"currency": "USD",
"storeCountry": "US",
"productId": 6756917837879,
"handle": "klean-kanteen-camp-mug",
"url": "https://deathwishcoffee.com/products/klean-kanteen-camp-mug",
"title": "Crossbones Klean Kanteen Mug",
"vendor": "Klean Kanteen",
"productType": "On-The-Go Drinkware",
"tags": [
"Classics",
"Gifting",
"Merch",
"..."
],
"price": 25,
"maxPrice": 25,
"compareAtPrice": null,
"onSale": false,
"discountPercent": null,
"available": true,
"availableVariants": 1,
"variantsCount": 1,
"options": [],
"featuredImage": "https://cdn.shopify.com/s/files/1/0271/7209/products/MetalCore-101.jpg?v=1674569558",
"images": [
"https://cdn.shopify.com/s/files/1/0271/7209/products/MetalCore-101.jpg?v=1674569558",
"https://cdn.shopify.com/s/files/1/0271/7209/products/MetalCore-103.jpg?v=1674569558",
"https://cdn.shopify.com/s/files/1/0271/7209/products/MetalCore-106.jpg?v=1674569558",
"..."
],
"variants": [
{
"id": 40064390660151,
"title": "Default Title",
"sku": "UMKKCM23",
"price": 25,
"compareAtPrice": 0,
"available": true,
"option1": "Default Title",
"option2": null,
"option3": null,
"grams": 300,
"requiresShipping": true,
"imageUrl": null
}
],
"createdAt": "2023-01-03T16:35:36-05:00",
"publishedAt": "2026-09-30T09:47:05-04:00",
"updatedAt": "2026-10-04T07:10:42-04:00",
"descriptionText": "METAL TO THE CORE.\n\nFor when you need to get cracking while you crush your coffee. Serving on-the-go readiness in a shadowy colorway that can withstand even the loudest of living. So turn it up, hit t",
"scrapedAt": "2026-10-04T11:15:49.860Z"
}
Every run's dataset can be downloaded as JSON, CSV, Excel, XML or HTML from the Apify Console, or via https://api.apify.com/v2/datasets/<datasetId>/items?format=csv.
Run it from code
Python
from apify_client import ApifyClient # pip install apify-client
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run_input = {
"stores": [
"deathwishcoffee.com",
"https://www.allbirds.com/collections/mens"
],
"outputMode": "products",
"onlyAvailable": true,
"maxProductsPerStore": 500
}
run = client.actor("tinyrex/shopify-products-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)JavaScript / Node.js
import { ApifyClient } from 'apify-client'; // npm i apify-client
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('tinyrex/shopify-products-scraper').call({
"stores": [
"deathwishcoffee.com",
"https://www.allbirds.com/collections/mens"
],
"outputMode": "products",
"onlyAvailable": true,
"maxProductsPerStore": 500
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);curl (no SDK)
# Runs the actor and returns the results directly (CSV here; use format=json for JSON)
curl -X POST "https://api.apify.com/v2/acts/tinyrex~shopify-products-scraper/run-sync-get-dataset-items?format=csv" \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"stores": ["deathwishcoffee.com", "https://www.allbirds.com/collections/mens"], "outputMode": "products", "onlyAvailable": true, "maxProductsPerStore": 500}' > results.csv
Get your API token in Apify Console → Settings → API & Integrations. The free Apify plan includes monthly credit that is enough to try this.
Use it from an AI agent (MCP)
The Apify MCP server exposes this actor as a tool for Claude, Cursor, VS Code, n8n and other MCP clients. Add this to your client's MCP config (or use the OAuth flow at mcp.apify.com instead of a token):
{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=tinyrex/shopify-products-scraper",
"headers": {
"Authorization": "Bearer <YOUR_APIFY_TOKEN>"
}
}
}
}
Then ask in plain language, e.g. "Export shopify store products to csv for this list and give me a table".
Pricing
Pay per result: $0.70 per 1,000 products (+$0.50 per 1,000 for optional stock details). You can cap the cost of every run in the run options.
FAQ
Can I export products from a Shopify store that isn't mine?
Yes, as long as the products are publicly visible on the storefront. The actor reads the same public product data that the storefront serves to every visitor.
Why not just open /products.json?
It is paginated, limited to 250 items per page, omits some fields and is not available on every store. The actor handles pagination, collections, headless stores and normalization for you.
How do I monitor competitor prices?
Schedule the actor daily and compare price and compareAtPrice across runs; onSale and discountPercent are calculated for you.
More guides
- Bulk tech stack lookup: a Wappalyzer / BuiltWith alternative for thousands of domains
- How to scrape Greenhouse, Lever and Ashby jobs (plus Personio, Teamtailor, Recruitee)
- How to scrape jobs from Workday career sites (myworkdayjobs.com)
- How to export products from any WooCommerce store to CSV or JSON
- How to export EU public tenders from TED (Tenders Electronic Daily) to CSV or JSON
- How to export jobs from the Bundesagentur für Arbeit (Arbeitsagentur) and EURES
- How to scrape remote jobs from Himalayas, Remote OK, We Work Remotely and more in one run
- How to scrape Apple App Store reviews for any app and country (CSV, JSON, API)
- How to export open EU funding calls (Horizon Europe, Digital Europe, cascade funding) to CSV or JSON