Oil and gas production per operator and field (ANP)
The oil and natural gas production that operators report to ANP, well by well, summed per operator and per field and stored month by month, with our own calculations declared. The page is /petroleo; the JSON/CSV route is /petroleo/producao.
Why it lives in the Macro section
Every company figure in this database is recomputable from the CVM filing. Production an operator reports to the
regulator is not: it is regulatory data that nobody rebuilds from a public company filing. We accept the official source's
number or we do not use it. So it has its own table (anp_producao) and sits in the Macro section, with the source and
the licence written on every page and in every response.
The source, the licence and the use agreement
- Source: ANP open data, dataset Oil and Natural Gas Production per Well (origin: SIGEP, Technical Data Superintendence). Address: https://www.gov.br/anp/pt-br/centrais-de-conteudo/dados-abertos/producao-de-petroleo-e-gas-natural-por-poco. To link an operator to a tax ID, the dataset List of concessionaires: https://www.gov.br/anp/pt-br/centrais-de-conteudo/dados-abertos/relacao-de-concessionarios.
- Licence declared by ANP: the footer of the ANP site and of the dataset pages says Creative Commons Attribution-NoDerivatives 3.0 Unported (CC BY-ND 3.0), checked on 2026-11-01: https://creativecommons.org/licenses/by-nd/3.0/deed.en. It is not CC BY: the NoDerivatives clause is the point. The dataset metadata (ANP PDF) declares no licence at all, and the dataset record on dados.gov.br could not be read (the API requires a key); the only declaration we read is the footer's.
- Use agreement: on 2026-11-01 the project owner (Dr. Valth) said in chat that the use of this data has already been agreed with ANP. It is recorded here, in the code, on the page, in the JSON and in the methodology as "the use was agreed with ANP (reported by the project owner on 2026-11-01)". We do not hold the agreement document; the statement is the owner's.
- Required attribution: author (ANP, National Agency for Petroleum, Natural Gas and Biofuels), dataset link and licence link, on every page and every data response.
- What we do not do: we do not republish the raw files (neither the .zip nor the per-well CSV). We show numbers per operator, field and month, with the source and the link, and we declare which ones are our own calculations.
What ANP publishes and what we read
One .zip per month with three CSV files: onshore, offshore and pre-salt. The pre-salt is a subset of offshore (wells inside the pre-salt polygon) and is never added again: it becomes the "pre-salt" column. One row per well and month: state, basin, field, operator (trade name), contract number, period (YYYY/MM), oil, condensate, petroleum (= oil + condensate) in bbl/day, associated, non-associated and total natural gas in Mm³/day (Mm³ = 1,000 m³).
These are daily average rates of the month, not the month's volume. Data comes with a lag: January's production is released in March (as ANP's metadata explains).
The files from 2021 to March 2023 have a different header (the same first 14 columns in the same order); we read by position, after checking the header. Anything that does not match what was checked (header, period inside the file, unreadable or negative number, pre-salt outside offshore) rejects the whole month.
What the source does NOT have (and drives the design)
- There is no operator tax ID, only the name. The tax ID comes from ANP's List of concessionaires, by contract number, on the row marked "(Operador)". Because the list is today's and the production is months old, and fields change hands (Petrobras sold fields to 3R, for example), the tax ID only counts if the operator name in the production equals the contract operator's current name. Different: no tax ID.
- There are no monthly files from 2024 on. The monthly files stop at December 2023. ANP's page sends you to a public query (cdp.anp.gov.br) behind a CAPTCHA for "2024 onward"; a CAPTCHA is not automated (this project never bypasses one). What covers 2024 onward is in the next section.
From 2024 on: the Bulletin and the manual export
Two complementary sources, always labelled on the page and in the JSON (fonte and escopo):
- ANP's Monthly Oil and Natural Gas Production Bulletin (PDF, no CAPTCHA, same site, same licence footer): the table
"Oil and natural gas production by operator" lists every operator, in bbl/d and Mm³/d (the same daily average
rate). We read the 32 PDFs from 2024-01 to 2026-08 (no. 192). Checked: the sum of operators in each of the 32 months
matches ANP's own official total by state (
producao-petroleo-m3.csv) within 0.08%. The Bulletin has no field list (only a chart of the top 20 and the pre-salt fields) and no wells: from 2024 on, the Bulletin gives operators, not fields. The name SHELL BRASIL appears twice in the same table; it is one operator and we sum. Only months after the last month of the official monthly file (per well) enter; the official file is never overwritten. The operator's tax ID comes from the name in ANP's list of concessionaires, only when that name belongs to a single operator in the list. - Manual export of the public query (the owner solves the CAPTCHA and saves one CSV per month and environment, named
YYYY_MM_producao_Mar.csv,..._Terra.csv,..._PreSal.csv, inDADOS_DIR/anp_manualor theANP_MANUAL_DIRfolder). The CSV has the same columns as the monthly file and is read by the same parser; the environment comes from the file name. The system downloads nothing from the query. Rules: a month the official file already has stays official (a difference above 0.5% becomes a warning); the same month and environment in two files counts once (different contents warn and the newest wins); the pre-salt is a subset of Mar (if not, the month is rejected); without the pre-salt file the pre-salt share is unknown (null), not zero; a month with Mar only is stored and labelledsomente_mar: no ranking adds Mar to a Terra that does not exist, and the 12-month change is only computed between months of the same scope (complete against complete, Mar only against Mar only). The page lists, by month and environment, what exists and what is missing. - Which source ranks a month's operators: the per-well file if it has Mar and Terra; else the Bulletin, if it has the month; else the partial per-well file (labelled). Fields exist only in the per-well file.
Checked on 2026-11-01 (Mar + Terra of the per-well file against the August 2026 Bulletin): total 4,613,617.6 against 4,614,856.7 bbl/day (−0.03%); Prio Tigris 96,874.05, Equinor Brasil 114,154.59, Eneva 290.20 and Brava 31,218.01 bbl/day equal; Petrobras 4,023,736 against 4,019,651 (+0.10%). January 2024, Mar: Tupi adds up to 751,310.5 bbl/day in Mar only.
Our own calculations
- Sum per operator, field and month (the sum of the wells' daily rates is the operator's or field's daily rate).
- Share = the operator's (or field's) oil ÷ national oil of the month, in %.
- Change over 12 months = the month's oil against the same month a year earlier, in %; no change when the operator's name changed between the two years.
- Pre-salt share = pre-salt oil ÷ national oil, in %.
- Million m³ per day (in the cards) = Mm³/day ÷ 1,000.
We do not convert the rate into monthly volume: the average daily rate × days of the month matches the official total per state offshore (within 0.11% over 36 months), but is 0.3% to 3.8% below onshore (intermittent wells), so we do not present it as volume.
Link with B3 companies
The ticker field is only filled when the operator's full tax ID (ANP's list, name checked) is the one of a company
with a ticker in this database. An SPE or consortium operator (Prio Forte, Prio Bravo, 3R Potiguar...) has its own tax ID,
which is not the listed company's, and does not link. No economic group is deduced from a name or from the tax ID root.
How we check against ANP
- Total per environment, 36 months: the sum of the wells (rate × days of the month, in m³) against ANP's own official
file of production by state and location (
producao-petroleo-m3.csv): offshore within 0.11% in every month; onshore 0.3% to 3.8% below. - December 2023 against ANP's Monthly Production Bulletin no. 160: field Tupi, 804,444 bbl/day and 40,009 Mm³/day (equal); operator Eneva, 292 bbl/day and 3,997.16 Mm³/day (equal); operator Enauta Energia, 18,754 bbl/day and 128.75 Mm³/day (equal); the operator then called Equinor Brasil (Prio Tigris in today's file), 95,403 bbl/day and 225.17 Mm³/day (equal). Petrobras (3,131,746 against 3,122,382 in the Bulletin, +0.3%) and Petro Rio Jaguar (76,748 against 85,744) do not match: the per-well file we read carries an "update date" of 2025-11-26, that is, it was republished after the Bulletin; we attribute the difference to that revision, with no way to verify it.
How the collection works
- Every week (database rebuild): re-reads every month ANP's page links (from 2021-01). Every night: looks at the page (one request), downloads only the missing months and re-reads the last 3.
- Isolated failure, month by month. Source down, different header, a sum outside the plausible range (oil between 0.5 and 8 million bbl/day, gas between 20 thousand and 400 thousand Mm³/day): that month is not written and the history stays as it was. A re-read month replaces the previous one entirely (ANP revises). A from-scratch rebuild inherits from the previous database the months the source did not bring.
- In /saude, the
anpblock shows the latest month in the database, the latest month the source offers and the result of the last collection. It raises attention only if the source has a month newer than the database; the source stopped at 2023-12 shows as information (fonte_parada), not as an alarm.
What the page does NOT do
- It does not recommend a stock, a company or a moment. Production is not revenue: oil price, exchange rate, costs and each partner's share in a consortium are left out (the operator in the file sums the whole field, whatever its share).
- It does not hide what is missing: 2024 onward has partial coverage by environment (see above), and the page says which months are missing.
- It does not link an operator to a stock by name.
Access
- /petroleo — the page, open, in Portuguese and English.
/petroleo/producao— JSON (or?formato=csv). No parameter: the operators of the latest month;nivel=campo;periodo(YYYY-MM);cnpj,operadororcamporeturn the monthly series (withdeandate). Open, no key. Every response carries thefonte, the licence, the use agreement and thecitacao.- MCP connector tool:
producao_petroleo_gas.