Hotline.ua API & Scraper
Hotline.ua is Ukraine's largest price-comparison site.
🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.
This API reads it as JSON. `search` takes product words (Ukrainian, Russian or Latin) and an optional brand, and returns 48 products per page with the lowest and highest current price in UAH, the number of shops, brand, category, review count and short specs, plus the exact result total and category and brand facets. `category` reads a whole category with its own product total, six sorts and a price window. `offers` returns every shop selling one product in one call: price, condition (new or marked down), delivery time, the city it ships from, each delivery method with its stated cost, free-delivery flag, warranty, payment methods, instalment plans, the shop's rating and review counts, and whether the row is a paid placement. The offer list depends on the buyer's city, so `city` picks one of ten main cities (Kyiv by default). `product` adds the full specification sheet, barcode, per-aspect ratings, colour variants and the cheapest new-condition price. `price_history` returns the site's price chart: average, lowest and highest shop price over time in UAH and USD, and its own percentage price change over 14 days to all time.
What a Hotline.ua field actually contains
Fields that read differently from how they look. Every row was measured against live hotline.ua pages on 2026-10-15.
| Field | What it holds |
|---|---|
| product_id | Hotline's numeric product id as a string (24927903). Pass it unchanged to product, offers and price_history; search and category rows of every kind returned the same id and the same lowest price on 18 of 18 round trips. |
| row_type | product for a product with several shops, single_offer when only one shop sells it (shop_name, offer_id and outbound_url are then set). Both open with product and offers. |
| lowest_price, highest_price | The site's own current price range for the product, the same numbers the product page prints ('ціни: 23 171 – 47 499 ₴'): matched on 8 of 8 product pages in each of two runs, and equal to the cheapest and the most expensive row of offers. |
| cheapest_new_offer | The lowest price among new-condition offers. lowest_price can come from a marked-down offer: for an iPhone 15 128GB it was 23 171 UAH from a marked-down unit while the cheapest new one was 28 700 UAH. |
| condition | new, discounted (the site's 'уцененный': marked down, open box or display unit) or used; condition_text keeps the site's own word. |
| listing_type, has_bid | sponsored for a paid placement, regular otherwise. The default offer order is the site's own, which puts paid placements first (24 of 67 offers for the iPhone 15 in Kyiv). |
| delivery_methods, lowest_stated_delivery_cost | Each delivery option (Nova Poshta, Ukrposhta, courier, pickup) with its cost: 0 when free, the amount when the shop states one, null for 'carrier tariff'. Hotline publishes no single shipping fee, so there is no total price. |
| city, same_city, ships_from | The offer list is for the buyer's city: 67 shops for the iPhone 15 in Kyiv, 61 in Lviv, 60 in Kharkiv, 61 in Odesa on the same day. Prices of a shop do not change with the city; same_city and the order do. |
| shop_rating_percent | The shop's rating on Hotline's 0-100 scale, with positive and negative review counts; null for a new shop without reviews. |
| price_history series | Average, lowest and highest shop price in UAH and USD and the number of offers, twice a month from the product's start and daily for recent weeks. Periods the site kept no lowest or highest price for are null, not zero. |
Prices are in UAH as the shops list them on Hotline.ua; a few carry kopecks (13 660.23).
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/hotline-ua/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "iphone 15"
}
}{
"ok": true,
"meta": {
"api": "hotline-ua",
"endpoint": "search",
"mode": "live",
"latency_ms": 2976.1,
"record_count": 48,
"bytes": 88327,
"cache_hit": false,
"total": 2163,
"last_page": 46,
"upstream_requests": 3,
"charged_credits": 3,
"version": "0.1.0",
"request_id": "be64c649f93e42a7",
"queue_ms": 1.2,
"fetched_at": "2026-10-15T17:02:55.043Z"
},
"data": {
"query": "iphone 15",
"brand_id": null,
"total": 2163,
"page": 1,
"last_page": 46,
"has_more": true,
"page_size": 48,
"currency": "UAH",
"results": [
{
"product_id": "24927903",
"row_type": "product",
"title": "iPhone 15 128GB Black (MTP03)",
"url": "https://hotline.ua/ua/mobile-mobilnye-telefony-i-smartfony/apple-iphone-15-128gb-black-mtp03/",
"product_path": "apple-iphone-15-128gb-black-mtp03",
"brand": "Apple",
"brand_id": 242,
"category_id": 11,
"category_path": "/mobile/mobilnye-telefony-i-smartfony/",
"product_type": "Смартфон",
"lowest_price": 23171,
"highest_price": 47499,
"currency": "UAH",
"offer_count": 66,
"shop_name": null,
"shop_id": null,
"offer_id": null,
"outbound_url": null,
"review_count": 3,
"question_count": 1,
"image": "https://hotline.ua/img/tx/585/5855374215.jpg",
"short_specs": [
"Смартфон",
"екран: 6,1\"",
"OLED"
],
"is_new": false,
"added_date": "2023-09-12",
"is_adult": false
},
{
"product_id": "24927918",
"row_type": "product",
"title": "iPhone 15 256GB Black (MTP63)",
"url": "https://hotline.ua/ua/mobile-mobilnye-telefony-i-smartfony/apple-iphone-15-256gb-black-mtp63/",
"product_path": "apple-iphone-15-256gb-black-mtp63",
"brand": "Apple",
"brand_id": 242,
"category_id": 11,
"category_path": "/mobile/mobilnye-telefony-i-smartfony/",
"product_type": "Смартфон",
"lowest_price": 34500,
"highest_price": 44311,
"currency": "UAH",
"offer_count": 46,
"shop_name": null,
"shop_id": null,
"offer_id": null,
"outbound_url": null,
"review_count": 0,
"question_count": 4,
"image": "https://hotline.ua/img/tx/582/5828121625.jpg",
"short_specs": [
"Смартфон",
"екран: 6,1\"",
"OLED"
],
"is_new": false,
"added_date": "2023-09-12",
"is_adult": false
},
{
"product_id": "24928335",
"row_type": "product",
"title": "iPhone 15 Pro Max 256GB Natural Titanium (MU793)",
"url": "https://hotline.ua/ua/mobile-mobilnye-telefony-i-smartfony/apple-iphone-15-pro-max-256gb-natural-titanium-mu793/",
"product_path": "apple-iphone-15-pro-max-256gb-natural-titanium-mu793",
"brand": "Apple",
"brand_id": 242,
"category_id": 11,
"category_path": "/mobile/mobilnye-telefony-i-smartfony/",
"product_type": "Смартфон",
"lowest_price": 36999,
"highest_price": 56500,
"currency": "UAH",
"offer_count": 10,
"shop_name": null,
"shop_id": null,
"offer_id": null,
"outbound_url": null,
"review_count": 6,
"question_count": 3,
"image": "https://hotline.ua/img/tx/582/5828121655.jpg",
"short_specs": [
"Смартфон",
"екран: 6,7\"",
"OLED"
],
"is_new": false,
"added_date": "2023-09-12",
"is_adult": false
}
],
"category_facets": [
{
"category_id": 599,
"name": "Чохли для смартфонів",
"path": "/mobile/chehly-sumki-futlyary-dlya-mobilnyh-i-smartfonov/",
"count": 1416,
"group": "Смартфони, Смарт-годинники"
},
{
"category_id": 245,
"name": "Захисні плівки та скло для смартфонів",
"path": "/mobile/zaschitnaya-plenka-dlya-mobilnyh-telefonov/",
"count": 439,
"group": "Смартфони, Смарт-годинники"
},
{
"category_id": 11,
"name": "Смартфони та мобільні телефони",
"path": "/mobile/mobilnye-telefony-i-smartfony/",
"count": 297,
"group": "Смартфони, Смарт-годинники"
}
],
"brand_facets": [
{
"brand_id": 130428,
"name": "ArmorStandart",
"count": 567
},
{
"brand_id": 242,
"name": "Apple",
"count": 364
},
{
"brand_id": 145413,
"name": "Proove",
"count": 185
}
]
}
}What the Hotline.ua API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Keyword search across hotline.ua's whole catalogue. Each row is a product with its lowest and highest current price in UAH, the number of shop offers (or the one shop when only one sells it), brand, category, review count and short specs. Also returns the exact result total and category / brand facets. Optional brand filter (brand_id from `brand_facets`). | Pricing teams call search to get keyword search across hotline.ua's whole catalogue. | query, brand_id, page |
| category | One category's product listing (e.g. mobilnye-telefony-i-smartfony = smartphones) with the category's own product total, sort, price range and paging. Prices are the products' current lowest / highest offer in UAH. | Marketplace operators call category to get one category's product listing (e.g. | category, sort, min_price, max_price, city, ... |
| product | One product card: title, brand, category, barcode, lowest / highest / average current price, the lowest price among NEW-condition offers, offer count, rating and review counts with per-aspect ratings, the full specification sheet, description, images, colour / size variants and the last price-history point. | Catalog enrichment teams call product to get one product card. | product_id, url, city |
| offers | Every shop offer for one product in one city, in the site's own order (paid placements first) or by price / warranty: shop (name, id, website, rating, review counts, official / new), price, condition (new / discounted), dispatch time, where it ships from, same-city flag, each delivery method with its stated cost, free-delivery flag, warranty, payment methods, instalment plans, whether the row is a paid placement, and the click-through link. | Retail analysts call offers to get every shop offer for one product in one city, in the site's own order (paid placements first)…. | product_id, url, city, sort |
| price_history | The product's price chart as the site draws it: average, lowest and highest shop price over time in UAH and USD, and the number of offers, twice a month and then daily for recent weeks; plus the site's own % price change over 14 / 30 days, 3 / 6 months, a year and all time. | Pricing teams call price_history to get the product's price chart as the site draws it. | product_id, url, city |
Call search from your stack
curl -X POST https://api.reefapi.com/hotline-ua/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"iphone 15"}'import requests
r = requests.post(
"https://api.reefapi.com/hotline-ua/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "iphone 15"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/hotline-ua/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "iphone 15"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.hotline-ua.search with {"query":"iphone 15"}.Who uses this API and why
- Monitor the cheapest shop price for a product list in Ukraine every day, per city.
- Track which shops pay for placement on a product and how their prices compare.
- Build price-history datasets in UAH and USD per product.
- Map a category's catalogue with prices, offer counts, ratings and specs.
- Check stated delivery options and warranty terms across shops for one product.
Questions developers ask before integrating
Do I need a Hotline.ua account?
No. Everything is read logged out, and you call reefapi.com from anywhere.
Why does the shop list change with the city?
Hotline shows the shops that deliver to the buyer's city. On 2026-10-15 an iPhone 15 128GB had 67 offers in Kyiv, 61 in Lviv, 60 in Kharkiv and 61 in Odesa; the 61 shops present in both Kyiv and Lviv had identical prices. Pass city = kyiv, lviv, kharkiv, odesa, dnipro, zaporizhzhia, vinnytsia, poltava, mykolaiv or kherson.
How many shops does offers return?
All of them in one call: 2 to 100 shops per product in our sample (iPhone 15 128GB: 67 in Kyiv).
Is the search total exact?
Yes. "iphone 15" reported 2 158 results; 44 pages of 48 plus 46 rows on page 45 is exactly 2 158, and page 46 is empty.
Which filters are there?
Search: brand (iphone 15 → Apple only: 2 158 → 361, 48 of 48 rows Apple). Category: a price window (smartphones 4 495 → 1 306 for 10 000-20 000 UAH) and six sorts; price ascending and descending were in order on 48 of 48 rows. The price window keeps a product whose price range touches it.
Is shipping included in the price?
No. Hotline lists each shop's delivery methods with their own cost; most say 'carrier tariff' without a number. You get every method's cost where stated and the lowest stated one.
How far back does price_history go?
To the product's start on the site: October 2023 for the iPhone 15, 427 points to the previous day, with the site's own price change over 14 and 30 days, 3 and 6 months, a year and all time.
Are sponsored shops marked?
Yes. Each offer carries has_bid and listing_type; the default order is the site's own, paid placements first. Ask for sort = price_asc to rank by price.
What is the Hotline.ua API?
Hotline.ua API is a ReefAPI endpoint group for ukraine's largest price-comparison site: every shop's price for a product per city, specs, ratings, price history and category listings in uah. It returns live JSON through POST requests under /hotline-ua/v1.
Is the Hotline.ua API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. Hotline.ua calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Hotline.ua login or account?
No login to Hotline.ua is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the Hotline.ua data?
The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the Hotline.ua API use?
Hotline.ua actions currently cost 1-3 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.
Can I call Hotline.ua from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call hotline-ua actions with the same key, credit pool and JSON envelope used by normal REST requests.