{
    "schema_version": 3,
    "name": "Индекс цен BlaBlaPrice, Казахстан: ноябрь 2026",
    "country": "kz",
    "country_name": "Казахстан",
    "lang": "ru",
    "month": "2026-11",
    "period": {
        "from": "2026-11-01",
        "to": "2026-11-30"
    },
    "currency": "KZT",
    "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-11-05T22:03:33Z",
    "generated_at": "2026-11-05T23:16:04Z",
    "refresh_hours": 6,
    "html": "https://blablaprice.com/kz/site/price-index/pirsing",
    "csv": "https://blablaprice.com/kz/site/price-index.csv?category=pirsing",
    "license": "https://creativecommons.org/licenses/by/4.0/",
    "creator": "BlaBlaPrice (EVERLOGIC LLC)",
    "months_available": [
        "2026-11"
    ],
    "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 и из прайсов, которые загрузили продавцы. Тестовые аккаунты не учитываются. Раз в месяц BlaBlaPrice также собирает цены интернет-магазинов страны."
        },
        "period": {
            "term": "Период",
            "text": "Один календарный месяц: ноябрь 2026. Цена относится к тому месяцу, когда её нашёл поиск или прислал продавец. Предыдущие месяцы доступны по ссылкам ниже, когда в них есть данные."
        },
        "filter": {
            "term": "Отбор",
            "text": "Берём только цены в KZT. Результаты поиска, которые не соответствуют запросу (оценка соответствия ниже 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": "KZT. Цены в других валютах не пересчитываем и не учитываем."
        },
        "upd": {
            "term": "Обновление",
            "text": "Таблица пересчитывается каждые 6 часов. Самая новая цена в ней: 5 ноября 2026 года. Рассчитано 5 ноября 2026 года."
        },
        "limits": {
            "term": "Ограничения",
            "text": "Это не все продавцы страны, а только те, кого поиск нашёл для запросов на BlaBlaPrice, поэтому набор категорий отражает то, что искали покупатели. Цены такие, как их показал сайт продавца: доставка, установка, персональные скидки и торг обычно не учтены. В одной категории смешаны разные модели и объёмы работ. Отдельная строка может опираться на один-два запроса (поле requests в JSON и CSV). Индекс не является предложением BlaBlaPrice: мы сами товары и услуги не продаём."
        }
    },
    "count": 1,
    "models_count": 0,
    "units_count": 1,
    "kinds": {
        "goods": 0,
        "service": 1
    },
    "note": null,
    "rows": [
        {
            "country": "kz",
            "lang": "ru",
            "month": "2026-11",
            "category_slug": "pirsing",
            "category_name": "Пирсинг",
            "p25": 11000,
            "median": 12000,
            "p75": 14000,
            "currency": "KZT",
            "samples": 3,
            "updated_at": "2026-11-05T22:03:33Z",
            "unit": "",
            "shops": 3,
            "requests": 0,
            "level": "category",
            "model": null,
            "brand": null,
            "model_key": null,
            "model_samples": null,
            "model_shops": null,
            "used": null,
            "product_id": null,
            "kind": "service",
            "unit_code": "service",
            "variant": null,
            "unit_samples": 3,
            "unit_shops": 3,
            "category_id": 1405,
            "category_url": "https://blablaprice.com/kz/pirsing",
            "models": [],
            "models_count": 0,
            "unit_label": "за услугу",
            "units": [
                {
                    "country": "kz",
                    "lang": "ru",
                    "month": "2026-11",
                    "category_slug": "pirsing",
                    "category_name": "Пирсинг",
                    "p25": 11000,
                    "median": 12000,
                    "p75": 14000,
                    "currency": "KZT",
                    "samples": 3,
                    "updated_at": "2026-11-05T22:03:33Z",
                    "unit": "service",
                    "shops": 3,
                    "requests": 0,
                    "level": "unit",
                    "model": null,
                    "brand": null,
                    "model_key": null,
                    "model_samples": null,
                    "model_shops": null,
                    "used": null,
                    "product_id": null,
                    "kind": "service",
                    "unit_code": "service",
                    "variant": null,
                    "unit_samples": 3,
                    "unit_shops": 3,
                    "category_id": 1405,
                    "category_url": "https://blablaprice.com/kz/pirsing",
                    "unit_label": "за услугу",
                    "variants": {},
                    "variant_label": null,
                    "label": "Пирсинг: цена за услугу"
                }
            ],
            "units_count": 1,
            "other_samples": 0,
            "models_note": null,
            "units_note": null
        }
    ],
    "category": "pirsing",
    "total_count": 1,
    "pagination": {
        "page": 1,
        "per_page": 50,
        "pages": 1,
        "total": 1,
        "of": "units",
        "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)"
    }
}