# Romania grid daily summary (MonitorEnergie.ro) > Derived, rounded daily summaries of the Romanian national grid (SEN), published by MonitorEnergie.ro on top of the Transelectrica operational feed: national consumption, production and cross-border balance, the production mix by source, the typical hourly shape of consumption, and the day-ahead (PZU) wholesale price — one row per calendar day, back to the archive's start in November 2007. These are rounded aggregates the site computed, not raw grid readings; for the raw operational feed, see the transelectrica-sen dataset. - Dataset id: `monitorenergie-ro` - Update cadence: daily - Upstream source: https://monitorenergie.ro/ - Tags: energy, electricity, grid, romania, transelectrica, prices, sen - Current version: ingest `01M53QP5P9DCQ2XR7NWTVQFNY9`, snapshot 2026-10-17, generated 2026-10-17T01:30:22.977Z ## Licence and attribution - Licence: Creative Commons Attribution 4.0 International (`CC-BY-4.0`) - Licence text: https://creativecommons.org/licenses/by/4.0/ - Required attribution: Transelectrica, via MonitorEnergie.ro - Notes: CC BY 4.0 is declared in the site's robots.txt and llms-full.txt, and ClaudeBot is explicitly allowed to crawl it. The licence covers MonitorEnergie.ro's own derived aggregates; the site states the underlying raw data remains the property of its issuers (Transelectrica). Attribute as "Transelectrica, via MonitorEnergie.ro" wherever this data is republished. This connector never uses the site's JSON API (`/api/*.php`), which is gated behind a free API key — by instruction, only the open `.md` Markdown surfaces are read, and no `X-API-Key` is ever sent. Reproduce the attribution line verbatim anywhere you republish this data. ## Manifest - Start here for how this directory works: https://data.bunnytech.app/llms.txt - This dataset: https://data-directory.fsn1.your-objectstorage.com/public/monitorenergie-ro/manifest.json - All datasets: https://data-directory.fsn1.your-objectstorage.com/public/index.json - Human page: https://data.bunnytech.app/datasets/monitorenergie-ro The manifest is the contract: file URLs, row counts, column types, min/max statistics and example queries all live there. Re-read it to discover a new version. ## Fastest path — Parquet exports Immutable, physically sorted snapshot exports. No catalog fetch, best row-group pruning, safe to cache forever. Register one view per table: ```sql INSTALL httpfs; LOAD httpfs; CREATE OR REPLACE VIEW daily_summary AS SELECT * FROM read_parquet('https://data-directory.fsn1.your-objectstorage.com/public/monitorenergie-ro/v/01M53QP5P9DCQ2XR7NWTVQFNY9/daily_summary.parquet'); CREATE OR REPLACE VIEW daily_generation_by_source AS SELECT * FROM read_parquet('https://data-directory.fsn1.your-objectstorage.com/public/monitorenergie-ro/v/01M53QP5P9DCQ2XR7NWTVQFNY9/daily_generation_by_source.parquet'); CREATE OR REPLACE VIEW daily_typical_hour AS SELECT * FROM read_parquet('https://data-directory.fsn1.your-objectstorage.com/public/monitorenergie-ro/v/01M53QP5P9DCQ2XR7NWTVQFNY9/daily_typical_hour.parquet'); CREATE OR REPLACE VIEW daily_price_summary AS SELECT * FROM read_parquet('https://data-directory.fsn1.your-objectstorage.com/public/monitorenergie-ro/v/01M53QP5P9DCQ2XR7NWTVQFNY9/daily_price_summary.parquet'); ``` Example queries: -- Net importer or exporter, day by day, this year ```sql ATTACH IF NOT EXISTS 'ducklake:https://data-directory.fsn1.your-objectstorage.com/catalog/catalog.ducklake' AS "datadirectory" (READ_ONLY); SELECT day, net_position, balance_avg_mw, import_total_mwh, export_total_mwh FROM datadirectory.monitorenergie_ro.daily_summary WHERE day >= '2026-01-01' ORDER BY day ``` -- Production mix by source over the last 30 days: The fact table is long, one row per day per source — pivot or group as needed. ```sql ATTACH IF NOT EXISTS 'ducklake:https://data-directory.fsn1.your-objectstorage.com/catalog/catalog.ducklake' AS "datadirectory" (READ_ONLY); SELECT source_code, sum(energy_mwh) AS total_mwh FROM datadirectory.monitorenergie_ro.daily_generation_by_source WHERE day >= current_date - INTERVAL 30 DAY GROUP BY source_code ORDER BY total_mwh DESC ``` ## Live lake — DuckLake catalog with time travel Attach the published catalog read-only over plain https. This works in native DuckDB AND in duckdb-wasm in the browser — the reader catalog resolves its data files through public https URLs, so no credentials and no backend are involved. ```sql INSTALL ducklake; LOAD ducklake; ATTACH 'ducklake:https://data-directory.fsn1.your-objectstorage.com/catalog/monitorenergie-ro/catalog.ducklake' AS monitorenergie_ro (READ_ONLY); SELECT * FROM monitorenergie_ro.main.daily_summary LIMIT 5; USE monitorenergie_ro; ``` - Latest catalog: https://data-directory.fsn1.your-objectstorage.com/catalog/monitorenergie-ro/catalog.ducklake - This exact version: https://data-directory.fsn1.your-objectstorage.com/catalog/monitorenergie-ro/v/01M53QP5P9DCQ2XR7NWTVQFNY9/catalog.ducklake (sha256 4f5caacbeea427c4026a0eb50e05d236e230d6424beaba778bd6953dd2df10d4) - Written by DuckDB v1.5.5 - Time travel: this ingest is snapshot 30 — e.g. `SELECT * FROM monitorenergie_ro.daily_summary AT (VERSION => 30)` ## Wholesale — S3 access For bulk downloads, read the bucket prefix directly over S3 with httpfs: ```sql INSTALL httpfs; LOAD httpfs; CREATE SECRET hetzner ( TYPE s3, ENDPOINT 'fsn1.your-objectstorage.com', URL_STYLE 'path', KEY_ID '', SECRET '' ); SELECT * FROM read_parquet('s3://data-directory/public/monitorenergie-ro/v/01M53QP5P9DCQ2XR7NWTVQFNY9/**/*.parquet'); ``` ## Schema ### daily_summary One row per calendar day: national consumption, production and cross-border balance (minimum, average, maximum), the day's total energy balance, and whether Romania was, on net, an importer or exporter. The actual window MonitorEnergie.ro analysed (period_start/period_end) is whatever the source returned, not necessarily exactly the requested day — see those two columns. - 6,872 rows · 267 KB · write mode `snapshot_history` - Physically sorted by: `day` - Primary key: `day` - Files: 1 - https://data-directory.fsn1.your-objectstorage.com/public/monitorenergie-ro/v/01M53QP5P9DCQ2XR7NWTVQFNY9/daily_summary.parquet (6,872 rows) Columns: - `day` DATE NOT NULL — Calendar day (UTC) this row summarises, as requested with ?from=day&to=day. (range: "2007-11-10" … "2026-10-17") (~6336 distinct) - `period_start` TIMESTAMP — The ACTUAL start of the window the source analysed ("De la:") — a naive Europe/Bucharest local-time wall clock, stored verbatim with no timezone conversion. MonitorEnergie.ro silently narrows a wide requested range to whatever it can serve; for the single-day requests this connector issues, the returned window normally equals the requested day, but this column always carries what was actually returned, never what was requested. - `period_end` TIMESTAMP — The ACTUAL end of the window the source analysed ("Până la:") — a naive Europe/Bucharest local-time wall clock, stored verbatim with no timezone conversion. - `readings_analysed` INTEGER [readings] — Number of underlying SEN feed readings the source aggregated to build this summary ("Citiri analizate:"). - `consumption_min_mw` DOUBLE [MW] — Minimum national consumption over the window. - `consumption_avg_mw` DOUBLE [MW] — Average national consumption over the window. - `consumption_max_mw` DOUBLE [MW] — Maximum national consumption over the window. - `production_min_mw` DOUBLE [MW] — Minimum national production over the window. - `production_avg_mw` DOUBLE [MW] — Average national production over the window. - `production_max_mw` DOUBLE [MW] — Maximum national production over the window. - `balance_min_mw` DOUBLE [MW] — Minimum cross-border balance (import minus export) over the window. Positive means importing, negative means exporting. - `balance_avg_mw` DOUBLE [MW] — Average cross-border balance over the window. - `balance_max_mw` DOUBLE [MW] — Maximum cross-border balance over the window. - `production_total_mwh` DOUBLE [MWh] — Total electricity produced over the window, normalised to MWh from whatever unit (MWh/GWh/TWh) the source displayed it in. - `consumption_total_mwh` DOUBLE [MWh] — Total electricity consumed over the window, normalised to MWh. - `export_total_mwh` DOUBLE [MWh] — Total electricity exported over the window, normalised to MWh. - `import_total_mwh` DOUBLE [MWh] — Total electricity imported over the window, normalised to MWh. - `net_position` VARCHAR — Whether Romania was, on net, an 'importer' or 'exporter' over the window — taken from the source's own bolded verdict when present, otherwise derived from the sign of the average balance. ### daily_generation_by_source One row per calendar day per generation source (hydrocarbons, hydro, solar, coal, wind, storage, biomass, nuclear): the energy generated and that source's share of the day's total production mix. - 55K rows · 223 KB · write mode `snapshot_history` - Physically sorted by: `day`, `source_code` - Primary key: `day`, `source_code` - Files: 1 - https://data-directory.fsn1.your-objectstorage.com/public/monitorenergie-ro/v/01M53QP5P9DCQ2XR7NWTVQFNY9/daily_generation_by_source.parquet (55K rows) Columns: - `day` DATE NOT NULL — Calendar day (UTC) this row summarises. (range: "2007-11-10" … "2026-10-17") (~6336 distinct) - `source_code` VARCHAR NOT NULL — Stable machine code for the generation source: one of hidrocarburi, hidro, fotovoltaic, carbune, eolian, stocare, biomasa, nuclear. (range: "biomasa" … "stocare") (~9 distinct) - `source_name` VARCHAR — Romanian display name for the source, exactly as MonitorEnergie.ro's table labels it. - `energy_mwh` DOUBLE [MWh] — Energy generated by this source over the day, normalised to MWh from whatever unit (MWh/GWh/TWh) the source displayed. - `share_pct` DOUBLE [%] — This source's share of total production for the day. Can be negative for fotovoltaic when net metering pushes it below zero. ### daily_typical_hour The "typical day" shape MonitorEnergie.ro computes for the analysed window: the average, minimum and maximum value of a series across every reading that fell in each hour-of-day bucket (00:00 .. 23:00), for the window analysed at the request of the given calendar day. - 164K rows · 937 KB · write mode `snapshot_history` - Physically sorted by: `day`, `hour` - Primary key: `day`, `hour`, `series` - Files: 1 - https://data-directory.fsn1.your-objectstorage.com/public/monitorenergie-ro/v/01M53QP5P9DCQ2XR7NWTVQFNY9/daily_typical_hour.parquet (164K rows) Columns: - `day` DATE NOT NULL — Calendar day (UTC) this row summarises. (range: "2007-11-10" … "2026-10-17") (~6336 distinct) - `hour` INTEGER NOT NULL [hour] — Hour of day, 0-23, in the site's own Europe/Bucharest wall-clock hour buckets. (range: 0 … 23) (~24 distinct) - `series` VARCHAR NOT NULL — Which series this row describes. Currently always 'consum' (consumption) — the source publishes a typical-day table only for consumption, not for production. (~1 distinct) - `avg_mw` DOUBLE [MW] — Average value across all readings that fell in this hour bucket. - `min_mw` DOUBLE [MW] — Minimum value across all readings that fell in this hour bucket. - `max_mw` DOUBLE [MW] — Maximum value across all readings that fell in this hour bucket. ### daily_price_summary Day-ahead market (PZU) wholesale electricity price statistics for the Romania bidding zone, over the window MonitorEnergie.ro analysed at the request of the given calendar day. - 4,267 rows · 49 KB · write mode `snapshot_history` - Physically sorted by: `day` - Primary key: `day` - Files: 1 - https://data-directory.fsn1.your-objectstorage.com/public/monitorenergie-ro/v/01M53QP5P9DCQ2XR7NWTVQFNY9/daily_price_summary.parquet (4,267 rows) Columns: - `day` DATE NOT NULL — Calendar day (UTC) this row summarises. (range: "2015-01-01" … "2026-10-17") (~4660 distinct) - `hours_with_price` INTEGER [hours] — Number of hours in the analysed window for which a PZU price was published. Can be less than the full window when the market had no session for some hours. - `price_min_eur_mwh` DECIMAL(12,4) [EUR/MWh] — Minimum day-ahead price over the window. - `price_avg_eur_mwh` DECIMAL(12,4) [EUR/MWh] — Average day-ahead price over the window. - `price_max_eur_mwh` DECIMAL(12,4) [EUR/MWh] — Maximum day-ahead price over the window. ## Performance notes - There are no indexes in a lakehouse. The physical sort order plus Parquet row-group min/max statistics ARE the index. Predicates on the leading sort columns prune whole row groups; everything else is a full column scan. - `daily_summary` prunes on `day`. - `daily_generation_by_source` prunes on `day` → `source_code`. - `daily_typical_hour` prunes on `day` → `hour`. - `daily_price_summary` prunes on `day`. - `ILIKE '%needle%'` cannot prune: it decompresses that whole column. Prefer prefix predicates on the lowercased search companion columns where they exist. - Every file URL under `/v//` is immutable. Cache it as aggressively as you like. - Files are never rewritten in place — a new ingest writes a new version path. Re-read the manifest to pick up updates rather than polling the file URLs. - Pull only the columns you need. Parquet is columnar and the reader range-GETs what it reads. ## Do not - Do not scrape https://data.bunnytech.app HTML. Every number on those pages comes from the manifest above. - Do not hit the upstream source (https://monitorenergie.ro/) in bulk. This mirror exists so you do not have to. - Do not read DuckLake internal data files with a plain Parquet reader. They come with positional delete files, and ignoring those silently returns deleted rows. Use the ducklake extension, or use the published exports above. - Do not republish without the attribution line, and do not imply endorsement.