ED.GET
Generic single-value access for any of 120+ 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
| Name | Type | Default | Description |
|---|---|---|---|
| metric* | string | — | Metric name (e.g. "demand_real", "pvpc", "afrr_band_price_up", "brent"). |
| date | date | — | Date. Omit for the latest. |
| hour | 0-23 | — | Hour. Omit for the latest. |
| minute | 0,5,10...55 | — | 5-min slot. Omit for the hourly average. |
| zone | string | "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. |
| tz | 0 | 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 useED.RANGE(metric, …, "MWh"). - **T.Real vs Medida**:
gen_totalis 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 techsgen_diesel/gen_gas_turbine/gen_steam(Canarias) and, for Baleares only,gen_other_renewables/gen_auxiliaryplus 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 — useES. 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 intoES_CAN_GC/ES_CAN_TF/ES_CAN_GO/ES_CAN_HI/ES_CAN_PA/ES_CAN_LZFV, plusES_BAL/ES_CEU/ES_MEL. History from 2017-04 (ES_BALfrom 2018-12). Most zones refresh intra-month (~D+2);ES_CAN_TF/ES_CAN_GOconsolidate at the monthly settlement (~M+1). There is nodispatch_pricefor theES_CANarchipelago aggregate or for peninsularES. - **SENP demand price** (
dispatch_demand_price): the demand-side companion ofdispatch_price(Sphdem settlement, RD 738/2015) — also a settlement cost, not a market price. Unlikedispatch_priceit is PER-ARCHIPELAGO, so here the aggregateES_CANIS valid: zonesES_CAN/ES_BAL/ES_CEU/ES_MEL. Modern era only, from 2018-12 (monthly C2). Not available for peninsularESor for the per-subsystemES_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-07ED.GEThanded back the native number stampedEUR/MWh;ED.RANGEhad always reported the native currency, and the two now agree. The underlying REST response also carriescurrencyandvalue_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 —
rt5minonES,demandonCAISO_NP15(CAISO demand lives onCAISO_TAC),dispatch_priceonES,gen_steamoutside 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.RANGEhas enforced this since the external markets launched. - **C2 settlement (
c2_*) is NOT available throughED.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.GETdeclines. **The data is there — useED.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.GETreturns the FRONT contract, i.e. the settlement of the listed contract with the nearest delivery on the most recent trading day at or beforedate.ED.RANGEnow 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.