ODAGRID · Estonia · Latvia · Lithuania

Baltic's electricity market overview: Revenue potential & BESS BC

Wholesale day-ahead · intraday · balancing capacity (BBCM) · all economics in €/MWh · Estonia / Latvia / Lithuania · Feb 2025 → today

Updated 11.08.2026

    Price trend — this week vs last (Latvia day-ahead + intraday range)

    Bars: day-ahead average & within-day spread. Dots: the week's average intraday high (peak ▲) and low — the gap between them is the intraday spread a battery monetises.

    Upcoming interconnector outages → price
    This week's setup — renewable output, import capacity & expected price

    Next 14 days: renewable-output index (weather) and available cross-border import capacity (UMM). When both fall — calm/cloudy weather and an interconnector out — Baltic prices tend to rise and spreads widen; when both are high, prices soften.

    Recent realized correlation — renewable output, import capacity & prices (last ~3 weeks)

    Realized weather (Open-Meteo) and available import capacity vs actual day-ahead price, plus the day's intraday high (peak ▲) and low dots, aligned by day. Watch the intraday spread (high − low) widen exactly when renewable output is high and import capacity drops (an interconnector out) — high output pushes the day-ahead floor down while scarcity spikes the peak. That co-incidence is the battery's best window.

    Methodology & assumptions — how these signals are built

    Three independent directional signals are shown side-by-side, each with its own confidence — deliberately not blended into one forecast. A net "this week" read appears only when the active signals agree; when they conflict it says "mixed".

    • Weather → output. Open-Meteo 7-day forecast (cloud cover, 100 m wind, shortwave radiation) for Riga/Tallinn/Vilnius. Wind output: <6 m/s low · 6–10 med · >10 high. Solar from shortwave radiation (primary — already includes cloud): >400 W/m² & cloud<40% high · 200–400 or 40–70% med · else low. Day vs night by daylight hours (solar ≈ 0 at night).
    • Outages. Nord Pool UMM. We flag only material import cuts into a Baltic zone (≥30% of an interconnector's capacity, flowing into EE/LV/LT) over the next 14 days — an outage on an export line can lower local prices, so flow direction matters.
    • Trend. Last 7 days vs the prior 7 — day-ahead average and within-day spread.
    • No invented coefficients. There is no published Baltic wind→price €-figure, so signals are directional, not point forecasts. The Baltics desynchronised from BRELL in Feb 2025, so recent data is weighted. Indicative — not investment advice.

    Full calculation — how the payback is built

    Every revenue stream for your current settings, traced from per-day → per-year → price → revenue → profit. Energy streams are paid per MWh cycled; capacity is paid per MW held available (MW·h). Updates live with the sliders.

    Sensitivity analysis

    Each driver flexed ±% independently (all else unchanged) — impact on IRR, NPV, payback, DSCR and MOIC. Set the flex per driver:

    Energy revenue = (captured fraction × gross daily spread) × annual discharged MWh, where discharged MWh = cycles/day × 365 × energy capacity. Analysts capture only ~40–60% of the gross max−min spread (forecast error, efficiency, single-cycle limits) — default 50%. Cost (LCOS) = (CapEx ÷ life + annual O&M) ÷ discharged MWh. Balancing capacity = clearing price × 8760h × availability% × committed MW (rent for standing ready). Arbitrage throughput = full cycling × (1 − committed share × availability) − activation MWh: power committed to balancing is unavailable for arbitrage while it's actually held, and every MWh delivered on activation is a cycle not arbitraged — no double-count. So raising the balancing shares, availability, or activation rate each reduce intraday/day-ahead throughput (and vice-versa). Availability = share of hours you actually clear and can provide; a 2h battery is energy-limited, so realistic ~40–60%, not 90%. The line-by-line breakdown above the chart shows every element. Two paybacks are reported: energy-only (the durable, scalable floor) and with balancing (today's still-elevated bonus). Round-trip efficiency (default 88%, incl. AC-DC inverter losses) haircuts energy revenue; annual degradation (default 2.5%/yr) fades the cash flows over life. Financing → Project IRR (unlevered) + Equity IRR (levered, interest via the debt-service annuity) + Min DSCR vs the 1.30× bank covenant. Operating costs are built up from AST tariffs (capacity reservation €794/MW·yr; transmission €3.63/MWh on charging, producers pay no transmission), electricity tax (€1.01/MWh), balancing portfolio (~€3.5/MWh), land rent and general O&M — all-in ≈€8/kWh·yr, every line adjustable. Indicative, not a bankable model: straight-line CapEx amortisation, ignores SoC co-optimisation. CapEx band ~€150–260/kWh (base €190; global LFP ~€115–150).
    Parameter guide — what each input means & how it moves the return

    Behind-the-meter savings, worked example: say your factory buys grid power at the all-in retail price of ~€100/MWh (wholesale ~€91 + network/transmission + taxes). The battery charges off-peak at ~€45/MWh and discharges into your own load — so you avoid the full €100 import and your effective cost for that energy drops to ~€45. Net saving ≈ €55/MWh on every self-consumed MWh, plus you cut your peak demand charge (~€2.8/kW·month). That's why serving your own load usually beats selling at the ~€91 wholesale price.

    Inputs

    • System power (MW) — battery output. Scales revenue and CapEx together, so it barely moves €/MWh ratios or payback by itself.
    • Duration (2h/4h) — energy capacity = MW × hours. 4h ≈ doubles energy CapEx and throughput; captures more per cycle but costs more.
    • Installed CapEx (€/kWh) — upfront cost per kWh of energy. ↑CapEx → ↑payback, ↓IRR. Baltic range ~€150–260; €200 mid.
    • Cycles/day — full charge→discharge cycles per day. ↑cycles → ↑arbitrage throughput & revenue (but ↑degradation). Realistic 1.1–1.5.
    • Asset life (yr) — years CapEx is spread over. ↑life → ↓cost/MWh, ↑IRR.
    • Gross daily spread (€/MWh) — the day-ahead/intraday high−low; the raw arbitrage opportunity (day-ahead ~€${DA_SPREAD}, intraday peak ~€${ID_SPREAD_PEAK}).
    • Captured fraction (%) — share of the gross spread you realistically capture (~40–80%); the rest is lost to forecast error, round-trip losses, single-cycle limits.
    • Capacity availability (%) — share of hours you actually clear & can hold a reserve. A 2h battery is energy-limited (~40–60%, not 90%). ↑availability → ↑balancing revenue.
    • Activation rate (%) — share of available hours you're actually called to deliver energy → drives activation revenue.
    • FCR / aFRR / mFRR (%) — share of power committed to each balancing product. Committing more shifts power AWAY from arbitrage (arbitrage runs on the remaining %), so raising these can lower the energy-only return — there's no free stacking.
    • Gearing (debt %) — debt share of CapEx. ↑debt → less equity at risk → ↑equity IRR if the project return beats the loan rate (and ↑risk).
    • Loan rate / term — cost and length of debt. ↑rate or ↓term → ↑annual debt service → ↓equity cash flow during the loan years.

    Outputs

    • Cost (LCOS) = (CapEx ÷ life + annual O&M) ÷ annual discharged MWh — all-in cost to deliver one MWh.
    • Captured /MWh — revenue per discharged MWh (captured fraction × gross spread).
    • Margin /MWh = captured − cost — the per-MWh profit on energy.
    • Net revenue/yr = all streams − O&M — the annual operating cash flow.
    • Payback = CapEx ÷ net/yr. Two are shown: durable (energy[+BTM] only) and with balancing (today's elevated bonus).
    • Project IRR (unlevered) — return on the whole CapEx over asset life, ignoring financing. The asset's intrinsic return.
    • Equity IRR (levered) — return on your equity only after debt service. Exceeds the project IRR when the project beats the loan rate (the bank's cheaper money amplifies your return); falls below it if the project underperforms the loan.