Apify actor · whoareyouanas/shopify-website-product-catalogue
Shopify Product Scraper - CSV & Excel Export
Export public Shopify store, collection, or product catalogs to CSV, Excel, JSON, and ZIP. Keep nested variants, SKUs, observed prices, tags, image references, and source coverage together for catalog preparation.
Documentation checked 2026-10-29 · deployed build 0.1.8 · run through your Apify account
01 / Overview
Match the actor to the job.
Choose the source scope
Supply store roots, collection URLs, or individual public product URLs.
Keep catalog identities
Preserve product and variant relationships and literal values such as long IDs or leading-zero SKUs.
Prepare export files
Use the catalog workbook, variant CSV, structured JSON, image references, and coverage report.
02 / Input
Start with a clear, bounded input.
startUrls is required. maxProductsPerTarget and maxProducts bound collection. Choose exportFormats and use currencyOverrides only when you have confirmed the source currency.
{
"startUrls": [
{
"url": "https://silverpawdog.com/"
}
],
"maxProductsPerTarget": 5,
"maxProducts": 5,
"exportFormats": [
"csv",
"xlsx",
"json",
"zip"
]
}Replace example targets and credential placeholders before running. These are documentation examples, not a promise of currently available source results.
| Field | Type / required | Default | Purpose |
|---|---|---|---|
| startUrls | arrayRequired | Not specified | Public HTTPS Shopify roots, collections or product URLs. Locale prefixes are preserved. Unsupported filters are rejected rather than widened to a full-store capture. |
| maxProductsPerTarget | integer | 1000 | 0 removes this user cap; global, page, byte, variant and time bounds still apply. A capped result is marked partial. Minimum: 0 · Maximum: 25000 |
| maxProducts | integer | 10000 | Global product limit. Overlapping scopes in the same observed store/locale context count once. Apify's maximum charge per run also applies. Minimum: 1 · Maximum: 25000 |
| exportFormats | array | ["csv","xlsx","json","zip"] | Choose csv, xlsx, json and/or zip. ZIP includes the standard formats. XLSX includes normalized JSON for full text exceeding Excel cell limits. The product dataset and coverage manifest are always available. |
All other input controls (4)
| Field | Type / required | Default | Purpose |
|---|---|---|---|
| currencyOverrides | array | [] | Optional operator assertions: [{"storeUrl":"https://supplier.example","localePrefix":"","currency":"CAD"}]. Does not convert prices or verify currency. Without an assertion, feed currency stays unknown. |
| saveSourceResponses | boolean | false | Save the exact accepted feed response text in the run's key-value store. Manifest observations link each response and its hash, allowing export reconciliation even when a live catalogue changes. Adds storage usage; disabled by default. |
| maxConcurrency | integer | 3 | Different store contexts run concurrently; targets within a context are processed sequentially. Minimum: 1 · Maximum: 10 |
| requestIntervalMs | integer | 1000 | Minimum pause between requests to a store context. Persistent throttling is reported explicitly. Minimum: 500 · Maximum: 60000 |
03 / Output
Know what each returned row represents.
- Product records retain nested variants and images. Export files provide alternate views, including one CSV row per returned variant and a multi-sheet workbook.
- A successful run can be partial because you requested a product cap. Missing currency stays unknown; source prices are not converted. Availability is not actual stock quantity.
{
"productId": "9007199254740993",
"title": "Dog Rain Jacket",
"handle": "dog-rain-jacket",
"tags": [
"Rainwear",
"Dogs"
],
"currency": null,
"currencyStatus": "unknown",
"variantCount": 1,
"variants": [
{
"variantId": "9007199254740994",
"sku": "00042",
"price": "29.90",
"compareAtPrice": "39.90",
"available": true,
"selectedOptions": [
{
"name": "Size",
"value": "M"
}
]
}
],
"images": [
{
"url": "https://cdn.example/rain-jacket.jpg",
"position": "1",
"variantIds": []
}
]
}Example values illustrate the published contract. Available fields and populated values depend on the source, mode, and result status.
Fields in the documented output view
title
title
tags
Tags
productId
productId
storeUrl
storeUrl
priceMin
priceMin
priceMax
priceMax
currency
currency
currencyStatus
currencyStatus
variantCount
variantCount
imageCount
imageCount
productUrl
productUrl
Output views select columns. They do not necessarily filter record types or exhaust the full JSON payload. Use structured JSON when you need nested arrays or objects.
Dataset links and run artifacts (2)
- Products with variants and galleries
- Available through the actor's Output tab for your run.
- Coverage, counts and download links
- Available through the actor's Output tab for your run.
04 / Pricing
Understand the billable unit.
These are the active public event prices checked on 2026-10-29, in USD. They describe each event, not a universal flat price for a run. Confirm your current Apify plan and run budget before starting.
| Billable event | Rate (USD) | When it applies |
|---|---|---|
Actor Start apify-actor-start | $0.00005 / event | Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). Start units depend on allocated memory: one event per GB, with at least one event. |
result apify-default-dataset-item | $0.001 / event | Single result in the default dataset. $1.00 per 1,000 of this event. Other events and separate services are additional. |
- The configured dataset result event applies to delivered product records, plus startup.
- A variant CSV row or export file is not a separate product result by itself. Check run counts and active pricing when budgeting multiple targets.
A result limit and a spending cap are different controls. Account charges, applicable taxes, and separately billed providers or proxies must be considered where relevant. A cap setting is not a minimum invoice charge.
05 / API & automation
Use the same input from your workflow.
Test a small run in Apify Console, inspect its records and charges, then save a task or call the actor from your own application. Keep your Apify token in an environment variable. Source-specific credentials, if required, are separate from the Apify API token.
# Save the input example as input.json and set APIFY_TOKEN.
# This request starts an asynchronous, potentially billable run.
curl --request POST \
'https://api.apify.com/v2/acts/whoareyouanas~shopify-website-product-catalogue/runs' \
--header "Authorization: Bearer $APIFY_TOKEN" \
--header 'Content-Type: application/json' \
--data @input.jsonThe response identifies the run. Wait for it to finish, inspect its status, and use its default dataset and key-value store to retrieve results. A successful run can still contain partial or failed records; check the output contract above before continuing downstream.
Coverage & interpretation
Check the result before relying on it.
- The output is observed source data, not an automatically ready-to-import native Shopify catalog.
- Image references are exported; image binaries, unpublished products, verified stock counts, and sales estimates are not provided.
Questions
Before you build an integration.
What do I need to provide?
startUrls is required. maxProductsPerTarget and maxProducts bound collection. Choose exportFormats and use currencyOverrides only when you have confirmed the source currency.
What should I check in the output?
- Product records retain nested variants and images. Export files provide alternate views, including one CSV row per returned variant and a multi-sheet workbook.
- A successful run can be partial because you requested a product cap. Missing currency stays unknown; source prices are not converted. Availability is not actual stock quantity.
How do I budget the run?
- The configured dataset result event applies to delivered product records, plus startup.
- A variant CSV row or export file is not a separate product result by itself. Check run counts and active pricing when budgeting multiple targets.
Keep exploring
Practical guides for the next step.
Export a Public Shopify Catalog to CSV Without Losing Variants
Keep products, variants, SKUs, image references, and coverage separate when preparing a public Shopify catalog for review.
Read the guideShopify Catalog Export: Chrome Extension or Apify Actor?
Choose Catalog Prep for a storefront you are reviewing, or the companion Apify actor for supplied URLs, API calls, and scheduled export workflows.
Read the guideIs Your Shopify CSV Usable? Check SKUs, Variants, and Images
Use a practical acceptance check for catalog exports: preserve identifiers, reconcile variants, verify image associations, and keep currency evidence.
Read the guideMeet Catalog Prep: Export Shopify Catalogs from Chrome
Turn a public Shopify store or collection into CSV and Excel files with variants, tags, image links, and a report showing what was captured.
Read the guide