Electricity tariffs per distributor (ANEEL)
The residential electricity tariff of each distributor, kept as ANEEL approves it (TUSD and TE), with two calculations declared as ours: the total and the change against the previous adjustment. The page is /energia; the JSON/CSV route is /energia/tarifas.
Why it lives in the Macro section
Every company number in this database is recomputable from the CVM filing. The tariff a regulator approves for a
distributor is not: it is a regulatory act that nobody rebuilds from a company's public filing. You accept the
official figure or you do not use it. So it has its own table (energia_tarifa) and lives in the Macro section, with
the source and the licence written on every page and every response.
Source and licence
- Source: ANEEL open data portal, data set Tarifas de aplicação das distribuidoras de energia elétrica
(application tariffs of electricity distributors), resource
tarifas-homologadas-distribuidoras-energia-eletrica. Address: https://dadosabertos.aneel.gov.br/dataset/tarifas-distribuidoras-energia-eletrica. - Licence: the portal declares in the data set metadata (
license_id=odc-odbl, read from the CKAN API) ODbL 1.0 (Open Data Commons Open Database License), checked on 1 November 2026. It is the same as the Central Bank, CVM and the Treasury: free use, including commercial, citing ANEEL as the source and sharing the derived database on the same terms. Licence: https://opendatacommons.org/licenses/odbl/1-0/. - How we read it: through the portal's own
datastore_searchAPI, with the filter applied on ANEEL's server (one request of ~2.4 MB), instead of downloading the 179 MB CSV. - Coverage: periods from 3 February 2010 to 23 October 2026, 115 distributors, 4,215 raw rows in the cut (2,119 after joining duplicates).
The cut
Only: subgroup B1 (low voltage, residential), modality Convencional (conventional), class and subclass Residencial, base Tarifa de Aplicação (application tariff), no detail and no tariff period, unit R$/MWh. Left out: the White tariff, prepaid, Low Income, the commercial, industrial and rural classes and the "Base Econômica" (a different thing). Taxes (ICMS, PIS and COFINS) are not in the source: the value here is not the electricity bill.
What each column is
| Source field | What we keep |
|---|---|
| NumCNPJDistribuidora, SigAgente | the tax ID (14 digits) and the distributor abbreviation |
| DatInicioVigencia, DatFimVigencia | the dates of the period |
| VlrTUSD | R$/MWh, use of the distribution system |
| VlrTE | R$/MWh, energy |
| DscREH | only the number of the act (to break ties between revisions) |
The calculations that are ours
- Total = TUSD + TE.
- Change = total of the current period against the previous period of a different value, in %. ANEEL splits a period on 31 Dec and 1 Jan without changing the value (28 May 2025 to 31 Dec 2025 and 1 Jan 2026 to 27 May 2026 are the same adjustment); those pieces are joined before the calculation, otherwise almost every distributor would show zero at the start of the year.
- Median, minimum and maximum across the distributors with a tariff in force (end of period not before today).
Duplicates and conflicts
The source repeats identical rows; they collapse into one. In 5 historical cases (for example EMT on 15 July 2010) the same distributor and the same period start carry different values, because a later act revised the earlier one: the one from the higher act number is kept.
Link with B3 companies
The tariff belongs to the distributor; the listed company (CMIG, CPLE, EQTL...) is another legal entity with
another tax ID. Checked against the database on 1 November 2026: 11 distributor tax IDs match a CVM registration,
none of them a traded stock. So the ticker field is only filled when the full tax ID is the one of a
company with a ticker; otherwise it is null. No economic group is deduced from the name or from the tax ID root.
How the collection works
- Every week (database rebuild) and every night, the same single request.
- Failures are isolated. Source down, fields different from the checked ones, a truncated response (fewer records than the total the source announces) or a number outside the plausible range: the batch is not written and the history stays as it was. Nothing is deleted; a from-scratch rebuild inherits from the previous database what the source did not bring.
- Plausible range: TUSD and TE between 0 and R$ 3,000/MWh and total between R$ 100 and R$ 4,000/MWh (observed: about R$ 199 to R$ 1,570). Outside that it is a misreading, and the whole batch is refused.
- In /saude, the
energiablock shows the newest period start and the result of the last collection (alert after 75 days; the longest gap with no new period, from 2018 to 2026, was 50 days).
What the page does NOT do
- It does not recommend a stock, a distributor or a moment. It is the source figure and the definition of each column.
- It does not include taxes, tariff flags, other consumer classes, generation or transmission.
- It does not link a distributor to a stock by name.
Access
- /energia — the page, open, in Portuguese and English.
/energia/tarifas— JSON (or?formato=csv). With no parameter: the latest tariff of each distributor.cnpj(14 digits) returns every period of one, cut bydeandate. Open, no key. Every response carries thefonte, the licence and thecitacao.- MCP connector tool:
tarifas_energia.