🦖 TinyRex Data Toolspractical guides for web data APIs

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

  1. Add store domains or collection URLs to stores (custom domains work, headless stores too).
  2. Choose outputMode: one row per product or one row per variant (better for spreadsheets).
  3. 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.

Try it on Apify →

More guides