Data dictionary

Data API · monthly dataset

32 fields per row — what every export and metrics response is made of.

Row grain

One row per product × platform × country × month. Monthly metrics (gmv_monthly*, sold_monthly, review_monthly) are that month's figures; stock and rating are the month-end snapshot, while price is the lowest price recorded during the month.

Money fields are in the market's local currency unless the name says _usd. A full export delivers the 32 fields below as Parquet or CSV; rank is added only to Top-N slices — estimate a pull →

Download a real sample — 100 rows, exactly as a Top-N export ships:Parquet (38 KB)CSV (63 KB)ID · Shopee · Facial Serum · 2026-05 · top-100 by GMV — all 32 fields plus rank. A full export ships the same 32 without it.
Product identity

What the row is about — stable identifiers plus display fields.

FieldTypeDescriptionNullableOrigin
product_idSTRINGThe listing's own ID on its platform, carried through unchanged from source. The primary key for joining every other field back to one specific listing.Noscraped
sku_nameSTRINGThe listing's title exactly as scraped, with no cleanup — good for a human eyeballing the row, but wording and casing vary listing to listing, so use sku_type_complete instead when matching or grouping products.Noscraped
sku_type_completeSTRINGStandardized product type, matched against a maintained reference dictionary rather than derived from the raw title — better for grouping identical products than sku_name. Shows a placeholder when no dictionary match is found.Nolabelled — Magpie's internal library
brandSTRINGBrand name, resolved by matching the listing's product/merchant identity against Magpie's brand reference data rather than read directly off the title. Shows the placeholder when no brand has been confirmed yet.Nolabelled — Magpie's internal library
imageSTRINGDirect URL to the listing's main product photo, as hosted by the platform — carried straight through from the raw scrape.Yesscraped
urlSTRINGCanonical listing URL on the platform.Noscraped
created_dateDATEDate the listing first appeared on the platform. (Shopee & Tokopedia only — not currently captured for Lazada, TikTok, or Blibli; empty for listings on those marketplaces.)Yesscraped
flag_GWPBOOLTrue when the listing is a gift-with-purchase / bundle freebie.Nolabelled
Classification

Where the row sits — market, platform, category tree, month.

FieldTypeDescriptionNullableOrigin
countrySTRINGMarket code: ID, TH, VN, SG, PH, MY. Sets the local currency of non-USD money fields.Noscraped
ecommerce_platformSTRINGMarketplace: Shopee, Lazada, Tiktok, Tokopedia, 'Tokopedia | Shop', Blibli.Noscraped
category_1STRINGTop-level category (e.g. Beauty & Personal Care).Nolabelled — Magpie's internal category
category_2STRINGSecond-level category (e.g. Skincare).Nolabelled — Magpie's internal category
category_3STRINGLeaf category (e.g. Facial Serum) — the export's atom grain.Nolabelled — Magpie's internal category
monthDATECalendar month representing the aggregation period. Identifies which month's daily/raw scrape records were rolled up to produce this row (e.g. sold_monthly = SUM of daily sold within the month).Nosystem
Pricing & discounts

Listed prices and realized (sold) averages. Local currency unless the field says USD.

FieldTypeDescriptionNullableOrigin
priceFLOAT64The lowest price recorded for the listing during the month, local currency — the cheapest price point observed, not a price taken specifically at month's end. Empty when the listing never displayed a price during the month (e.g. a pre-launch or 'coming soon' page); this shows up mostly on small, low-volume SKUs.Yesscraped
price_usdFLOAT64Price converted to USD using a fixed exchange rate per country, not a live daily rate — treat cross-market USD comparisons as directionally useful rather than accounting-precise. Empty whenever price is, for the same reason.Yesscraped
before_discount_priceFLOAT64Pre-discount reference price, calculated from the price and discount columns rather than scraped from the listing's strike-through label. Equals price when no discount applies.Yesderived — from price and discount
discountFLOAT64Listed discount as a fraction (0.70 = 70% off).Yesscraped
avg_price_soldFLOAT64Average realized selling price across the month's sales, local currency.Noderived — from gmv_monthly and sold_monthly
Sales & performance

The analysis metrics — what actually moved this month.

FieldTypeDescriptionNullableOrigin
sold_monthlyINT64Units sold in this month.Noscraped
gmv_monthlyFLOAT64GMV for this month, local currency (≈ units × realized price). Empty when the listing carried no price to value the units against (see price) — the same pre-launch / 'coming soon' small SKUs. An empty GMV means unknown, not zero: exclude those rows rather than summing them as 0.Yesscraped
gmv_monthly_usdFLOAT64GMV for this month in USD — the cross-market analysis metric. Empty whenever gmv_monthly is, for the same reason.Yesscraped
review_monthlyINT64Reviews received in this month.Yesscraped
ratingFLOAT64Listing's rating (0–5) at month end.Yesscraped
stockINT64Listing-level stock at month end.Yesscraped
Merchant

Who sells it and from where — official-store detection and regional cuts.

FieldTypeDescriptionNullableOrigin
merchant_idSTRINGPlatform's shop identifier.Noscraped
merchant_nameSTRINGShop display name.Noscraped
merchant_urlSTRINGShop URL on the platform.Yesscraped
merchant_badgeSTRINGPlatform badge, e.g. 'Shopee Mall', 'Star Seller' — official signal.Yesscraped
merchant_citiesSTRINGShop's city (as declared on the platform).Yeslabelled — Magpie's internal library
merchant_provinceSTRINGShop's province/state.Yeslabelled — Magpie's internal library
merchant_regionSTRINGCoarse region rollup (e.g. Jawa, Sumatera).Yeslabelled — Magpie's internal library
Top-N files only

Present only when you order a Top-N slice — a full export does not include this column.

FieldTypeDescriptionNullableOrigin
rankINT64Position within this category × platform × country × month, 1 = highest GMV. Computed when the Top-N slice is built, ordering by gmv_monthly_usd descending (ties broken by product_id), so rank 1..N is exactly the set you paid for. Ranks are per file — they restart at 1 for every category and month, and are not comparable across them.Noderived — from gmv_monthly_usd ordering

Top-N export files additionally carry a rank column (1 = highest GMV in the atom). Schema questions? The live source of truth is the API reference.