# entsoe-mcp > A self-hosted MCP server exposing 11+ years of European power-market data — day-ahead and balancing prices, load, generation, cross-border flows, outages — across 47 bidding zones, from the ENTSO-E Transparency Platform plus six native TSO/operator sources (Elexon BMRS, NESO, Elia, Energinet, LCCC, Baltic Transparency Dashboard; GB generation mix back to 2009). Queryable by Claude, ChatGPT, Perplexity, Cursor, Microsoft Copilot, Mistral Le Chat, or any MCP-compatible AI agent. Public site: https://entsoemcp.com MCP transport: https://entsoemcp.com/mcp (anonymous; rate-limited per Mcp-Session-Id) JSON tools manifest: https://entsoemcp.com/endpoints.json Health check: https://entsoemcp.com/healthz · Human status page: https://entsoemcp.com/status ## What it does Caches the ENTSO-E Transparency Platform and six native TSO/operator feeds (Tier 1) into a Parquet + SQLite Tier-2 store, then exposes both an MCP server (for AI agents) and a JSON API (for human and script callers). Hot-path queries are sub-second via DuckDB over Parquet. Operated as an independent, non-commercial project; not affiliated with any of the data sources. ## How to connect Add `https://entsoemcp.com/mcp` as a custom MCP server (streamable HTTP, anonymous — no API key, no OAuth): - Claude / ChatGPT / Perplexity — Settings → Connectors → add a custom connector, paste the URL - Microsoft Copilot Studio — Tools → Add a tool → Model Context Protocol → Authentication: None - Mistral Le Chat — Intelligence → Connectors → + Add Connector - Claude Code — `claude mcp add --transport http entsoe https://entsoemcp.com/mcp` - Cursor / any mcpServers-style JSON client — `{"mcpServers": {"entsoe": {"type": "http", "url": "https://entsoemcp.com/mcp"}}}` - VS Code — uses `"servers"` as the top-level key: `{"servers": {"entsoe": {"type": "http", "url": "https://entsoemcp.com/mcp"}}}` in `.vscode/mcp.json` Machine-readable server card: https://entsoemcp.com/.well-known/mcp.json ## Pages - [Home](https://entsoemcp.com/) — Product overview, agent setup, real-conversation example - [Live coverage](https://entsoemcp.com/coverage) — Freshness matrix for all 47 zones × every endpoint family - [Ask](https://entsoemcp.com/ask) — Natural-language query playground (templates + Claude fallback) - [Explore](https://entsoemcp.com/explore) — Capture rate, negative-price hours, compare zones, download CSV/Parquet - [Day-ahead prices](https://entsoemcp.com/day-ahead) — Live + 11-year historical day-ahead spot prices per country and per bidding zone - [Status](https://entsoemcp.com/status) — Live service status (human-readable) - [Licensing](https://entsoemcp.com/licensing) — Per-source re-use terms and required attributions - [Imprint](https://entsoemcp.com/imprint) — Operator identity, contact, privacy ## API & JSON feeds No key required; per-IP rate limits apply. robots.txt disallows /api/ for bulk crawlers — that is an indexing opt-out, not a use prohibition: on-demand fetches by an agent acting for a user are welcome, and Claude-User / ChatGPT-User / Perplexity-User are explicitly allowed. - [/api/series](https://entsoemcp.com/api/series?endpoint=day_ahead_price&zone=DE_LU&start=2026-01-01&end=2026-01-02) — JSON time series for any endpoint × zone; `start` inclusive, `end` exclusive, UTC by default (`tz=local` for market time); `aggregation=raw|hourly|daily|monthly` - [/api/derivation](https://entsoemcp.com/api/derivation?slug=capture_price&zone=DE_LU&start=2025-01-01&end=2026-01-01&psr_types=solar) — computed metrics (see Derived metrics below) - [/download](https://entsoemcp.com/download?endpoint=day_ahead_price&zone=DE_LU&start=2015-01-01&end=2026-01-01&format=csv) — bulk export, `format=csv|parquet`, single-zone endpoints only - [/endpoints.json](https://entsoemcp.com/endpoints.json) — every endpoint family: schema, unit, granularity, source, licence, applicable zones - [/zones.json](https://entsoemcp.com/zones.json) — the 47 active bidding zones: EIC codes, timezones, market clusters, lifecycle - [/psr_types.json](https://entsoemcp.com/psr_types.json) — production-type codes; `?zone=GB` scopes to what a zone publishes and flags codes that are not comparable across zones - [/coverage.json](https://entsoemcp.com/coverage.json) — per-(endpoint, zone) freshness: earliest/latest timestamps, lag class - [/headlines.json](https://entsoemcp.com/headlines.json) — a handful of real-data example figures, continuously refreshed - [/healthz](https://entsoemcp.com/healthz) — liveness, version, landed row counts ## Endpoint families The full machine-readable catalogue — schemas, units, granularity, per-zone applicability — is https://entsoemcp.com/endpoints.json; this list is the human/agent summary. - day_ahead_price — Hourly DA clearing price, EUR/MWh (from 2015-01-01) - day_ahead_price_exaa — Day-ahead price from EXAA's separate 10:15 CET morning auction (ENTSO-E "sequence 2"), EUR/MWh; a distinct product from SDAC (different gate, participants, prices), published only for DE_LU and AT (from 2015-01-01) - intraday_prices — Intraday auction sequence-1 clearing price, EUR/MWh (from 2018-06-01) - actual_load — Actual total electricity load, MW (from 2015-01-01) - load_forecast — Day-ahead total load forecast, MW (from 2015-01-01) - generation_per_type — Aggregated generation per ENTSO-E PSR type B01–B25, MW (from 2015-01-01) - generation_forecast — Day-ahead total generation forecast, MW (from 2015-01-01) - wind_solar_forecast — Day-ahead wind (on/offshore) and solar generation forecast, MW (from 2015-01-01) - crossborder_flow — Physical electricity flow between adjacent bidding zones, MW (from 2015-01-01) - net_transfer_capacity_dayahead — Day-ahead NTC between adjacent zones, MW (from 2015-01-01) - scheduled_exchanges — Scheduled commercial cross-border exchange (DA + intraday), MW (from 2015-01-01) - imbalance_prices — System imbalance settlement prices (long/short), EUR/MWh (from 2017-01-01) - imbalance_volumes — System imbalance net volumes, MW (from 2017-01-01) - outage_generation_unit — Planned and forced unavailability events (UMM) with metadata (from 2015-01-01) - installed_generation_capacity — Annual installed capacity per PSR type, MW (from 2016-01-01) - balancing_capacity_price_afrr — aFRR contracted-capacity price (ENTSO-E A81), normalized to /MW/h; several non-euro TSOs publish in local currency (PLN/HUF/RON/BAM/BGN/CHF), carried per-row in the `currency` column, never FX-converted (from 2019-01-01) - balancing_capacity_amount_afrr — aFRR contracted-capacity amount under daily contracts (ENTSO-E A81): up/down/symmetric MW per settlement period (from 2019-01-01) - procured_balancing_capacity_afrr — aFRR capacity-auction results (ENTSO-E A15/A51): procured up/down MW plus clearing price normalized to EUR/MW/h per tender period; multiple lots collapse to a volume-weighted mean price (from 2021-01-01) - activated_balancing_price — Activated balancing-energy price (ENTSO-E A84), EUR/MWh — an energy price, no per-period scaling; one column per reserve type × direction (FCR/aFRR/mFRR/RR × up/down), null where a zone doesn't publish (from 2019-01-01) - system_price — GB half-hourly system / imbalance cash-out price (DISEBSP) from Elexon BMRS, GBP/MWh, plus the Net Imbalance Volume in the same rows (niv_mwh, MWh, positive = system short). Single price under BSC P305 (sell == buy, stored once) (Great Britain only, from 2015-11-06). Prices are revised by successive settlement runs for months after delivery — recent values are provisional. - market_index_price — GB half-hourly Market Index Price (MID) from Elexon BMRS, GBP/MWh (Great Britain only, from 2016-09-12; ENTSO-E stopped publishing GB on 2021-06-15). Two data providers per settlement period: APXMIDP carries the price signal; N2EXMIDP is published as 0.00 across the whole series and stored as-is — filter to data_provider='APXMIDP' or any average you take will be exactly half the real price. - demand_outturn_transmission — GB half-hourly TRANSMISSION-SYSTEM demand outturn from Elexon BMRS, MW (Great Britain only, from 2021-01-01): indo_mw = Initial National Demand Outturn (INDO), itsdo_mw = Initial Transmission System Demand Outturn (ITSDO, adds station load, pumping and interconnector exports). Transmission-metered only — embedded (distribution-connected) generation is invisible, so these run roughly 5-11 GW BELOW total GB demand. NOT a total-load series; do NOT compare against other zones' actual_load. - wind_forecast_transmission — GB HOURLY transmission-connected (BM-visible) wind generation forecast from Elexon BMRS, latest published value per period, MW (Great Britain only, from 2021-01-01). Excludes embedded wind — NOT total GB wind. Hourly grain despite settlement-period numbering (rows only on hour boundaries). - generation_mix — GB half-hourly generation mix from the NESO Data Portal, MW (Great Britain only, from 2009-01-01). The ONLY source of GB solar: GB solar is ~99% embedded (distribution-connected), so it is absent from Elexon BMRS (which has no SOLAR fuel type at all) and from ENTSO-E (which froze GB generation on 2021-06-15). See the Great Britain section below before using it. - frequency_response_auction — GB frequency-response / balancing-reserve auction (EAC) clearing prices from the NESO Data Portal, GBP/MW/h; the service column carries all twelve products — Response (DCH/DCL/DMH/DML/DRH/DRL) and Balancing Reserve (PBR/NBR/PQR/NQR/PSR/NSR) — negatives legal (Great Britain only, from 2023-11-01) - frequency_response_auction_pay_as_clear — GB pre-EAC pay-as-clear frequency-response auction clearing prices (the six Response products), GBP/MW/h; the direct predecessor of frequency_response_auction, same schema — union the two for continuous history (Great Britain only, 2021-09 to 2023-11, frozen archive) - dynamic_containment_bids — GB Dynamic Containment pay-as-bid unit bids (2020-10 to 2021-09), all battery: per-unit availability fee (bid price, GBP/MW/h), volume offered/accepted, accepted/rejected outcome (Great Britain only, frozen archive) - balancing_capacity_price_afrr_elia — Belgium aFRR (secondary reserve) capacity auction from Elia Open Data, EUR/MW/h + MW (Belgium only, from 2022-05-04), at Elia's NATIVE 4-hour delivery-block grain: six rows per delivery day per direction, ts_utc being the block start and the direction column carrying Up/Down. Elia auctions OVERLAPPING delivery products per day — a 24-hour product (0-24) plus six 4-hour blocks (0-4 … 20-24) tiling the day — in BOTH of its dataset generations (ods125 2022-05→2026-05 and ods207 2026-05→now, where the 0-24 product currently clears 0 MW and the blocks carry the volume). Because those products cover different hours, they are flattened onto the block grid, never summed across the day: procured_mw is the capacity actually HELD during that block — the sum of every product whose window covers it (on 2024-01-15 Up: the 85 MW 24-hour award + the 32 MW block award = 117 MW) — and capacity_price_eur_mw_h is those products' award-weighted price. Expect roughly 100–125 MW per direction; a figure in the hundreds would mean the products had been summed. For the daily figure use the afrr_capacity_daily_elia derivation rather than averaging the block prices yourself — the roll-up is weighted by held capacity and is exact. Elia's NATIVE auction result — DISTINCT from the ENTSO-E-sourced balancing_capacity_price_afrr BE series (per-ISP, A81); expect the same order of magnitude, not equality. - balancing_capacity_price_fcr_energinet — Danish FCR (primary reserve) capacity price from Energinet Energi Data Service, EUR/MW/h + MW, hourly (Denmark only, from 2021). The product column carries the procured product, and the two Danish areas buy DIFFERENT products because they sit in different synchronous areas: DK_1 is coupled to the Continental-European FCR Cooperation and reports one symmetric product split into "FCR domestic" and "FCR cross-border" legs, while DK_2 is Nordic and buys FCR-N and FCR-D up/down. Do NOT compare a DK_1 price to a DK_2 price as if they were the same product. procured_mw is always THIS ZONE's own volume (for DK_2, Energinet's PurchasedVolumeLocal — its similarly-named PurchasedVolumeTotal is the volume across ALL Nordic price areas, is identical for every zone, and is deliberately not stored). The two DK_1 legs are complementary halves of ONE requirement (domestic vs abroad), so adding them is meaningful and gives Denmark's total FCR obligation for that hour — but that requirement LEVEL CHANGES OVER TIME and must never be hard-coded as a validation rule: across the full series (2021-01-18 to 2026-07-20) the sum steps 20 → 22 → 23 → 25 → 29 MW at successive year-ends. A leg may also be NEGATIVE (408 of 48,210 hours): the legs are net positions, so a negative "FCR cross-border" means Denmark sold FCR abroad rather than buying it, and the two still sum to the requirement (26 + -6 = 20 MW). Do not clip a leg at zero or read one alone as a procured volume. The DK_2 products are separate requirements and must not be summed at all. Rows are the native hourly grain with no aggregation applied (DK_1's 4-hour FCR-Cooperation blocks arrive from Energinet already expanded to one row per hour). Energinet's NATIVE auction result — DISTINCT from the ENTSO-E-sourced balancing_capacity_price_afrr DK series (A81): different product and publisher, not reconciled. - balancing_capacity_price_afrr_energinet — Nordic aFRR (secondary reserve) Capacity Market results from Energinet Energi Data Service, EUR/MW/h + MW, hourly (all twelve Nordic price areas — DK_1, DK_2, FI, NO_1-NO_5, SE_1-SE_4 — from 2022-12-07): the direction column carries Up/Down, capacity_price_eur_mw_h the hourly clearing price, procured_mw the procured capacity. The market is jointly operated by Energinet, Statnett, Svenska kraftnät and Fingrid and clears natively in EUR/MW/h. This is the market's NATIVE result, published at source; it is a SEPARATE endpoint from the ENTSO-E-sourced balancing_capacity_price_afrr series for the same zones (A81) because one endpoint = one source. But the two are NOT independent measurements: ENTSO-E A81 for the Nordic zones REPUBLISHES this same clearing, so for a given hour and direction the PRICES ARE EXPECTED TO MATCH — verified 192/192 exact across DK_2, FI, NO_2 and SE_3 on 2026-05-01 UTC. If they diverge, treat it as evidence one of the two pipelines is broken (most often a delivery-day boundary or resolution artefact, since A81 is per-ISP and this feed is natively hourly), not as normal. What this endpoint adds over A81 is procured_mw (A81 carries price only) and the native hourly grain. - balancing_capacity_baltic — Baltic FCR/aFRR/mFRR reserve capacity auctions from the Baltic Transparency Dashboard (the three Baltic TSOs' joint platform), EUR/MW/h + MW, 15-minute MTU (Estonia, Latvia and Lithuania only, from 2025-09-30). reserve_type carries FCR/aFRR/mFRR and direction carries Symmetric (FCR) or Up/Down (aFRR, mFRR), so one endpoint covers all three products. Every value is the source's own per-MTU, per-zone figure with NO aggregation — nothing is summed across zones, products or time, and the three products are concurrent obligations on one common grid rather than differing-duration products tiling the day, so no duration weighting applies. procured_mw is genuinely per-zone (never identical across EE/LV/LT in any MTU of a sampled month); the Baltic FCR total across all three zones sits at 28-29 MW, so a figure near 84 MW would mean the zones had been summed. capacity_price_eur_mw_h is a COMMON BALTIC clearing that separates on congestion — over June 2026 the FCR price was identical in all three zones in 100% of MTUs but the aFRR/mFRR upward prices in only ~60%, so it is a real per-zone price, not one number broadcast onto three rows. A SEPARATE endpoint from the ENTSO-E-sourced balancing_capacity_price_afrr (A81) series for the same zones (one endpoint = one source), but NOT an independent measurement of it: the Baltic dashboard declares EUR/MW/h in-band and is the Baltic TSOs' own publication of their own auction, and A81 republishes that same clearing, so for a given MTU and direction the aFRR PRICES ARE EXPECTED TO MATCH 1:1 — verified 2026-07-20 across EE, LV and LT over the 2026-07-05 to 07-19 delivery window: 7,930 of 7,962 zone-MTU-directions exact, and all 32 exceptions sit on the single 22:00Z delivery-day-boundary MTU. If they diverge anywhere else, treat it as evidence one of the two pipelines is broken, not as normal. Resolved historical artefact, recorded so it is not rediscovered and mistaken for a venue difference: A81 rows for delivery BEFORE 2026-07-05T04:15Z used to read exactly 4x high, because they landed before afrr_price_basis_minutes=60 was set for EE/LV/LT (A81 reports these zones at PT15M, so the reporting-resolution fallback quadrupled the hourly price; the registry forces x1). Those rows were re-materialized on 2026-07-20 (372,750 rows across EE/LV/LT) and now agree with this endpoint 1:1 — spot-verified LT 2026-06-10 (569.89 vs 569.89) and LV 2026-05-20 (85.71 vs 85.71), ratio 1.0000. A 4x on any A81 Baltic row today means a partition escaped that re-fetch, not a real difference; this endpoint is the correct denomination throughout. What this endpoint adds over A81 is procured volume and FCR/mFRR coverage. History starts on the 2025-09-30 delivery day, NOT at the February 2025 Baltic desynchronization — both exports return all-null values for every earlier MTU. BTD's pre-October 2025 60-minute archive is a separate export and is not served here. - day_ahead_price_imrp — GB hourly day-ahead AUCTION price, GBP/MWh (Great Britain only, from 2016-06-30; batched publication, newest delivery day typically D-2 but D-4 after a weekend): the CfD Intermittent Market Reference Price from the LCCC Data Portal, a volume-weighted average across the two GB day-ahead auctions (EPEX SPOT GB + N2EX) since GB decoupled from SDAC on 2021-01-01. THE series for GB day-ahead questions after 2020 — ENTSO-E's day_ahead_price for GB ends 2020-12-31 (penny-identical to this one on their 2016→2020 overlap). Contractually referenced (CfDs, most GB PPAs); distinct from market_index_price (MID), a within-day traded index with ~2% mean basis — do not splice the two. ## Derived metrics - capture_price — Monthly capture price (production-weighted VWAP) + baseload price + capture rate (capture / baseload, also known as quality factor, value factor, or Marktwertfaktor) per zone × PSR type. Priced against the day-ahead auction, in EUR/MWh. Exposed via the get_derivation MCP tool and the /api/derivation HTTP wrapper. - capture_price_mid — The same three numbers for GB, priced against the Elexon Market Index Price in GBP/MWh, covering 2016-09-12 to today (Great Britain only). Use this for any GB capture-price question from 2021 onward — ENTSO-E cannot answer it. See the Great Britain section below. - afrr_capacity_daily_elia — Daily roll-up of the Belgium aFRR capacity auction (balancing_capacity_price_afrr_elia), one row per delivery day per direction (Belgium only). capacity_price_eur_mw_h is weighted by the capacity held in each 4-hour block — NOT the unweighted mean of the six block prices, which diverges whenever the day is not flat — and procured_mw is the mean capacity held across the day. Because every Elia delivery product spans a whole number of blocks, this reproduces the auction's daily figures exactly (2024-01-15: 117 MW in both directions, matching Elia's published symmetric BE aFRR requirement). n_blocks surfaces partial days; a complete day is 6. - negative_price_hours — Count of hours with negative day-ahead prices per zone-month, with min/avg negative price. - residual_load — Monthly residual load (load minus wind + solar): what dispatchable resources must cover. Mean / min (the duck-curve floor) / max per zone, MW. - res_share — Renewable share of monthly generation: (renewable + hydro) / (renewable + hydro + fossil + nuclear), Ember/Bruegel convention; pumped storage and "other" excluded. - emissions — Monthly CO2 emissions per zone × production type: generation × IPCC AR5 lifecycle factors (the factor set used by Electricity Maps, Ember, Climate TRACE). Production-based attribution. - tb_spread — Top-Bottom (TBx) battery-arbitrage spread, EUR/MW: per day, the sum of the x highest hourly prices minus the x lowest (TB1/TB2/TB4/TB6); monthly/annual values sum the daily ones. zone="all" returns every zone at once. ## Great Britain — read this before querying GB GB is the one zone where the obvious query gives the wrong answer. It left the EU internal market, so it is served by three sources with different taxonomies, and the naming does not warn you. **Which source answers what.** ENTSO-E stopped publishing GB day-ahead prices on 2020-12-31 and GB generation on 2021-06-15. Both remain queryable for the years they cover, and neither is wrong — they are just over. For anything after those dates, GB lives on Elexon (prices) and NESO (generation). **GB solar is invisible to two of the three sources.** Roughly 99% of GB solar is embedded — connected to distribution networks, below the transmission meter. Elexon BMRS therefore has no SOLAR fuel type at all: its generation outturn reports ~17 fuel types and solar is not among them, even at midday in June when GB solar is running at ~10 GW. ENTSO-E's GB generation stopped in 2021. `generation_mix` (NESO) is the only source that sees GB solar, and it reaches back to 2009. The same applies to embedded wind. **GB carries wind under two incompatible taxonomies.** ENTSO-E splits wind by *technology*: B18 Wind Offshore, B19 Wind Onshore. NESO splits it by *connection level*: transmission-metered vs embedded. These are orthogonal axes, not two names for one thing. NESO's transmission-metered wind is roughly 75–80% offshore, so it is not B19, and it is not B18 either. That is why it carries a source-native code (`NESO_WIND_TRANSMISSION`) rather than being mapped onto a B-code that would look comparable and not be. Codes whose `source` is not `entsoe` are native to that source and only exist where it publishes — never compare them across zones without reading their `description`. **Some GB figures are not generation.** `NESO_IMPORTS_NET` is interconnector net flow and `NESO_STORAGE_NET` is net storage discharge. Both are zero-clipped upstream (exports and charging are not observable), so they are half-signals, and neither is production. They carry `counts_as_generation: false` and are excluded from generation totals and from capture-price weighting. Do not sum them into a generation figure. **GB solar is a modelled estimate.** `SOLAR` and embedded wind in the NESO mix are modelled, not metered — unavoidable for generation that sits behind distribution meters. Treat them as best available, not as a meter read. **Two GB capture-price series exist and must not be spliced.** `capture_price` for GB prices the ENTSO-E day-ahead auction against ENTSO-E transmission-only generation (2015-01 → 2020-12). `capture_price_mid` prices the Elexon MID against NESO embedded-inclusive generation (2016-09 → today). They overlap from 2016-09 to 2020-12, but differ on three axes at once — product (day-ahead auction vs within-day traded index), currency (EUR-labelled vs GBP), and generation definition (transmission-only vs embedded-inclusive). The overlap is a cross-validation window, not a join. For "GB solar capture price" from 2021 onward, `capture_price_mid` is the only answer. **Currency.** GB values are GBP and say so in the column name (`capture_price_gbp_per_mwh`, `gbp_per_mwh`, `clearing_price_gbp_mw_h`). No FX conversion is applied anywhere. Do not assume EUR because other zones are EUR. Call `list_psr_types(zone="GB")` for the machine-readable version of all of this: it returns only the codes GB actually publishes, each with its `source`, `counts_as_generation`, the endpoints that carry it, and a `taxonomy_note`. ## Coverage - 47 active EU bidding zones across 8 clusters: CWE (DE-LU, FR, NL, BE, AT, CH), Iberia (ES, PT), Italy (7 zones: IT-NORD, IT-CNOR, IT-CSUD, IT-SUD, IT-CALA, IT-SICI, IT-SARD), British Isles (GB, IE), Nordics (DK1, DK2, NO1–NO5, SE1–SE4, FI), Baltics (EE, LV, LT), South-East Europe (RO, BG, GR, HU, SI, HR, RS, ME, MK, BA, AL) - Data from 2015-01-01 to present for most series - Refresh latency: DA prices once per day (~14:00 CET for next day), load and generation 30–120 min, outages event-driven ## MCP tools (high-level) - list_zones, list_endpoints, list_psr_types — discovery. `list_psr_types(zone=...)` scopes production types to what a zone actually publishes and flags codes that are not comparable across zones; always pass zone= for GB. - get_series — generic time-series query, any endpoint × zone - get_day_ahead_prices, get_load, get_generation, get_crossborder_flow, get_outages — typed wrappers - compare_zones — multi-zone comparison - get_tb_spread — top-bottom hour spread - data_coverage — freshness snapshot per (endpoint, zone) - list_derivations, get_derivation — derived metrics (capture price, baseload, capture rate, negative price hours, residual load, renewable share, CO2 emissions, monthly/annual TB1/TB2/TB4/TB6 battery-arbitrage spreads incl. zone='all') ## Data source and licence Data: ENTSO-E Transparency Platform — re-distributed under their terms, with attribution: "Source: ENTSO-E Transparency Platform (transparency.entsoe.eu)". https://eepublicdownloads.entsoe.eu/clean-documents/mc-documents/transparency-platform/ENTSOE_Transparency_Terms_Conditions.pdf Attribute re-used ENTSO-E data as: "Source: ENTSO-E Transparency Platform (transparency.entsoe.eu)". Which datasets are CC-BY 4.0 (ENTSO-E free re-use list) and which are attribution-only: https://entsoemcp.com/licensing Great Britain market data (market_index_price, system_price, demand_outturn_transmission, wind_forecast_transmission) comes from Elexon Insights (BMRS), not ENTSO-E — GB left the ENTSO-E Transparency Platform in 2021. It is redistributed under Elexon's Licence to use BMRS open data, with attribution: "Contains BMRS data © Elexon Limited copyright and database right 2026". See https://entsoemcp.com/licensing for the full source-by-source breakdown. Great Britain generation-mix and balancing-service data (generation_mix, frequency_response_auction, frequency_response_auction_pay_as_clear, dynamic_containment_bids) comes from the NESO Data Portal, published by the National Energy System Operator. It is redistributed under the NESO Open Data Licence v1.0, with the prescribed attribution: "Supported by National Energy SO Open Data". Belgium aFRR capacity auction results (balancing_capacity_price_afrr_elia) come from Elia Open Data, the open-data portal of the Belgian TSO Elia. They are redistributed under the Creative Commons Attribution 4.0 International licence (CC-BY 4.0), with attribution: "Contains data from Elia Open Data, licensed under CC-BY 4.0". Danish and Nordic reserve-capacity results (balancing_capacity_price_fcr_energinet, balancing_capacity_price_afrr_energinet) come from Energinet Energi Data Service, the open-data platform of the Danish TSO Energinet. They are redistributed under the Creative Commons Attribution 4.0 International licence (CC-BY 4.0), which applies platform-wide, with attribution: "Contains data from Energinet Energi Data Service, licensed under CC-BY 4.0". The GB day-ahead auction price (day_ahead_price_imrp) is the Intermittent Market Reference Price from the Low Carbon Contracts Company Data Portal, published under the UK Open Government Licence v3.0, with attribution: "Contains public sector information licensed under the Open Government Licence v3.0". Raw EPEX SPOT / Nord Pool (N2EX) market data is proprietary and is NOT served here — the IMRP is LCCC's own OGL-licensed publication. Baltic reserve-capacity auction results (balancing_capacity_baltic) come from the Baltic Transparency Dashboard, the joint transparency platform of the three Baltic TSOs Elering, AST and Litgrid. They are redistributed under the Creative Commons Attribution 4.0 International licence (CC-BY 4.0), with attribution: "Contains data from the Baltic Transparency Dashboard (Elering, AST, Litgrid), licensed under CC-BY 4.0". This site is not affiliated with ENTSO-E, Elexon, NESO, Elia, Energinet, LCCC, Elering, AST or Litgrid.