Shopify Store Products Scraper
Pricing
$1.00 / 1,000 results
Go to Apify Store
Shopify Store Products Scraper
Extract full product catalogs from any Shopify store: titles, prices, sale prices, variants, SKUs, stock and images. Export to Excel.
Shopify Store Products Scraper
Pricing
$1.00 / 1,000 results
Extract full product catalogs from any Shopify store: titles, prices, sale prices, variants, SKUs, stock and images. Export to Excel.
You can access the Shopify Store Products Scraper programmatically from your own applications by using the Apify API. You can also choose the language preference from below. To use the Apify API, you’ll need an Apify account and your API token, found in API & Integrations in Apify Console.
{ "openapi": "3.0.1", "info": { "version": "0.1", "x-build-id": "YthDuNcDzogekI1I5" }, "servers": [ { "url": "https://api.apify.com/v2" } ], "paths": { "/acts/zerahdata~shopify-store-products-scraper/run-sync-get-dataset-items": { "post": { "operationId": "run-sync-get-dataset-items-zerahdata-shopify-store-products-scraper", "x-openai-isConsequential": false, "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.", "tags": [ "Run Actor" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/inputSchema" } } } }, "parameters": [ { "name": "token", "in": "query", "required": true, "schema": { "type": "string" }, "description": "Enter your Apify token here" } ], "responses": { "200": { "description": "OK" } } } }, "/acts/zerahdata~shopify-store-products-scraper/runs": { "post": { "operationId": "runs-sync-zerahdata-shopify-store-products-scraper", "x-openai-isConsequential": false, "summary": "Executes an Actor and returns information about the initiated run in response.", "tags": [ "Run Actor" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/inputSchema" } } } }, "parameters": [ { "name": "token", "in": "query", "required": true, "schema": { "type": "string" }, "description": "Enter your Apify token here" } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/runsResponseSchema" } } } } } } }, "/acts/zerahdata~shopify-store-products-scraper/run-sync": { "post": { "operationId": "run-sync-zerahdata-shopify-store-products-scraper", "x-openai-isConsequential": false, "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.", "tags": [ "Run Actor" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/inputSchema" } } } }, "parameters": [ { "name": "token", "in": "query", "required": true, "schema": { "type": "string" }, "description": "Enter your Apify token here" } ], "responses": { "200": { "description": "OK" } } } } }, "components": { "schemas": { "inputSchema": { "type": "object", "required": [ "startUrls" ], "properties": { "startUrls": { "title": "Store URLs", "type": "array", "description": "Shopify store URLs to scrape. Use full URLs, e.g. https://www.allbirds.com, or a collection URL (e.g. https://store.com/collections/sale) to scrape only that collection's products.json. Note: when calling the Apify API directly (not the Console UI), this field's editor rejects bare domains like 'allbirds.com' - use the 'Store domains' field below instead if you only have bare domains.", "items": { "type": "object", "required": [ "url" ], "properties": { "url": { "type": "string", "title": "URL of a web page", "format": "uri" } } } }, "storeDomains": { "title": "Store domains (bare domains allowed)", "type": "array", "description": "Optional additional stores, merged with 'Store URLs' above. Unlike 'Store URLs', this field accepts bare domains (e.g. colourpop.com) with no 'https://' prefix required - useful when calling the Apify API directly, since the 'Store URLs' editor rejects bare domains there.", "items": { "type": "string" }, "default": [] }, "maxProductsPerStore": { "title": "Max products per store", "minimum": 0, "type": "integer", "description": "Maximum number of products to fetch from each store. Set to 0 for unlimited (scrape the entire catalog).", "default": 0 }, "includeVariants": { "title": "Output one row per variant", "type": "boolean", "description": "If enabled, the dataset will contain one row per product variant (with product fields flattened onto each variant). If disabled (default), the dataset contains one row per product with a nested 'variants' array and summary price/availability fields.", "default": false }, "proxyConfiguration": { "title": "Proxy configuration", "type": "object", "description": "Optional proxy configuration. Using Apify Proxy (residential or datacenter) is recommended for scraping many or large stores to avoid IP blocking.", "default": { "useApifyProxy": false } }, "maxConcurrency": { "title": "Max concurrency", "minimum": 1, "maximum": 20, "type": "integer", "description": "Maximum number of stores to scrape in parallel.", "default": 3 }, "requestDelayMs": { "title": "Delay between requests (ms)", "minimum": 0, "type": "integer", "description": "Optional delay in milliseconds between consecutive page requests to the same store, to reduce the chance of being rate-limited or blocked.", "default": 0 }, "trackChanges": { "title": "Track changes between runs (monitoring mode)", "type": "boolean", "description": "If enabled, the actor saves a compact snapshot of each store's products (price, compare-at price, availability, title) in a named key-value store, and compares it to the snapshot from the previous run with this same 'Monitor name'. Differences are output as extra dataset rows with type 'change' (new/removed products, price drops/increases, sales starting/ending, stock changes). The first run with a given monitor name only saves a baseline - it has nothing to compare against yet, so it reports no changes.", "default": false }, "monitorName": { "title": "Monitor name", "type": "string", "description": "Name identifying this monitoring setup, used to pick which saved snapshot to compare against (and update) on each run. Only relevant when 'Track changes between runs' is enabled. Leave empty to auto-derive one from the store URLs - but set a fixed value if you plan to change the list of store URLs between runs and still want continuous tracking.", "default": "" }, "outputMode": { "title": "Output mode", "enum": [ "all", "changesOnly" ], "type": "string", "description": "'All' outputs product/variant rows plus change rows (when change tracking is on). 'Changes only' suppresses product/variant rows and outputs only change rows - useful once you only care about what moved, not the full catalog. Store summary and error rows are controlled separately and are not affected by this setting.", "default": "all" }, "includeStoreSummary": { "title": "Include per-store summary row", "type": "boolean", "description": "If enabled (default), each store gets one extra dataset row of type 'storeSummary' with aggregate insights: product/variant counts, % on sale, average discount, price min/median/max, in-stock %, top vendors and product types, newest products, currency, and a cheap store-wide collection count. Charged as a single result, same as any other row.", "default": true } } }, "runsResponseSchema": { "type": "object", "properties": { "data": { "type": "object", "properties": { "id": { "type": "string" }, "actId": { "type": "string" }, "userId": { "type": "string" }, "startedAt": { "type": "string", "format": "date-time", "example": "2025-01-08T00:00:00.000Z" }, "finishedAt": { "type": "string", "format": "date-time", "example": "2025-01-08T00:00:00.000Z" }, "status": { "type": "string", "example": "READY" }, "meta": { "type": "object", "properties": { "origin": { "type": "string", "example": "API" }, "userAgent": { "type": "string" } } }, "stats": { "type": "object", "properties": { "inputBodyLen": { "type": "integer", "example": 2000 }, "rebootCount": { "type": "integer", "example": 0 }, "restartCount": { "type": "integer", "example": 0 }, "resurrectCount": { "type": "integer", "example": 0 }, "computeUnits": { "type": "integer", "example": 0 } } }, "options": { "type": "object", "properties": { "build": { "type": "string", "example": "latest" }, "timeoutSecs": { "type": "integer", "example": 300 }, "memoryMbytes": { "type": "integer", "example": 1024 }, "diskMbytes": { "type": "integer", "example": 2048 } } }, "buildId": { "type": "string" }, "defaultKeyValueStoreId": { "type": "string" }, "defaultDatasetId": { "type": "string" }, "defaultRequestQueueId": { "type": "string" }, "buildNumber": { "type": "string", "example": "1.0.0" }, "containerUrl": { "type": "string" }, "usage": { "type": "object", "properties": { "ACTOR_COMPUTE_UNITS": { "type": "integer", "example": 0 }, "DATASET_READS": { "type": "integer", "example": 0 }, "DATASET_WRITES": { "type": "integer", "example": 0 }, "KEY_VALUE_STORE_READS": { "type": "integer", "example": 0 }, "KEY_VALUE_STORE_WRITES": { "type": "integer", "example": 1 }, "KEY_VALUE_STORE_LISTS": { "type": "integer", "example": 0 }, "REQUEST_QUEUE_READS": { "type": "integer", "example": 0 }, "REQUEST_QUEUE_WRITES": { "type": "integer", "example": 0 }, "DATA_TRANSFER_INTERNAL_GBYTES": { "type": "integer", "example": 0 }, "DATA_TRANSFER_EXTERNAL_GBYTES": { "type": "integer", "example": 0 }, "PROXY_RESIDENTIAL_TRANSFER_GBYTES": { "type": "integer", "example": 0 }, "PROXY_SERPS": { "type": "integer", "example": 0 }, "PROXY_UNBLOCKER_UNITS": { "type": "integer", "example": 0 } } }, "usageTotalUsd": { "type": "number", "example": 0.00005 }, "usageUsd": { "type": "object", "properties": { "ACTOR_COMPUTE_UNITS": { "type": "integer", "example": 0 }, "DATASET_READS": { "type": "integer", "example": 0 }, "DATASET_WRITES": { "type": "integer", "example": 0 }, "KEY_VALUE_STORE_READS": { "type": "integer", "example": 0 }, "KEY_VALUE_STORE_WRITES": { "type": "number", "example": 0.00005 }, "KEY_VALUE_STORE_LISTS": { "type": "integer", "example": 0 }, "REQUEST_QUEUE_READS": { "type": "integer", "example": 0 }, "REQUEST_QUEUE_WRITES": { "type": "integer", "example": 0 }, "DATA_TRANSFER_INTERNAL_GBYTES": { "type": "integer", "example": 0 }, "DATA_TRANSFER_EXTERNAL_GBYTES": { "type": "integer", "example": 0 }, "PROXY_RESIDENTIAL_TRANSFER_GBYTES": { "type": "integer", "example": 0 }, "PROXY_SERPS": { "type": "integer", "example": 0 }, "PROXY_UNBLOCKER_UNITS": { "type": "integer", "example": 0 } } } } } } } } }}OpenAPI is a standard for designing and describing RESTful APIs, allowing developers to define API structure, endpoints, and data formats in a machine-readable way. It simplifies API development, integration, and documentation.
OpenAPI is effective when used with AI agents and GPTs by standardizing how these systems interact with various APIs, for reliable integrations and efficient communication.
By defining machine-readable API specifications, OpenAPI allows AI models like GPTs to understand and use varied data sources, improving accuracy. This accelerates development, reduces errors, and provides context-aware responses, making OpenAPI a core component for AI applications.
You can download the OpenAPI definitions for Shopify Store Products Scraper from the options below:
If you’d like to learn more about how OpenAPI powers GPTs, read our blog post.
You can also check out our other API clients: