Reference
Methodology
Ratios such as P/E, ROE and EV/EBITDA are formulas applied to facts, and every data provider picks its own formula. This page lists, for every fundamentals field Bolsix returns, the CVM account it comes from or the formula that computes it.
Facts and formulas
Facts come from the official filers only. Financial statements come from CVM's DFP (annual) and ITR (quarterly) filings; prices, share counts and distributions come from B3. Each statement line is stored exactly as filed, with a link back to the filing. Ratios are computed by Bolsix with the formulas below. Where an accounting standard defines a figure, we follow it; where it doesn't, this page says which choice we made.
Money values are in BRL, as integers. Ratios and rates are decimal fractions: an ROE of 27.7% is returned as 0.277.
| Data | Source | Refreshed |
|---|---|---|
| Statements | CVM open data: DFP (annual) and ITR (quarterly) archives | Weekly |
| Price-based ratios | Market cap, P/E, P/B, P/S, EV/EBITDA and dividend yield, from the stored statements at the latest close | Every trading day |
| Prices | B3 COTAHIST official end-of-day quotes (not real-time) | Daily |
| Shares | B3 BVBG028 instrument file, per listed class | Daily |
| Distributions | B3 dividends, JCP and fund distributions; FII history older than B3's 12 months from each fund's structured notices on B3's FundosNet, from 2020 | Daily |
| Corporate actions | B3 listed-issuer events (splits, reverse splits, bonuses), with CVM FRE for pre-2024 history | Daily |
| Funds | CVM monthly structured report (informe mensal) for FIIs and Fiagros | Monthly |
Which filing
- Consolidated first. When a company files consolidated statements, those are used; that is how companies report their results. A company without subsidiaries files only individual (parent-only) statements, and those are used. Banks are the exception for shareholders' figures (see Banks).
- Latest version. Companies refile to correct a filing. Every version is kept and the latest is served.
- Point in time.
/v1/stocks/statements?as_of=YYYY-MM-DDreturns only what CVM had made available by that date, so backtests don't see the future. - Provenance. Every statement row carries the CVM filing id, a link to the filing on CVM's RAD system, the filing version, the date CVM made it available, and a hash of the archive it was read from.
Statement fields
Returned by /v1/stocks/statements. Codes are CVM's standard chart of accounts. Where a code varies between companies, the line is matched by the label CVM requires instead.
| Field | CVM account | Notes |
|---|---|---|
| revenue | 3.01 | Net revenue |
| gross_profit | 3.03 | |
| ebit | 3.05 | Result before financial result and taxes, as filed: CVM's LAJIR (Resolução CVM 156). Includes equity-method income and other operating income and expenses. |
| ebitda | 3.05 + D&A | CVM's LAJIDA: EBIT plus depreciation, amortization and depletion, read from the cash flow statement's lines under 6.01.01. An amortization line counts when it names an operating asset (right-of-use, intangibles, a business combination's fair-value step-up) and not when it names debt costs, goodwill, present-value unwinding, prepaid expenses or taxes. |
| net_income | 3.11 | Consolidated net income, including minority shareholders. Some banks file it at 3.09. |
| net_income_parent | 3.11.01 (label: Atribuído a Sócios da Empresa Controladora) | Attributable to the parent's shareholders. The code varies (3.11.01, 3.09.01, 3.13.01), so it is matched by label. Empty for individual-only filers, whose net income already is the parent's, and when the split is filed as 0 under a nonzero result: the share of a profit can't be nothing, so that 0 means the company left it unfilled. Where it's empty, the ratios below use net_income. |
| total_assets | 1 | |
| total_liabilities | 2.01 + 2.02 | Current plus non-current liabilities |
| equity | 2.03 (label: Patrimônio Líquido Consolidado) | Total equity, including minority shareholders. Matched by label because banks file it at other codes (2.07, 2.08). |
| minority_interest | 2.03.09 (label: Participação dos Acionistas Não Controladores) | The minority shareholders' share of equity. Matched by label (2.03.09, 2.07.02, 2.08.09). |
| cash | 1.01.01 | Cash and cash equivalents |
| short_term_investments | 1.01.02 | Short-term investments (Aplicações Financeiras). Empty for banks, which use the code for other lines. |
| total_debt | 2.01.04 + 2.02.01 | Loans, financing and debentures, including lease liabilities under IFRS 16 |
| operating_cf | 6.01 | |
| investing_cf | 6.02 | |
| financing_cf | 6.03 |
Periods
| period | Meaning |
|---|---|
| annual | The fiscal year, from the DFP. |
| quarterly | One discrete quarter. ITRs state some lines year-to-date, so a quarter is the year-to-date figure minus the previous quarter's. When the previous quarter isn't available, no value is published: a year-to-date figure is never labelled as a quarter. |
| ttm | The last twelve months. CVM has no fourth-quarter filing, so at a quarter end it is the last fiscal year, plus this year's quarters, minus the same quarters a year earlier; at a fiscal year end it is the year itself. If any quarter the sum needs is missing, no TTM is published for that date. |
On quarterly rows, flow-based ratios (P/E, P/S, EV/EBITDA, ROE, ROA, net debt/EBITDA) use the quarter's flows annualized ×4, as Brazilian quarterly releases do; margins and EPS are the quarter's own. To compare with other sources, use period=ttm.
Market data
| Field | Definition |
|---|---|
| price | The official close of the last B3 trading session, with its session_date. |
| shares | The company's ON and PN shares in B3's company registry, which includes classes that don't trade (Raízen's controllers hold 8.99bn unlisted ON shares beside 1.36bn listed PN). When no registry count is available, the listed classes' counts from B3's daily instrument file, counted once: units (such as SANB11 or KLBN11) bundle shares already counted in their ON and PN classes, and two preferred classes (PNA, PNB) carrying the same preferred total count it once. Treasury shares are not deducted. |
| market_cap | The sum over the company's share classes of each class's price × its shares. A company with ON and PN shares is valued at both prices, not at one ticker's price for all shares; a class that doesn't trade is valued at the listed class's price, and a company listed only through units at the unit's price per share. A preferred total shared by several classes is priced at the most-traded one. |
/v1/stocks/prices is split-adjusted by default (adjust=split): every bar before a split, reverse split or bonus is divided by the event's ratio, applied on the date the price actually re-based. adjust=total_return also reinvests dividends, JCP and returns of capital, and adjust=raw returns prices as traded.
Ratio fields
Returned by /v1/stocks/fundamentals. Price-dependent values (market cap, P/E, P/B, P/S, EV, dividend yield) are priced only on each series' latest period; older rows carry the ratios their statements support.
A unit ticker (KLBN11, TAEE11) is a bundle of the company's shares, and its price and dividends are per unit, so its eps and book_value are too: the per-share value times the shares in the unit, as the company states them in its CVM registration form (KLBN11: 1 ON + 4 PN, five). Both are empty for a unit whose composition CVM doesn't list. Ratios are the company's and read the same for every ticker.
| Field | Formula | Notes |
|---|---|---|
| eps | net_income_parent ÷ shares | Earnings per share on the parent's shareholders, as IAS 33 / CPC 41 define it. Per unit for a unit ticker (see below) |
| pe_ratio | market_cap ÷ net_income_parent | Negative when the company lost money: a real value, not an error |
| book_value | (equity − minority_interest) ÷ shares | Equity per share, owners' share. Per unit for a unit ticker (see below) |
| pb_ratio | market_cap ÷ (equity − minority_interest) | Empty when that equity is zero or negative |
| ps_ratio | market_cap ÷ revenue | |
| roe | net_income_parent ÷ (equity − minority_interest) | Period-end equity, not the average over the period |
| roa | net_income ÷ total_assets | Consolidated: every asset, every owner |
| net_margin | net_income ÷ revenue | Consolidated |
| gross_margin | gross_profit ÷ revenue | |
| net_debt | total_debt − cash − short_term_investments | Every liquid treasury is netted out |
| enterprise_value | market_cap + net_debt | |
| ev_ebitda | enterprise_value ÷ ebitda | |
| net_debt_ebitda | net_debt ÷ ebitda | Empty when EBITDA is zero or negative |
| dividend_yield | distributions in the last 365 days ÷ price | See below |
| roe_flag | Why roe is empty: unbalanced_balance_sheet or negative_equity |
- Unbalanced balance sheet. If assets differ from liabilities plus equity by more than 1% of assets, the equity line is not trusted: P/B, ROE and book value are left empty and
roe_flagisunbalanced_balance_sheet. - Negative or zero equity. P/B and ROE are left empty and
roe_flagisnegative_equity. Dividing a loss by negative equity would show a misleadingly positive ROE. - Failed accounting checks. Statement rows that fail an accounting identity check are held back for review, not served.
Banks
Banks file under a different chart of accounts, where the same codes mean different things: 3.05, for example, is pre-tax income, not EBIT. A filer is treated as a bank when its line 3.01 is financial intermediation revenue.
| Field | CVM account | Notes |
|---|---|---|
| intermediation_revenue | 3.01 | Replaces revenue |
| financial_margin | 3.03 | Replaces gross_profit |
| pretax_income | 3.05 | Replaces ebit |
| provision_expenses | label match | Expected credit losses (PDD). The code varies by bank, so lines are matched by label and summed without double-counting. |
For banks, revenue, gross_profit, ebit, ebitda and total_debt are empty: deposits and funding are a bank's raw material, not leverage. Enterprise value, EV/EBITDA and net debt/EBITDA are empty as a result.
A bank's shareholders' figures come from its individual (standalone) statements: net_income_parent is standalone net income, and EPS, P/E, P/B, ROE and book value use standalone equity. For other companies the standalone profit equals the consolidated parent's share, but banks' consolidated filings don't split that way: Banco do Brasil's Q2'26 consolidated parent's share is R$ 2.4 bn against R$ 3.2 bn standalone, which is the accounting profit the bank reports. net_income, equity, total assets and ROA stay consolidated. Banks' headline "recurring" or "adjusted" profit is a management figure not filed with CVM.
Dividend yield
- Counts cash dividends and JCP (juros sobre capital próprio) per share, as B3 announces them: JCP before the 15% withholding tax. Returns of capital are not counted: they hand back capital rather than pay income, though total-return prices reinvest them.
- The window is every distribution whose record date (data com) falls in the last 365 days, divided by the last price. Amounts paid before a split, reverse split or bonus are restated per today's share.
- A company that paid nothing in the window reads 0%. The yield is empty only while B3's distribution history for the company hasn't been fetched yet, as for a new listing.
- Dividends and JCP are listed separately in
/v1/stocks/dividends, since they are taxed differently.
Real-estate funds
FIIs and Fiagros don't file DFP or ITR. Their rows come from the monthly report each fund files with CVM, with period_type monthly.
| Field | Definition |
|---|---|
| book_value | Net asset value (NAV) per quota, from the report |
| pb_ratio | price ÷ NAV per quota (latest month) |
| market_cap | price × quotas (latest month) |
| dividend_yield | Income distributions in the last 365 days, per today's quota, ÷ price. Amortizations return capital and are not counted. |
Why numbers differ between sources
Most sites read the same CVM filings. They differ in the choices below, so a gap usually means a different choice rather than a wrong number.
| Choice | Bolsix | Common alternatives |
|---|---|---|
| Earnings period | TTM for comparisons; fiscal year and discrete quarters also available | Last fiscal year; one quarter annualized |
| Net income for EPS, P/E, ROE | Parent's shareholders (3.11.01) | Consolidated including minority shareholders (3.11) |
| Equity for P/B, ROE | Parent's shareholders, period-end | Total equity; average equity over the period |
| Market cap | Each share class at its own price | One ticker's price × all shares |
| Statements | Consolidated when filed; for banks' shareholders' figures, individual (standalone) | Individual (parent-only) throughout |
| EBIT | CVM 3.05 as filed (LAJIR, Resolução CVM 156) | Gross profit − selling and administrative expenses, which leaves out other operating income and expenses, impairment and equity-method income (Fundamentus) |
| Cash in net debt | Cash and equivalents plus short-term investments (1.01.01 + 1.01.02) | Cash and equivalents only |
| Price for ratios | Last official close | Live intraday price |
How we check our numbers
- Against the filings, exactly. Stored statement lines are reconciled against the CVM archives they came from, field by field, with zero tolerance. Any difference is a defect.
- Against other sources. For the largest listed companies, values are compared field by field with public reference sites. Gaps a documented choice explains are kept apart from gaps nothing explains; only the second kind is investigated, and CVM and B3 decide who is right. How that traffic is identified and limited is described on the accuracy page.
We don't publish a single accuracy percentage: that number depends entirely on which fields, periods and tolerances go into it. When we publish benchmark results, they will come with the full method.
Known limitations
- Treasury shares are not deducted from share counts, so EPS and book value per share are slightly understated for companies holding their own shares.
- For holding companies, EBIT and EBITDA include equity-method income from subsidiaries, because line 3.05 does.