Product Price Checker
Cheapest Price Across Stores
Example request
curl -X POST https://radarbg.com/v1/cheapest-price-finder \
-H "X-API-Key: YOUR_KEY" -H "Content-Type: application/json" \
-d '{"productUrls": ["https://www.allbirds.com/products/mens-tree-runners", "https://www.mvmt.com/products/odyssey-ii-ceramic-fusion-black-40mm-28000457", "https://www.ugmonk.com/products/ugmonk-utility-tote-olive"], "resultsPerStore": 3, "convertTo": "USD", "onlyInStock": false}'
Answer: {"ok": true, "count": N, "items": [...], "usage": {...}}. Failed calls are not counted.
Inputs
| Field | Type | Description |
|---|---|---|
productUrls | array | Product pages from any online stores. The actor reads the real price from each page and sorts all offers from cheapest to most expensive. |
searchQuery | string | Product name or model, e.g. 'Sony WH-1000XM5'. Product pages are searched in the stores below. |
stores | array | Store domains for the search, e.g. walmart.com, ebay.com, or any brand store. Some big retailers (Amazon, Target, Best Buy, Newegg) often block automated requests; those are reported, not billed. Empty = amazon.com, walmart.com, bestbuy.com |
resultsPerStore | integer | How many search results to check in each store. |
convertTo | string | All prices are also converted to this currency with official ECB rates (USD, EUR, GBP, ...). |
onlyInStock | boolean | Skip offers marked out of stock. |
maxItems | integer | Hard limit on saved offers (and cost). |
onlyChanged | boolean | Return only offers whose price or stock changed since the previous run with the same input (or the same monitorId), plus new pages. Unchanged offers are not saved and not billed. Every row gets changeType, previousPrice, priceChange and pri |
monitorId | string | Optional name for this price watch, e.g. 'aeropress-eu'. Runs with the same monitorId share the remembered prices even if you add or remove URLs. Setting it also adds the change fields to every row (without filtering, unless 'Only changed o |
minChangePercent | number | Price monitoring only: ignore price moves smaller than this percent (they count as unchanged and are not returned in onlyChanged mode). Small moves add up against the last reported price, so a slow drift is still reported once it passes the |
mapPrice | number | Optional. Minimum advertised price in the 'Convert prices to' currency. Every row then gets mapPrice, belowMap (true when the converted price is under it), mapGap and mapGapPercent (positive = how far below MAP). Empty = no MAP check. |
mapPrices | object | Optional. Per-URL MAP prices that override mapPrice, e.g. {"https://store.com/products/x": 79.99}. Prices are in the 'Convert prices to' currency. |
proxyConfiguration | object | Off by default: direct requests with an honest User-Agent work best (Apify proxy IPs are often rate-limited by Shopify stores, HTTP 429). Turn it on only for a store that blocks direct requests. |
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 |
Price
Included in every plan: 100 calls a month free, then from €9 a month for 3,000 calls across all APIs.