Beta — Data under validation. Values may contain errors.

Documentation

EnergyData Iberia Excel Add-in — 25 custom functions, 275+ metrics.

Live Data

Quick start

=ED.OMIE()Latest spot price
=ED.OMIE.RANGE("2025-01-01",, 3)Monthly prices
=ED.CAPTURE(1, "2025-07-01")Solar capture price (EUR/MWh)
=ED.CAPTURE(1, "2025-07-01", , "pct")Solar capture rate (%, gen-weighted)
=ED.CURTAIL.RANGE("vre", "economic", "2026-01-01",, 7, "pct")VRE economic curtailment, total %
=ED.PCT.AT.PRICE("gen_solar_pv", 0, "lte", "dayahead", "2026-01-01", "2026-04-30")% solar at price ≤ 0 EUR/MWh
=ED.GET("brent")Brent crude
=ED.METRICS()List every metric

Zones

Pass the zone argument to switch markets. Default "ES" when not provided. Coverage varies — check the metrics catalog for each metric × zone availability.

ES
España
PT
Portugal
FR
France
DE
Germany
BE
Belgium
NL
Netherlands

Aggregation codes

CodeMeaningOutput
0 / "5min" / "10min" / "15min"Native / sub-hourly5–96 rows/day depending on metric
1Hourly24 rows/day (25 on fall-DST day)
2Daily (default)1 row/day
3Monthly1 row/month
4Quarterly1 row/quarter
5Semiannual1 row/semester
6Annual1 row/year
7TotalSingle value over the whole period

⚡ MW power vs MWh energy

Generation, demand, balancing-band capacity and cross-border flows are stored in MW — instantaneous power. When you aggregate (e.g. agg=6 for annual) the API returns the average MW over the bucket, not the total energy delivered.

In numbers: =ED.GEN.RANGE(1, "2025-01-01", "2025-12-31", 6) may return ~3,500— that's the average power, not 3.5 GWh. The total energy is roughly 3,500 × 8,760 ≈ 30.7 TWh.

Pass unit="MWh"to convert. The conversion uses each metric's native sample interval (5 min for ESIOS Spain gen/demand, 15 min for balancing, 60 min for ENTSO-E zones), so the result is exact down to the sample:

=ED.GEN.RANGE(1, "2025-01-01", "2025-12-31", 6)Solar PV avg power (MW)
=ED.GEN.RANGE(1, "2025-01-01", "2025-12-31", 6, , , , "MWh")Solar PV total energy (MWh)
=ED.RANGE("demand_real", "2025-01-01",, 6, , , , , , "MWh")Annual demand in MWh
=ED.RANGE("gen_total", "2025-01-01", "2025-12-31", 6, , , , , , "MWh")Annual generation 2025 (all techs, MWh)
=ED.RANGE("gen_total_measured", "2025-01-01", "2025-12-31", 6)Same total but from REE official measured series (no MWh flag — already energy)
=ED.RANGE("gen_renewable", "2025-01-01", "2025-12-31", 6, , , , , , "MWh")Annual renewable generation (MWh)
=ED.UNIT.RANGE("VAN2", "2025-01-01",, 6, , , "MWh")Vandellós II annual energy delivered (MWh) — per-unit

Available on ED.GEN.RANGE, ED.RANGE, ED.UNIT and ED.UNIT.RANGE since v7.1.13. Virtual aggregates (gen_total, gen_renewable, gen_thermal, gen_fossil) sum the per-tech series at each native timestamp — same MW/MWh logic. Calling unit="MWh" on a price metric (EUR/MWh) returns a 400 error. Already-MWh metrics (gen_total_measured, afrr_energy_up, etc.) auto-aggregate with SUM — no flag needed.

T.Real vs Medida: gen_total is built from real-time per-tech indicators (immediate, ~1-2% off vs official). gen_total_measuredis REE's post-settlement official number (ESIOS id 10043, sum of 47 provinces — ~2-3 day lag, matches REE's published reports).

Shared parameters

These show up across multiple functions with consistent semantics.

tz0/"madrid" (default) | 1/"cet" | 2/"utc"

How to interpret the date/hour/minute argument and how to bucket range output. Madrid is DST-aware (24-25 hour days). CET is fixed UTC+1, no DST → 8760 hourly buckets/year. UTC is fixed offset 0.

noDate0 (default, include) | 1 (omit)

On *.RANGE functions: whether to include the date/period column in the spill array. Useful when you already have your own time index.

method0/"real" (default) | 1/"pbf"

ED.CAPTURE / ED.CAPTURE.RANGE only. realized = dayahead × metered generation (matches what publications report). PBF = dayahead × ex-ante OMIE schedule (Spain only, available before realized data). Since v8.0.0 the param sits after `unit` — pass an empty slot for `unit` if you want PBF (e.g. `=ED.CAPTURE(1, date, "ES", , 1)`).

unit"" (default) | "MW" | "MWh" | "pct" | "hours"

Output unit. On gen/demand functions: "MW" (default) vs "MWh" (energy delivered in each bucket). On ED.CAPTURE / ED.CAPTURE.RANGE (since v8.0.0): default returns EUR/MWh, "pct" returns the capture rate (%). On ED.PCT.AT.PRICE: "pct" (default) | "mwh" | "hours".

Functions

Click a function for the full reference. Or browse all on a single page.

Prices

Wholesale day-ahead spot prices.

Generation

Power generation by technology and per production unit.

Capture price

Production-weighted average price per technology.

Battery (BESS)

Optimal battery spread between cheap and expensive hours.

Installed capacity

Capacity stock (MW) by tech and region.

Registry

Production-unit and owner directory (REE + ENTSO-E).

Settlement

OMIE wholesale settlement and government PPA auction awards.

Grid access

REE grid-access capacity (PDF history + portal snapshot).

Generic + metrics

Single-value, range, and the metric catalog.

275+ metrics available

Spot prices, generation, capture prices, futures, commodities, balancing, redispatch, and more.

View live data coverage →