{
    "schema_version": 3,
    "name": "Індекс цін BlaBlaPrice, Україна: жовтень 2026",
    "country": "ua",
    "country_name": "Україна",
    "lang": "uk",
    "month": "2026-10",
    "period": {
        "from": "2026-10-01",
        "to": "2026-10-31"
    },
    "currency": "UAH",
    "min_samples": 5,
    "min_model_samples": 3,
    "min_service_unit_samples": 3,
    "schema_changes": {
        "2": "H-023: model level added (fields level, model, brand, model_key, model_samples, model_shops, used, product_id; the models list of each category row; models_count, other_samples, models_note). The version 1 fields keep their names and meaning; a category row reads as before.",
        "3": "H-026: goods and services (fields kind, unit_code, variant, unit_samples, unit_shops; the units list of each category row with level \"unit\" rows; units_count, units_note, unit_label). Goods keep their models; a service has no models (models empty, models_note null) and is grouped by price unit instead, from 3 prices a unit, its category row being its most usual unit. The version 1 and 2 fields keep their names and meaning; ?level=category in the CSV gives the same category lines as before."
    },
    "updated_at": "2026-10-31T19:38:15Z",
    "generated_at": "2026-10-31T20:40:52Z",
    "refresh_hours": 6,
    "html": "https://blablaprice.com/ua/site/price-index/pylososy",
    "csv": "https://blablaprice.com/ua/site/price-index.csv?category=pylososy",
    "license": "https://creativecommons.org/licenses/by/4.0/",
    "creator": "BlaBlaPrice (EVERLOGIC LLC)",
    "months_available": [
        "2026-10"
    ],
    "fields": [
        "country",
        "lang",
        "month",
        "category_slug",
        "category_name",
        "p25",
        "median",
        "p75",
        "currency",
        "samples",
        "updated_at",
        "unit",
        "shops",
        "requests",
        "level",
        "model",
        "brand",
        "model_key",
        "model_samples",
        "model_shops",
        "used",
        "product_id",
        "kind",
        "unit_code",
        "variant",
        "unit_samples",
        "unit_shops"
    ],
    "field_docs": {
        "country": "country code of the site folder (ISO 3166-1 alpha-2, lower case; \"ua\" = Ukraine, \"us\" = the site root)",
        "lang": "language of category_name (ISO 639-1)",
        "month": "calendar month of the observations, YYYY-MM",
        "category_slug": "address of the category page on this country's site, relative to the country folder",
        "category_name": "category name in lang",
        "p25": "25th percentile of the observed prices (a quarter of the prices are lower), in currency, rounded to 2 significant digits",
        "median": "median (50th percentile) of the observed prices, in currency, rounded to 2 significant digits",
        "p75": "75th percentile of the observed prices (three quarters are lower), in currency, rounded to 2 significant digits",
        "currency": "ISO 4217 code; prices in other currencies are not converted, they are left out",
        "samples": "number of distinct prices behind the row (a goods category at least 5, a service unit at least 3)",
        "updated_at": "time of the newest price in the row, ISO 8601, UTC",
        "unit": "on a category row: price unit when sellers quote per unit (per hour, per m2), as the source wrote it, empty = a whole item or job; on a unit row (level \"unit\"): the unit code, the same as unit_code",
        "shops": "number of distinct sellers (web sites or BlaBlaPrice accounts) behind the row",
        "requests": "number of distinct buyer requests whose web search or offers gave the prices; a small number means the row rests on few searches",
        "level": "\"category\" for a row of all the category's prices, \"model\" for the prices of one model inside a goods category (schema_version 2), \"unit\" for the prices of one unit inside a service category (schema_version 3); in JSON the model rows are in the category row's \"models\" list and the unit rows in its \"units\" list, in CSV they follow their category row",
        "model": "model without the brand, as most shops write it, taken from the shop's product title: series and code, plus the memory or capacity when the title gives it (\"iPhone 14 Pro 256GB\", \"TDLRB 65242BS\"); empty on a category row",
        "brand": "brand named in the title, or the only brand that makes the product line in it (iPhone: Apple, Galaxy: Samsung, Redmi and Poco: Xiaomi); empty on a category row",
        "model_key": "stable key of the model: Latin letters, digits and hyphens, brand first, \"-used\" at the end for used or refurbished goods (\"apple-iphone-14-pro-256gb-used\"); empty on a category row",
        "model_samples": "number of distinct prices of the model (at least 3); equals samples on a model row, empty on a category row",
        "model_shops": "number of distinct sellers of the model; equals shops on a model row, empty on a category row",
        "used": "true when the shops' titles say used or refurbished (б/у, б/в, вживаний, refurbished, \"хороший стан\"); such goods are a model of their own; false = not said to be used; empty on a category row",
        "product_id": "ID of the matching product card of the BlaBlaPrice catalog when the brand and the model match one, else empty (cards are not created from shop titles)",
        "models": "JSON only: the category's model rows, more prices first; empty when no model has 3 prices",
        "models_count": "JSON only: number of models shown for the category",
        "other_samples": "JSON only: prices of the category not in a shown model (no clear model in the title, or fewer than 3 prices of that model); they are in the category row, not in a model",
        "models_note": "JSON only: why the category has no model rows yet, in lang; null when it has some",
        "name": "JSON model rows only: brand and model as the page shows them",
        "label": "JSON model and unit rows: the model with the used mark, or the service with its unit (\"Maths tutors: prices per hour\"), in lang",
        "kind": "\"goods\" or \"service\" (schema_version 3). Goods are grouped by model, services by price unit: a service has no models. Worked out once per country, not per page: the kind the request reader gave the category's requests (two thirds agreeing), else per-hour prices, else the category's name, else its section of the tree",
        "unit_code": "service rows: the unit of the price, a stable code: hour, lesson, visit, m2, m3, lm (running metre), kg, pack, t, l, or service = the source names no unit (a price for the whole service). Taken from the price's own unit or a unit the seller's title states outright (\"1 lesson\", \"per hour\"), never guessed; on a service category row the code of its first unit; empty for goods",
        "variant": "service rows: the variant every price of the unit names in its title: group, individual, online, or several joined with \"+\"; empty when the titles name none or differ (then see variants)",
        "unit_samples": "service rows: number of distinct prices of the unit (at least 3); on a category row those of its first unit; empty for goods",
        "unit_shops": "service rows: number of distinct sellers of the unit; empty for goods",
        "units": "JSON only: a service category's unit rows, more prices first, never mixed; empty for goods",
        "units_count": "JSON only: number of units shown for the category",
        "units_note": "JSON only: why a service category has no unit row yet, in lang; null otherwise",
        "unit_label": "JSON service rows only: the unit as the page says it, in lang (\"за годину\", \"per lesson\")",
        "variants": "JSON unit rows only: how many prices of the unit name each variant in their titles",
        "variant_label": "JSON unit rows only: the variant in lang"
    },
    "methodology": {
        "source": {
            "term": "Джерело",
            "text": "Ціни із сайтів магазинів і продавців, які пошук BlaBlaPrice знайшов для запитів покупців в Україні. До них додаються ціни з пропозицій продавців на BlaBlaPrice і з прайсів, які продавці завантажили. Тестові акаунти не враховуються."
        },
        "period": {
            "term": "Період",
            "text": "Один календарний місяць: жовтень 2026. Ціна належить до того місяця, коли її знайшов пошук або надіслав продавець. Попередні місяці доступні за посиланнями нижче, коли в них є дані."
        },
        "filter": {
            "term": "Відбір",
            "text": "Беремо лише ціни в UAH. Результати пошуку, які не відповідають запиту (оцінка відповідності нижче 50 зі 100 або позначка «не підходить»), відкидаємо. Та сама ціна на тій самій сторінці враховується один раз. Якщо ціни в категорії вказано в різних одиницях, лишаємо найчастішу (наприклад, за годину), щоб не змішувати ціну години з ціною всієї роботи."
        },
        "min": {
            "term": "Мінімум",
            "text": "Категорія потрапляє в таблицю, коли за місяць у ній щонайменше 5 цін. Якщо цін менше, категорію не показуємо: з кількох цін діапазон виходить випадковим. Тому список категорій змінюється від місяця до місяця."
        },
        "kind": {
            "term": "Товари і послуги",
            "text": "Товари групуємо за моделлю, бо ціну товару визначає модель: дві пральні машини різних моделей коштують по-різному навіть в одній категорії. Послуги групуємо за одиницею обсягу, бо моделі в послуги немає, а ціна залежить від того, скільки роботи: година, заняття, квадратний метр, виїзд. Одиницю беремо з самої ціни або з назви на сайті виконавця («за годину», «1 заняття»); якщо одиниці там немає, це ціна за послугу загалом, і ми її не домислюємо. Ціни за різні одиниці не змішуємо: година репетитора й курс занять, виїзд майстра й уся робота відрізняються в рази, тож спільна медіана не описувала б жодну з них. Одиниці послуги в таблиці досить 3 ціни. Чи категорія товарна, чи це послуга, визначаємо один раз для країни: за тим, як BlaBlaPrice розпізнав запити покупців у цій категорії, за цінами за годину, за назвою категорії і за її розділом у каталозі."
        },
        "model": {
            "term": "Моделі",
            "text": "Модель беремо з назви товару на сайті магазину. Бренд має бути названий у назві (або це лінійка лише одного бренду: iPhone і iPad у Apple, Galaxy у Samsung, Redmi і Poco у Xiaomi), модель це назва і код одразу після бренду. Колір, рік, діагональ екрана, «Original», «Новинка», emoji, регіональні позначки (UA, EU, Global) і одиниці відкидаємо, обсяг пам’яті (128GB, 8/256GB) і розмір шини лишаємо, бо від них залежить ціна. Вживані й відновлені товари (б/в, refurbished, «хороший стан») рахуємо окремою моделлю. Модель показуємо, коли на неї є 3 ціни або більше: медіана з однієї-двох цін випадкова, а з трьох уже видно, де лежить ціна. Якщо модель збігається з карткою каталогу BlaBlaPrice, у JSON є її product_id; нових карток із назв магазинів не створюємо."
        },
        "others": {
            "term": "Інші",
            "text": "Ціна йде в «інші», коли модель з назви не визначається однозначно: немає відомого бренду («Пральні машини на 5 кг»), немає коду моделі («Tigar Winter»), є лише розмір («Xiaomi 32»), не вказано пам’ять, хоча інші магазини для тієї самої моделі її вказують («iPhone 14 Pro» поряд з «iPhone 14 Pro 256GB»), або цієї моделі за місяць поки замало (потрібно 3 ціни). «Інші» ціни є в рядку всієї категорії, але не в моделях. Якщо в категорії такої моделі немає, показуємо лише діапазон категорії з поміткою «цін по моделях поки мало»."
        },
        "pct": {
            "term": "Перцентилі",
            "text": "25-й перцентиль (нижня межа): чверть знайдених цін нижча за нього. Медіана: половина цін нижча, половина вища. 75-й перцентиль (верхня межа): три чверті цін нижчі. Між нижньою і верхньою межею лежить середня половина цін, тому одна дуже дешева чи дуже дорога пропозиція діапазону не зсуває. Між сусідніми цінами значення інтерполюється лінійно."
        },
        "round": {
            "term": "Округлення",
            "text": "Значення округлено до двох значущих цифр (наприклад, 13 009 до 13 000), бо це діапазон ринку, а не ціна конкретного товару."
        },
        "cur": {
            "term": "Валюта",
            "text": "UAH. Ціни в інших валютах не перераховуємо і не враховуємо."
        },
        "upd": {
            "term": "Оновлення",
            "text": "Таблиця перераховується кожні 6 годин. Найновіша ціна в ній: 31 жовтня 2026 року. Розраховано 31 жовтня 2026 року."
        },
        "limits": {
            "term": "Обмеження",
            "text": "Це не всі продавці країни, а лише ті, кого пошук знайшов для запитів на BlaBlaPrice, тому набір категорій відбиває те, що шукали покупці. Ціни такі, як їх показав сайт продавця: доставка, встановлення, персональні знижки й торг зазвичай не враховані. В одній категорії змішано різні моделі й обсяги робіт. Окремий рядок може спиратися на один-два запити (поле requests у JSON і CSV). Індекс не є пропозицією BlaBlaPrice: ми самі товарів і послуг не продаємо."
        }
    },
    "count": 1,
    "models_count": 0,
    "units_count": 0,
    "kinds": {
        "goods": 1,
        "service": 0
    },
    "note": null,
    "rows": [
        {
            "country": "ua",
            "lang": "uk",
            "month": "2026-10",
            "category_slug": "pylososy",
            "category_name": "Пилососи",
            "p25": 3800,
            "median": 3900,
            "p75": 4200,
            "currency": "UAH",
            "samples": 9,
            "updated_at": "2026-10-22T11:13:29Z",
            "unit": "",
            "shops": 9,
            "requests": 1,
            "level": "category",
            "model": null,
            "brand": null,
            "model_key": null,
            "model_samples": null,
            "model_shops": null,
            "used": null,
            "product_id": null,
            "kind": "goods",
            "unit_code": null,
            "variant": null,
            "unit_samples": null,
            "unit_shops": null,
            "category_id": 786,
            "category_url": "https://blablaprice.com/ua/pylososy",
            "models": [],
            "models_count": 0,
            "units": [],
            "units_count": 0,
            "other_samples": 9,
            "models_note": "Цін по моделях поки мало: моделі потрібно 3 ціни, а жодна стільки ще не набрала. Нижче діапазон по всій категорії.",
            "units_note": null
        }
    ],
    "category": "pylososy",
    "total_count": 0,
    "pagination": {
        "page": 1,
        "per_page": 50,
        "pages": 1,
        "total": 0,
        "of": "models",
        "prev": null,
        "next": null
    },
    "query_parameters": {
        "m": "YYYY-MM, an earlier month",
        "category": "category_slug: that category only, its models or units paged",
        "page": "page number from 1, 50 rows a page (categories, or the category's models or units)"
    }
}