Beta — Data under validation. Values may contain errors.

ED.GET

Generic single-value access for any of 120+ metrics.

Generic + metrics

Signature

ED.GET(metric, [date], [hour], [minute], [zone], [tz])

Description

Generic accessor for any metric in the catalog. Returns one value at a single timestamp. Use ED.METRICS() to list every available metric with its unit and description.

Covers everything beyond the dedicated functions: real demand, PVPC retail tariff, balancing prices (aFRR, mFRR, RR), redispatch, curtailment, cross-border flows, gas markers (TTF, MIBGAS), CO2 (EUA), commodities (Brent, JKM, ARA), futures (Cal+1, M+1), and more.

Generation and demand metrics are available at native 5-min granularity — pass minute for an exact 5-min slot, omit for the hourly average.

Parameters

NameTypeDefaultDescription
metric*stringMetric name (e.g. "demand_real", "pvpc", "afrr_band_price_up", "brent").
datedateDate. Omit for the latest.
hour0-23Hour. Omit for the latest.
minute0,5,10...555-min slot. Omit for the hourly average.
zonestring"ES"Zone. Iberian: "ES", "PT". Spanish non-peninsular (SENP): "ES_CAN" / "ES_BAL" (demand + generation by tech), "ES_CEU" / "ES_MEL" (PVPC + thermal generation — gen_diesel / gen_gas_turbine). The dispatch_price metric uses the per-subsystem SENP zones ("ES_CAN_GC", "ES_CAN_TF", "ES_CAN_GO", "ES_CAN_HI", "ES_CAN_PA", "ES_CAN_LZFV", "ES_BAL", "ES_CEU", "ES_MEL"). EU/external zones apply to price metrics — external markets ("GB", "CAISO_*", "NEM_*") return their native currency, see the notes. Commodities, capture prices, C2 settlement and OMIP contracts are NOT zoned per market: leave zone out (or pass "ES"). Since 2026-07 passing a foreign zone to one of them — e.g. =ED.GET("brent", , , , "GB") — returns an error instead of quietly serving the same global number under a zone label it does not honour, which is what ED.RANGE has always done.
tz0 | 1 | 2"madrid"Timezone interpretation.

* Required.

Returns

Number — value with auto-formatting based on the metric's unit.

Examples

=ED.GET("demand_real", "2025-07-01", 14)Real demand at hour 14
=ED.GET("pvpc")Latest PVPC tariff value
=ED.GET("brent")Brent crude (USD/bbl)
=ED.GET("eua_co2")EUA CO2 (EUR/t)
=ED.GET("futures_yr")Cal+1 electricity future
=ED.GET("gen_total")Latest total generation (MW) — virtual aggregate, T.Real real-time
=ED.GET("gen_renewable", "2025-07-01", 14)Renewable generation at hour 14
=ED.GET("gen_total_measured", "2025-07-01", 14)Official REE-measured total at hour 14 (settled, ~2-3 day lag, MWh)
=ED.GET("gen_diesel", "2025-07-01", 14, , "ES_CAN")Canarias diesel-engine generation at hour 14 (island-only tech, MW)
=ED.GET("dispatch_price", "2025-07-01", 14, , "ES_CAN_TF")Tenerife SENP dispatch marginal cost at hour 14 (EUR/MWh — settlement cost, not a market price)

Notes

  • Virtual generation aggregates available: gen_total (all techs minus exchanges), gen_renewable (solar+wind+hydro+biomass+geothermal+other_renewable), gen_thermal (nuclear+ccgt+coal+oil+cogeneration+fuel_gas), gen_fossil (ccgt+coal+oil+cogeneration+fuel_gas — no nuclear). All return MW; for energy use ED.RANGE(metric, …, "MWh").
  • **T.Real vs Medida**: gen_total is computed from real-time per-tech indicators (T.Real series) — fastest, but provisional. gen_total_measured (ESIOS id 10043) is the post-settlement official figure REE prints in its reports — settled, ~2-3 day lag. The two typically differ by 1-2%; use the measured one for analysis that needs to match REE's published numbers.
  • **SENP islands**: pass an island zone for the non-peninsular systems. Canarias (ES_CAN) and Baleares (ES_BAL) carry real demand + generation by technology (aggregated across the archipelago), including the island-only techs gen_diesel / gen_gas_turbine / gen_steam (Canarias) and, for Baleares only, gen_other_renewables / gen_auxiliary plus the Balearic submarine link (gen_exchanges) and waste-to-energy (gen_waste). Ceuta (ES_CEU) and Melilla (ES_MEL) carry PVPC plus their thermal generation (gen_diesel / gen_gas_turbine). PVPC for Canarias/Baleares is identical to peninsular — use ES. There is no island day-ahead market.
  • **SENP dispatch cost** (dispatch_price): the hourly marginal cost of the island merit-order dispatch (Sphgenf, art. 67.f RD 738/2015) — a settlement cost, NOT a market price. It is per-subsystem: Canarias splits into ES_CAN_GC / ES_CAN_TF / ES_CAN_GO / ES_CAN_HI / ES_CAN_PA / ES_CAN_LZFV, plus ES_BAL / ES_CEU / ES_MEL. History from 2017-04 (ES_BAL from 2018-12). Most zones refresh intra-month (~D+2); ES_CAN_TF / ES_CAN_GO consolidate at the monthly settlement (~M+1). There is no dispatch_price for the ES_CAN archipelago aggregate or for peninsular ES.
  • **SENP demand price** (dispatch_demand_price): the demand-side companion of dispatch_price (Sphdem settlement, RD 738/2015) — also a settlement cost, not a market price. Unlike dispatch_price it is PER-ARCHIPELAGO, so here the aggregate ES_CAN IS valid: zones ES_CAN / ES_BAL / ES_CEU / ES_MEL. Modern era only, from 2018-12 (monthly C2). Not available for peninsular ES or for the per-subsystem ES_CAN_* zones.
  • **External markets return their NATIVE currency.** GB (GB), CAISO (CAISO_NP15 / CAISO_SP15 / CAISO_ZP26 / CAISO_TAC) and AEMO NEM (NEM_NSW1 / NEM_QLD1 / NEM_VIC1 / NEM_SA1 / NEM_TAS1) price in GBP, USD and AUD respectively, and the returned unit says so — GBP/MWh, USD/MWh, AUD/MWh — so the cell is formatted as what it actually is. Until 2026-07 ED.GET handed back the native number stamped EUR/MWh; ED.RANGE had always reported the native currency, and the two now agree. The underlying REST response also carries currency and value_eur (the same figure converted at the day's FRED rate) for callers that want euros.
  • **An unsupported (metric, zone) pair now returns an error, not an empty cell.** Asking for a metric a zone does not carry — rt5min on ES, demand on CAISO_NP15 (CAISO demand lives on CAISO_TAC), dispatch_price on ES, gen_steam outside the islands — fails with a message naming what IS available for that zone, instead of a silent blank you cannot tell apart from "not published yet". ED.RANGE has enforced this since the external markets launched.
  • **C2 settlement (c2_*) is NOT available through ED.GET** — it returns empty on purpose. The underlying REE liquidation files are hourly or quarter-hourly, but their hour index is 0-based for most of the history and 1-based for recent dates (and, on a few dozen dates, both at once), so asking for one specific hour would return a neighbouring hour's number rather than nothing. Rather than hand you a plausible wrong figure, ED.GET declines. **The data is there — use ED.RANGE("c2_…", start, end, 2)** (or a monthly/annual aggregation): that path groups by calendar date and is unaffected by the index ambiguity. Prices are averaged per day, energies and costs summed.
  • **OMIP futures / forwards / swaps** (futures_*, futures_solar_*, futures_peak_*, forwards_*, swaps_* — 18 metrics): ED.GET returns the FRONT contract, i.e. the settlement of the listed contract with the nearest delivery on the most recent trading day at or before date. ED.RANGE now returns exactly the same selection for every date in the window, so the two functions agree (they did not before — see the ED.RANGE note). **Zone: "ES" only.** OMIP SPEL settles the Spanish MIBEL delivery zone and we ingest no other, so any other zone is now rejected with an explicit error instead of quietly returning the Spanish number under a foreign label.

Related functions