oneapi
Sign in
Financiar v1 / Inflatie

The economy of local units, by county

Turnover, gross investment, net investment and staff of the active local units — by activity, size class and county, annually since 1998. 161,938 values, on two classifications requested separately through versiune: rev2 (2008–2024) and rev1 (1998–2008).

It brings what /financiar/v1/intreprinderi/indicatori lacks, being national: the county. There you get fourteen indicators on detailed NACE, but only nationwide; here you get four measures, on coarse NACE, but taken down to the county.

All four are totals, so they are additive — unlike the earnings in /financiar/v1/salariati, which is an average. Gross and net investment are different quantities, not variants of the same one: in 2020, nationwide, 146,604 million lei gross against 95,646 net.

⚠️ Territorial coverage widens in 2002: the years 1998–2001 have only 13 territories — four macro-regions, eight regions and the total, with no county at all.

⚠️ Rev. 1 monetary values up to 2004 are published in billions of ROL and brought here to millions of RON (factor 0.1); the publicat block keeps the raw value.

⚠️ The size class identity is checked with a tolerance, not with strict equality. The source publishes millions of lei rounded to the unit, and the sum of four rounded values can deviate from the rounded total. Measured on turnover: total = the sum of the four classes comes out exact in 2,501 of 3,354 cells, but all 3,354 sit under 2 million lei of difference, and 2,880 under a thousandth of a percent. The tolerance is derived from the published precision, not chosen; on staff, which is in whole persons, the check stays exact.

⚠️ The NACE dimension is not a clean partition. It mixes three divisions split out of agriculture (01, 02, 03), eleven sections, a pair merged by the source (R+S), two aggregates written out in words and the total. Codes from different levels are not additive; nivel separates them, and the complete list is at /financiar/v1/unitati-locale/activitati.

GET
https://oneapi.ro/api/financiar/v1/unitati-locale

Query parameters

NameTypeDescriptionAccepted values
versiuneoptional string | null Optional: rev2 (default, 2008-2024) or rev1 (1998-2008). rev1rev2
masuraoptional string | null Optional: cifra_afaceri (default), investitii_brute, investitii_nete, personal. investitii is an alias for investitii_brute. personalcifra_afaceriinvestitii_bruteinvestitii_neteinvestitii
niveloptional string | null Optional: total, agregat, sectiune, sectiuni_comasate, diviziune. totalagregatsectiunesectiuni_comasatediviziune
teritoriuoptional string | null Optional, the exact name — a county, a region, a macroregion or TOTAL. max 80 car.
nivel_teritoriuoptional string | null Optional: tara (default), macroregiune, regiune, judet. taramacroregiuneregiunejudet
de_laoptional integer | null Optional, a year, from 2008. 1998 – 2100
pana_laoptional integer | null Optional, a year. 1998 – 2100
caenoptional string | null Optional: any CAEN code — section (C), division (62), group, class (6201) — from any revision. It is brought to what versiune publishes: the section, divisions 01–03 (Rev.2, 2008–2012), the R+S pair, the imobiliare_si_servicii_firme aggregate (L+M+N) or, in Rev.1, the divisions the source names (01 agriculture, 02 forestry, 60–63 transport, 64 post). Default industrie_comert_servicii on Rev.2 and total on Rev.1; what was used is in meta.caen. e.g. 7022
caen_versiuneoptional string | null Optional: the revision of the caen code — 1, 2 or 3 — when its form is ambiguous (4932 means different things in Rev.2 and Rev.3). Without it, the code is looked up in the series revision first. 123
grupareoptional string | null Optional: the source aggregates that are not CAEN codes — total, industrie, industrie_comert_servicii, imobiliare_si_servicii_firme, R+S, alte_activitati, transport_depozitare. Not sent together with caen. e.g. imobiliare_si_servicii_firmee.g. industrie_comert_serviciie.g. R+S
marimelistoptional text Optional: total (default), 0-9, 10-49, 50-249, 250+. total0-910-4950-249250+

How it behaves

  • Turnover, gross investment in tangible goods, net investment and the staff of active local units — by activity, size class and county, annually from 1998 to 2024. 161,938 values from TEMPO matrices INT102C/D, INT104C/D and INT105B/C/D/E.
  • Two classifications, requested separately through versiune: rev2 (the default) covers 2008-2024, rev1 covers 1998-2008. They overlap in 2008 and the join actually validates: staff nationwide comes out at 4,654,718 under both, with zero deviation; turnover at 958,923 against 959,414 (0.05%). The suprapunere block carries the comparison on every request.
  • ⚠️ investitii_nete is a new measure that was missing from the module entirely. The route held a single investment measure, the gross one. The difference is large: in 2020, nationwide, 146,604 million lei gross against 95,646 net. The old name investitii remains accepted as an alias for investitii_brute.
  • It brings what /financiar/v1/intreprinderi/indicatori lacks: the county. That route holds fourteen indicators on detailed CAEN, but only nationally; this one holds four measures on coarse CAEN, but down to county level.
  • What the data shows: in 2024 the turnover of local units is 2,694,851 million lei, of which Bucharest alone accounts for 790,197 — 29% of the economy. Next come Ilfov (190,141), Cluj (128,414), Timiş (125,482) and Prahova (116,619).
  • All four measures are totals and therefore add up — unlike the earnings in /financiar/v1/salariati, which are averages.
  • ⚠️ Territorial coverage widens in 2002. The years 1998-2001 hold only 13 territories — four macroregions, eight regions and the total, with no counties at all; from 2002 there are 55. The sections grow too: 17 in 1998-2001, 18 in 2002, 19 from 2003.
  • ⚠️ The activity default is reversed between the classifications. Under Rev.2, total stops in 2012 and the industrie_comert_servicii aggregate covers the whole series; under Rev.1 it is the other way round — the aggregate, like section I, appears only from 2003, while total is the single code published across all eleven years. The route picks the default that fits the version, so a request without caen never comes back empty.
  • ⚠️ The 2005 denomination, under Rev.1 — but here the source declares it correctly, in the dimension name itself: “Billion lei” up to 2004, “Million lei RON” from 2005. Earlier years are brought to million lei RON with a factor of 0.1, and the publicat block keeps the raw value. Unlike /financiar/v1/intreprinderi/rezultate, where the source label lagged behind.
  • ⚠️ The size-class identity is checked with a tolerance, not with strict equality. The source publishes millions of lei rounded to the unit, and the sum of four rounded values can drift from the rounded total. Measured on turnover: total = the sum of the four classes comes out exact in 2,501 of 3,354 cells, but all 3,354 stay under 2 million lei apart, and 2,880 under a thousandth of a percent. The tolerance is derived from the published precision, not chosen. On personal, which is in whole persons, the check stays exact — zero tolerance.
  • ⚠️ The nomenclature changes in 2013. The total code and the three divisions split out of agriculture (01, 02, 03) are published only between 2008 and 2012; from 2013 the source drops them. The aggregate covering the whole series is industrie_comert_servicii, and it is the route's default — otherwise a request without caen would come back empty for recent years. A request for total after 2012 gets interval_gol with the explanation.
  • ⚠️ The CAEN dimension is not a clean partition. It mixes three agricultural divisions, eleven sections, a source-merged pair (R+S) and two aggregates whose names run past two hundred characters, to which we gave short codes. Codes of different levels do not add together; nivel keeps them apart.
  • Activity is requested the same way across the platform. caen takes any CAEN code, at any level and from any revision, and the route brings it to what the series publishes — climbing to a parent or translating it through the official INS correspondence; meta.caen states the requested code, the one used and whether it was climbed or converted. grupare is for the source aggregates that are not CAEN codes.

What it is for

  • How much a county weighs economically, in turnover and in investment.
  • The size-class structure of a sector within a given county.
  • Gross investment as a growth signal, alongside building permits.

Response structure

FieldTypeDescription
data.masura string The measure reported — what the value actually counts or sums.
data.denumire string The name, exactly as the source publishes it.
data.unitate string The unit of the values. Read it before plotting or adding them up.
data.versiune string Version of the dataset or artefact the values come from.
data.de_la integer Start of the interval the response covers.
data.pana_la integer End of the interval the response covers, inclusive.
data.filtre.versiune string Version of the dataset or artefact the values come from.
data.filtre.caen string The CAEN (NACE) code of the activity, in the series revision.
data.filtre.marime array Size class used by the source.
data.filtre.nivel_teritoriu string Territorial level of the value (country, region, county, locality).
data.ani array Years for which values exist.
data.serii[].teritoriu string The territory the value refers to.
data.serii[].nivel_teritoriu string Territorial level of the value (country, region, county, locality).
data.serii[].versiune string Version of the dataset or artefact the values come from.
data.serii[].caen string The CAEN (NACE) code of the activity, in the series revision.
data.serii[].nivel string total, agregat, sectiune, sectiuni_comasate or diviziune.
data.serii[].denumire string The exact source name, including for the long aggregates.
data.serii[].marime string Size class used by the source.
data.serii[].unitate string Unit of measure of the values. Read it before plotting or summing them.
data.serii[].ani_publicati integer Years the source actually published for this series.
data.serii[].valori object The values of the series, by period.
data.identitati.identitate string The identity being checked — which sum must equal which total.
data.identitati.toleranta string How far the sum of classes may drift from the total: 2 million for money (0.25 on the Rev.1 years converted from ROL, where the step falls to 0.1) and zero for persons.
data.identitati.nota_toleranta string Where the tolerance comes from and why it is not zero.
data.identitati.verificari integer How many combinations were checked.
data.identitati.inchise integer How many checks closed within tolerance.
data.suprapunere object The year 2008, published under both classifications, nationwide: the values side by side and the deviation.
data.suprapunere.an integer The year the value refers to.
data.suprapunere.caen string The CAEN (NACE) code of the activity, in the series revision.
data.suprapunere.marime string Size class used by the source.
data.suprapunere.rev1 string Values on the first revision of the classification.
data.suprapunere.rev2 string Values on the second revision of the classification.
data.suprapunere.abatere string The measured difference between the two quantities compared.
data.suprapunere.nota string A note on how to read the data — a pitfall, a convention or a limit of the source.
meta.sursa string The official source the data comes from, with its licence where one is required.
meta.versiune string Version of the dataset or artefact the values come from.
meta.acoperire.de_la integer The first period we have data for.
meta.acoperire.pana_la integer The last period we have data for.
meta.serii_returnate integer How many series were actually returned, after filters and the cell ceiling.
meta.nota_versiune string A note on how to read the response: a caveat, a convention or a limit of the source.
meta.nota_judet string What to know about the county breakdown: what it covers and what stays unattributed.
meta.nota_investitii string A note on how to read the response: a caveat, a convention or a limit of the source.
meta.nota_toleranta string Where the tolerance comes from and why it is not zero.
meta.nota_caen string A note on how to read the response: a caveat, a convention or a limit of the source.
meta.nota_activitati string A note on how to read the response: a caveat, a convention or a limit of the source.
data.serii[].publicat Present only for Rev.1 years up to 2004: the raw value in billion ROL and the factor applied.
data.identitati.exacte How many cells close to the unit, out of those within tolerance.
meta.fara_date data is null and this says why. The projection over the INS data is empty. The name does not appear; the full list comes back. The window holds no values; if a code was dropped in 2013, the message says so. The window lies entirely outside the series.
meta.fara_date_cod The short, STABLE word for the reason, for clients that branch on it in code: fara_date is prose and may be rephrased, this is not.
meta.caen object How the caen parameter was understood: the requested code, the revision it was read in and the code the route used. For a list of codes, one object per code.
meta.caen.cerut string The CAEN code sent, normalised (upper case, no dots).
meta.caen.versiune_cerut string The revision the code sent was read in: the one in caen_versiune, otherwise the first it exists in.
meta.caen.folosit string The code the series used: the requested one, its first published parent or the source aggregate that contains it (02-03).
meta.caen.cod string The CAEN code the key used stands for, when the series names its activities differently (agricultura = 01) or the key is an aggregate (62-63).
meta.caen.nivel string The level of the code used — on company routes, of the requested code: sectiune, subsectiune, diviziune, grupa, clasa or agregat.
meta.caen.denumire string The name of the code, from the CAEN nomenclature.
meta.caen.versiune_serie string The CAEN revision the series is published in.
meta.caen.conversie boolean true when the code was translated from one revision to another through the official INS correspondence.
meta.caen.urcat boolean true when the series does not publish the requested code and a higher level was used.

Response examples

GEThttps://oneapi.ro/api/financiar/v1/unitati-locale?per_pagina=3
{
    "data": {
        "masura": "cifra_afaceri",
        "denumire": "Cifra de afaceri din unităţile locale active",
        "unitate": "milioane lei",
        "versiune": "rev2",
        "de_la": 2008,
        "pana_la": 2024,
        "filtre": {
            "versiune": "rev2",
            "caen": "industrie_comert_servicii",
            "marime": [
                "total"
            ],
            "nivel_teritoriu": "tara"
        },
        "ani": [
            2008,
            2009,
            2010,
            2011,
            2012,
            2013,
            2014,
            2015,
            2016,
            2017,
            2018,
            2019,
            2020,
            2021,
            2022,
            2023,
            2024
        ],
        "serii": [
            {
                "teritoriu": "TOTAL",
                "nivel_teritoriu": "tara",
                "versiune": "rev2",
                "caen": "industrie_comert_servicii",
                "nivel": "agregat",
                "denumire": "Total industrie, constructii, comert si alte servicii",
                "marime": "total",
                "unitate": "milioane lei",
                "ani_publicati": 17,
                "valori": {
                    "2008": "959414",
                    "2009": "850834",
                    "2010": "903238",
                    "2011": "1007151",
                    "2012": "1062122",
                    "2013": "1054993",
                    "2014": "1105671",
                    "2015": "1177483",
                    "2016": "1232567",
                    "2017": "1352340",
                    "2018": "1522235",
                    "2019": "1667867",
                    "2020": "1642883",
                    "2021": "1983965",
                    "2022": "2487852",
                    "2023": "2583596",
                    "2024": "2694851"
                }
            }
        ],
        "identitati": {
            "identitate": "clasa `total` = suma celor patru clase de mărime",
            "toleranta": "2",
            "nota_toleranta": "Sursa publică milioane de lei rotunjite la unitate, iar suma a patru valori rotunjite poate devia de la totalul rotunjit. Toleranţa e derivată din precizia publicată — 2 milioane pe anii publicaţi direct în RON şi 0.25 pe anii Rev.1 convertiţi din miliarde ROL, unde pasul scade la 0,1. Măsurat pe cifra de afaceri Rev.2: exact în 2.501 din 3.354 de celule, dar toate 3.354 sub toleranţă, iar 2.880 sub o miime de procent.",
            "verificari": 0,
            "inchise": 0
        },
        "suprapunere": {
            "an": 2008,
            "caen": "industrie_comert_servicii",
            "marime": "total",
            "rev1": "958923",
            "rev2": "959414",
            "abatere": "491",
            "nota": "Anul 2008 e publicat în amândouă clasificările, pe total ţară. Raportat, nu cerut ca egalitate: cele două sunt reconstrucţii diferite ale aceluiaşi an, iar nomenclatoarele lor nu coincid."
        }
    },
    "meta": {
        "sursa": "Institutul Naţional de Statistică — personalul, cifra de afaceri şi investiţiile unităţilor locale active (TEMPO, matricile INT102C/D, INT104C/D şi INT105B/C/D/E).",
        "versiune": "rev2",
        "acoperire": {
            "de_la": 2008,
            "pana_la": 2024
        },
        "serii_returnate": 1,
        "nota_versiune": "Cererea acoperă o singură clasificare: `rev2` (implicit) merge 2008-2024, `rev1` merge 1998-2008. Se suprapun pe 2008 — vezi `data.suprapunere` — dar nomenclatoarele lor nu coincid cod cu cod.",
        "nota_judet": "E singura serie de indicatori economici ai firmelor care coboară la judeţ. Varianta naţională, cu paisprezece indicatori pe CAEN detaliat, e la /financiar/v1/intreprinderi/indicatori.",
        "nota_investitii": "Brute şi nete sunt mărimi diferite, nu variante: în 2020, pe total ţară, 146.604 milioane lei brute faţă de 95.646 nete. `investitii` rămâne acceptat ca alias pentru `investitii_brute`.",
        "nota_toleranta": "Sursa publică milioane de lei rotunjite la unitate, iar suma a patru valori rotunjite poate devia de la totalul rotunjit. Toleranţa e derivată din precizia publicată — 2 milioane pe anii publicaţi direct în RON şi 0.25 pe anii Rev.1 convertiţi din miliarde ROL, unde pasul scade la 0,1. Măsurat pe cifra de afaceri Rev.2: exact în 2.501 din 3.354 de celule, dar toate 3.354 sub toleranţă, iar 2.880 sub o miime de procent.",
        "nota_caen": "Dimensiunea CAEN amestecă diviziuni, secţiuni, o pereche comasată şi agregate. Codurile de niveluri diferite nu se adună între ele.",
        "nota_activitati": "Lista completă a codurilor, cu nivelul fiecăruia: /financiar/v1/unitati-locale/activitati."
    }
}

Error codes

CodeSlugWhen it occurs
401neautentificatToken missing, invalid, expired or revoked.
403feature_indisponibilThe current plan does not include the feature the route depends on.
404caen_nepublicatNeither the code nor its parents are published in the series; detalii.disponibile lists the keys. grupare_nepublicata — the grouping is not in the series; the response lists them.
422caen_inexistentThe code in caen exists in no CAEN revision; it is a bad FILTER value, hence 422, not 404. prea_multe_serii — beyond 1,500. interval_prea_lung — beyond 25 years on a narrow cut and beyond 8 when the response spans several. Plus a measure, level, class or code outside the expected form. caen and grupare sent together, caen_versiune without caen, or a code that is not CAEN-shaped. masura_in_alta_versiune — the measure does not exist there.
429cota_depasitaThe plan's monthly quota has been exceeded (see Retry-After).

All errors share the same shape. eroare.cod is stable and is the value you should branch on in code — not the text in mesaj, which may change.

{
    "eroare": {
        "cod": "caen_inexistent",
        "mesaj": "The code in caen exists in no CAEN revision; it is a bad FILTER value, hence 422, not 404. prea_multe_serii — beyond 1,500. interval_prea_lung — beyond 25 years on a narrow cut and beyond 8 when the response spans several. Plus a measure, level, class or code outside the expected form. caen and grupare sent together, caen_versiune without caen, or a code that is not CAEN-shaped. masura_in_alta_versiune — the measure does not exist there.",
        "detalii": {
            "versiune": [
                "The value sent does not satisfy the parameter rule."
            ]
        }
    }
}