{
    "schema_version": 4,
    "name": "Analisis pasaran: Malaysia, November 2026",
    "country": "my",
    "country_name": "Malaysia",
    "lang": "ms",
    "month": "2026-11",
    "period": {
        "from": "2026-11-01",
        "to": "2026-11-30"
    },
    "currency": "MYR",
    "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.",
        "4": "H-084: the price index is now the market analysis (the same addresses). New top-level field sellers: one entry a category with firms in our data (category_id, category_slug, category_name, category_url, has_prices, sellers_count, sellers: up to 10 of {name, city, url}); the registered sellers first, the rest alphabetical, not a rating; only public company data. With ?category= the entry of that category only. All earlier fields keep their names and meaning."
    },
    "updated_at": "2026-11-05T23:29:35Z",
    "generated_at": "2026-11-05T23:29:55Z",
    "refresh_hours": 6,
    "html": "https://blablaprice.com/my/ms/site/price-index/gifts-for-women",
    "csv": "https://blablaprice.com/my/ms/site/price-index.csv?category=gifts-for-women",
    "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": "Sumber",
            "text": "Harga di laman kedai dan penjual yang ditemui carian web BlaBlaPrice untuk permintaan pembeli di Malaysia, ditambah harga dalam tawaran penjual di BlaBlaPrice dan dalam senarai harga yang dimuat naik penjual. Akaun ujian tidak dikira. Sebulan sekali BlaBlaPrice juga mengumpul harga kedai dalam talian di negara ini."
        },
        "period": {
            "term": "Tempoh",
            "text": "Satu bulan kalendar: November 2026. Sesuatu harga tergolong dalam bulan carian menemuinya atau penjual menghantarnya. Bulan-bulan terdahulu dipautkan di bawah apabila ada data."
        },
        "filter": {
            "term": "Pemilihan",
            "text": "Hanya harga dalam MYR. Hasil carian yang tidak sepadan dengan permintaan (skor padanan di bawah 50 daripada 100, atau ditanda \"tidak sesuai\") dibuang. Harga yang sama pada halaman yang sama dikira sekali. Jika sesuatu kategori mempunyai harga dalam unit berbeza, unit yang paling kerap dikekalkan (contohnya setiap jam), supaya kadar sejam tidak bercampur dengan harga satu kerja penuh."
        },
        "min": {
            "term": "Minimum",
            "text": "Kategori masuk ke jadual apabila ia mempunyai sekurang-kurangnya 5 harga dalam bulan itu. Jika kurang, ia tidak dipaparkan kerana julat daripada beberapa harga sahaja bersifat rawak. Sebab itu senarai kategori berubah dari bulan ke bulan."
        },
        "kind": {
            "term": "Barangan dan perkhidmatan",
            "text": "Barangan dikumpulkan mengikut model, kerana model menentukan harga: dua mesin basuh daripada model berbeza berbeza harganya walaupun dalam satu kategori. Perkhidmatan dikumpulkan mengikut unit isi padu, kerana perkhidmatan tiada model dan harganya bergantung pada jumlah kerja: sejam, satu kelas, satu meter persegi, satu lawatan. Unit diambil daripada harga itu sendiri atau tajuk di laman web penyedia (\"sejam\", \"1 kelas\"); jika kedua-duanya tidak menyatakan unit, itu harga untuk perkhidmatan penuh dan kami tidak meneka unit. Harga dalam unit berbeza tidak dicampur: sejam tuisyen dan satu kursus penuh, caj lawatan dan seluruh kerja berbeza beberapa kali ganda, jadi satu median bersama tidak menggambarkan mana-mana pun. Satu unit perkhidmatan memerlukan 3 harga untuk masuk ke jadual. Sama ada kategori itu barangan atau perkhidmatan ditentukan sekali bagi setiap negara: daripada cara BlaBlaPrice membaca permintaan pembeli di dalamnya, harga sejam, nama kategori dan bahagiannya dalam katalog."
        },
        "model": {
            "term": "Model",
            "text": "Model diambil daripada nama produk di laman kedai. Nama itu mesti menyebut jenama (atau barisan produk yang dibuat oleh satu jenama sahaja: iPhone dan iPad oleh Apple, Galaxy oleh Samsung, Redmi dan Poco oleh Xiaomi); model ialah nama dan kod sejurus selepas jenama. Warna, tahun, saiz skrin, «Original», «Baharu», emoji, tanda wilayah (UA, EU, Global) dan unit dibuang; kapasiti memori (128GB, 8/256GB) dan saiz tayar dikekalkan kerana harga bergantung padanya. Barang terpakai dan diperbaharui (terpakai, refurbished) dikira sebagai model tersendiri. Model dipaparkan apabila ada 3 harga atau lebih: median satu atau dua harga hanyalah kebetulan, tiga sudah menunjukkan di mana harga terletak. Jika model sepadan dengan kad dalam katalog BlaBlaPrice, JSON memberikan product_id kad itu; kad baharu tidak dibuat daripada nama kedai."
        },
        "others": {
            "term": "Lain-lain",
            "text": "Harga masuk ke «lain-lain» apabila nama tidak menyebut satu model dengan jelas: tiada jenama yang dikenali («Mesin basuh 5 kg»), tiada kod model («Tigar Winter»), hanya ada saiz («Xiaomi 32»), tiada memori walaupun kedai lain menyebutnya untuk model yang sama («iPhone 14 Pro» di sebelah «iPhone 14 Pro 256GB»), atau model itu masih kurang harga dalam bulan tersebut (perlu 3 harga). Harga lain-lain ada dalam baris seluruh kategori, tetapi tidak dalam model. Jika kategori tiada model sedemikian, kami hanya memaparkan julatnya dengan nota «harga mengikut model masih sedikit»."
        },
        "pct": {
            "term": "Persentil",
            "text": "Persentil ke-25 (had bawah): suku daripada harga yang ditemui lebih rendah. Median: separuh lebih rendah, separuh lebih tinggi. Persentil ke-75 (had atas): tiga suku lebih rendah. Separuh tengah harga terletak di antara dua had itu, jadi satu tawaran yang sangat murah atau sangat mahal tidak menggerakkan julat. Nilai di antara harga bersebelahan diinterpolasi secara linear."
        },
        "round": {
            "term": "Pembundaran",
            "text": "Nilai dibundarkan kepada dua digit bererti (13,009 menjadi 13,000), kerana ini julat pasaran, bukan harga barang tertentu."
        },
        "cur": {
            "term": "Mata wang",
            "text": "MYR. Harga dalam mata wang lain tidak ditukar dan tidak dikira."
        },
        "upd": {
            "term": "Kemas kini",
            "text": "Jadual dikira semula setiap 6 jam. Harga terbaharu di dalamnya: 5 November 2026. Dikira pada 5 November 2026."
        },
        "limits": {
            "term": "Had",
            "text": "Ini bukan semua penjual di negara ini, hanya mereka yang ditemui carian untuk permintaan di BlaBlaPrice, jadi kategori mencerminkan apa yang dicari pembeli. Harga adalah seperti yang ditunjukkan laman penjual: penghantaran, pemasangan, diskaun peribadi dan tawar-menawar biasanya tidak termasuk. Satu kategori mencampurkan model dan saiz kerja yang berbeza. Satu baris mungkin bergantung pada satu atau dua permintaan sahaja (medan requests dalam JSON dan CSV). Indeks ini bukan tawaran daripada BlaBlaPrice: kami sendiri tidak menjual barang atau perkhidmatan."
        }
    },
    "count": 1,
    "models_count": 0,
    "units_count": 0,
    "kinds": {
        "goods": 1,
        "service": 0
    },
    "note": null,
    "rows": [
        {
            "country": "my",
            "lang": "ms",
            "month": "2026-11",
            "category_slug": "gifts-for-women",
            "category_name": "Hadiah untuk wanita",
            "p25": 48,
            "median": 68,
            "p75": 150,
            "currency": "MYR",
            "samples": 8,
            "updated_at": "2026-11-05T23:29:35Z",
            "unit": "",
            "shops": 8,
            "requests": 0,
            "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": 1139,
            "category_url": "https://blablaprice.com/my/ms/gifts-for-women",
            "models": [],
            "models_count": 0,
            "units": [],
            "units_count": 0,
            "other_samples": 8,
            "models_note": "Harga mengikut model masih sedikit: satu model perlu 3 harga, dan belum ada model yang mencapainya. Di bawah ialah julat seluruh kategori.",
            "units_note": null
        }
    ],
    "field_docs_sellers": {
        "name": "the firm's name (its own, or its site's name)",
        "city": "its town when known, else null",
        "url": "its own site (the home page), null for a seller registered on BlaBlaPrice without a confirmed site"
    },
    "sellers_categories": 1,
    "sellers": [
        {
            "category_id": 1139,
            "category_slug": "gifts-for-women",
            "category_name": "Hadiah untuk wanita",
            "category_url": "https://blablaprice.com/my/ms/gifts-for-women",
            "has_prices": true,
            "sellers_count": 8,
            "sellers": [
                {
                    "name": "bathandbodyworks",
                    "city": null,
                    "url": "https://bathandbodyworks.com.my/"
                },
                {
                    "name": "flowerchimp",
                    "city": null,
                    "url": "https://flowerchimp.my/"
                },
                {
                    "name": "lemusediscicli",
                    "city": null,
                    "url": "https://lemusediscicli.com/"
                },
                {
                    "name": "mangalfashions",
                    "city": null,
                    "url": "https://mangalfashions.com/"
                },
                {
                    "name": "sephora",
                    "city": null,
                    "url": "https://sephora.my/"
                },
                {
                    "name": "shop",
                    "city": null,
                    "url": "https://shop.com/"
                },
                {
                    "name": "thebodyshop",
                    "city": null,
                    "url": "https://thebodyshop.com.my/"
                },
                {
                    "name": "themez",
                    "city": null,
                    "url": "https://themez.com.my/"
                }
            ]
        }
    ],
    "category": "gifts-for-women",
    "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)"
    }
}