Shopify Products JSON Scraper
Variants, Barcode, Discounts
Example request
curl -X POST https://radarbg.com/v1/shopify-store-products \
-H "X-API-Key: YOUR_KEY" -H "Content-Type: application/json" \
-d '{"storeUrls": ["https://www.allbirds.com", "https://kith.com/collections/footwear"], "maxProductsPerStore": 30, "oneRowPerVariant": false, "onlyAvailable": false}'
Answer: {"ok": true, "count": N, "items": [...], "usage": {...}}. Failed calls are not counted.
Inputs
| Field | Type | Description |
|---|---|---|
storeUrls | array | Store home pages (https://www.allbirds.com), collection pages (https://store.com/collections/sale) or single product pages (https://store.com/products/handle = only that product). Any Shopify store with the standard storefront (headless sto |
maxProductsPerStore | integer | Stop after this many products in each store. |
oneRowPerVariant | boolean | Each size/color variant as its own row with SKU, barcode, price and stock (otherwise variants are nested in the product). |
onlyAvailable | boolean | Skip sold-out products/variants. |
onlyOnSale | boolean | Keep only products with a compare-at (original) price higher than the price. |
keywords | array | Keep only products whose title, type, vendor or tags contain one of these words. |
includeDescription | boolean | Plain-text product description (first 2000 characters). |
maxItems | integer | Hard limit on dataset rows (and cost). |
onlyChanges | boolean | Return only products that are new, changed price (price_drop / price_up), went back in stock or out of stock, changed variants, or were removed since the last run with the same monitor ID. Unchanged products are not saved and not billed. Th |
monitorId | string | Name of the memory used by monitoring mode. Use a different ID for each store list or schedule. |
proxyConfiguration | object | Optional Apify Proxy for stores that rate-limit servers. |
datasetId | string | Optional. Pick a dataset (or paste its ID) to read the input from, for example the result of Google Maps Scraper. When this actor runs as an integration, the dataset of the triggering run is used automatically (payload.resource.defaultDatas |
datasetField | string | Optional. The item field that holds the value, for example website, url or videoUrl (dot paths like author.url work). Empty = detected automatically. |
datasetMaxItems | integer | Upper limit of unique values taken from the dataset, to keep the cost under control. |
Price
Included in every plan: 100 calls a month free, then from €9 a month for 3,000 calls across all APIs.