Dev.to · 4 min read

An IDX/BEI financial panel: 4,408 company-years, 22 columns, and the caveats that matter

An IDX/BEI financial panel: 4,408 company-years, 22 columns, and the caveats that matter

Indonesian listed-company data is public. Analysis-ready it is not. The Indonesia Stock Exchange (IDX/BEI) publishes financial statistics for every listed issuer, and anyone can open the pages one by one. The friction starts when you need a panel: the same company across five years, with consistent ratios, in one table you can feed to R or Stata. That is a data-engineering problem disguised as a download. I built that panel: 4,408 company-year observations, 975 tickers, 11 IDX-IC sectors, 22 columns, 2021–2025. This post documents what broke, what I normalized, and what the numbers actually mean — including the parts that make the dataset weaker than a sales page would suggest. Five things that make IDX data awkward 1. Each yearly bucket is a snapshot, not a fiscal year. When you pull a year, you get whatever statement IDX had at collection time — predominantly the Q3 (30 September) report. The column fs_date is in the dataset for exactly this reason. If your research requires audited full-year figures, this panel is not a substitute. 2. Ratio scales were not stable. For 2021–2022 the source stores ROA, ROE, and NPM as decimals; from 2023 onward they are percentages. Mixing them silently produces averages that are wrong by two orders of magnitude. I normalized 2021–2022 ×100 and kept the flag in the codebook. Those two years remain preliminary: they have not been reconciled line by line against audited reports. 3. The panel is unbalanced. Coverage grows as more companies list: Year Observations 2021 769 2022 828 2023 906 2024 947 2025 958 That growth is real, not a bug. It also means naive year-over-year comparisons mix composition changes with performance changes. Fixed-effects models handle it; a simple mean by year does not. 4. Missing is not zero. An empty cell means IDX did not publish that figure. Filling it with 0 destroys every ratio built on it. The panel keeps nulls, and the codebook says so. 5. Valuation multiples move with the snapshot. per and pbv are trailing values that depend on the share price on collection day. They are useful as context, not as a clean time series. What is in the panel Each row is one company-year: Identity: kode_saham, nama_emiten, sektor, subsektor, tahun, fs_date, audit (U/A), sharia Profitability and leverage: roa_pct, roe_pct, der, npm_pct Per-share and valuation: eps_idr, book_value, pbv, per Size: assets_miliar_idr, liabilities_miliar_idr, equity_miliar_idr, sales_miliar_idr, profit_attr_owner_miliar_idr, firm_size_lnassets The 11 sectors follow IDX-IC: Financials, Energy, Basic Materials, Industrials, Consumer Non-Cyclicals, Consumer Cyclicals, Healthcare, Properties & Real Estate, Technology, Infrastructures, and Transportation & Logistic. Design choices I would defend Keep the source date and the audit flag. A panel without fs_date and audit invites the reader to assume audited December figures. Most rows are neither. Normalize loudly. The ×100 correction is documented in the codebook and repeated in the listing. A silent fix is worse than a visible caveat. Do not coerce missing values. null propagates honestly; 0 invents a fact. Separate portal-computed multiples from your own. pbv and per come from the source and will disagree at the edges with price / book value computed later. Label which is which. What it is good for — and what it is not Good for: panel regressions with firm and year effects, sector comparisons, teaching econometrics with real data, and quick descriptive work on Indonesian issuers. Not good for: audited full-year analysis, investment advice, event studies that need announcement dates, or market-wide estimates from a 25-row sample. A sample validates a schema; it cannot estimate a market. Inspect it first A free 25-row sample with all 22 columns is here — no signup: Sample CSV: https://fauzimatakupan.github.io/indonesian-financial-data/downloads/bei-panel-sample-2026-11-07.csv Repository and column notes: https://github.com/FauziMatakupan/indonesian-financial-data The sample uses 25 well-known tickers and the latest year, with values copied verbatim. If the schema fits your work, the full panel adds all 4,408 rows, a quarterly version (16,138 observations across 20 periods), per-sector files, a codebook, and runnable R/Stata/SPSS syntax. Disclosure: I assembled this dataset and sell the full version. The sample and the documentation above are free, and the limitations are the same in both.

This is a summary aggregated from Dev.to. Read the complete article on the original site:

Read full article at Dev.to

More Programming & Dev News