RRadar
E-commerce & apps

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

FieldTypeDescription
productUrlsarrayProduct pages from any online stores. The actor reads the real price from each page and sorts all offers from cheapest to most expensive.
searchQuerystringProduct name or model, e.g. 'Sony WH-1000XM5'. Product pages are searched in the stores below.
storesarrayStore 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
resultsPerStoreintegerHow many search results to check in each store.
convertTostringAll prices are also converted to this currency with official ECB rates (USD, EUR, GBP, ...).
onlyInStockbooleanSkip offers marked out of stock.
maxItemsintegerHard limit on saved offers (and cost).
onlyChangedbooleanReturn 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
monitorIdstringOptional 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
minChangePercentnumberPrice 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
mapPricenumberOptional. 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.
mapPricesobjectOptional. Per-URL MAP prices that override mapPrice, e.g. {"https://store.com/products/x": 79.99}. Prices are in the 'Convert prices to' currency.
proxyConfigurationobjectOff 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.
datasetIdstringOptional. 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.

Related APIs

Apify Store Trends APIPrice Drop & Back in Stock AlertShopify Products JSON Scraper