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.
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.
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.
1How Baltic power is priced — the layers a battery sells into
A battery can earn across several markets at once ("revenue stacking"). These are the price types, in the order energy is traded.
DAY-AHEAD Elspot auction — clears at noon for every hour (15-minute blocks since Oct 2025) of the next day. The baseline buy-low/sell-high spread. Predictable, but locked in hours ahead.
INTRADAY AUCTIONS IDA1 / IDA2 / IDA3 — three pan-European auctions (since Jun 2024, 15-min) that re-clear positions as wind & solar forecasts firm up after the day-ahead.
CONTINUOUS INTRADAY ID1 / ID3 indices — order-book trading up to minutes before delivery. ID1 = last-1-hour price, ID3 = last-3-hour. Where a battery catches the last-moment spike — the highest-value, most volatile window.
BALANCING Capacity (€/MW·h) paid to stand ready + activation (€/MWh) paid when called. Run by the TSOs via the BBCM. High at launch, now compressing.
2Day-ahead wholesale (ENTSO-E)
The reference price every MWh trades against. Primary source: ENTSO-E Transparency Platform (day-ahead, document A44) — independently cross-checked against energy-charts.info and agreeing to within €0.1/MWh on the period average. 15-min granularity from Oct 2025.
Avg · LV
–
Maximum
–
Minimum
–
Days negative
–
Monthly baseload average (equal-weighted daily means) with a min–max band. Default view is 2026 (~€95/MWh YTD); 2025 alone averaged ~€86 and the full Feb-2025→2026 blend is ~€89 — switch the period to compare. Set granularity to Daily for the day-by-day series, or 15-minute to see the raw within-day price swings at native resolution (the period selector becomes a 24h / 3-day / 7-day / 31-day window; 15-min data covers the last 31 days). Feb 2026 spiked to ~€155. Negative prices on high-wind / low-demand intervals are pure upside for a charging battery. For a consumer this isn't the full price. €89/MWh is the wholesale market average. A manufacturer's actual delivered cost adds the network/transmission tariff (~€10–20/MWh) + excise + supplier margin → roughly ~€100–105/MWh all-in (VAT recoverable, so excluded). That higher all-in figure is exactly what a behind-the-meter battery avoids when it serves on-site load instead of importing — see §10.
3Intra-day volatility — where the money is
The within-day price swing is what a battery monetises. Primary measure — ENTSO-E day-ahead, full history: each day's peak-to-trough spread (max − min). Long, durable, and the basis of the arbitrage case. The continuous-intraday (XBID) market below adds a recent liquidity snapshot — the one series ENTSO-E doesn't publish.
Intra-day spread = the day-ahead price's within-day max − min, from ENTSO-E over the full period. This is the durable arbitrage signal — typically €100–200+/MWh on volatile days and persistent across the year. A battery realistically captures ~40–60% of it (forecast error, round-trip efficiency, single-cycle limits) — exactly what §10 models. Shown day-by-day by default; switch granularity to Monthly to smooth it, or use §2 → granularity → 15-minute for the raw within-day shape.
Continuous-intraday (XBID) — highest volatility
The separate continuous market that trades in real time after the day-ahead auction. This is where volatility is highest — recent LV quarter-hours swing from negative to €300+/MWh. Switch View between the recent 15-minute detail (per quarter-hour VWAP) and the daily history — we archive this feed every day, so the history deepens over time. Use the Period control to set the window.
Where prices actually sit, and how much of the total value each slice carries. The business case uses the MEAN of the selected window — it counts the peaks at their true frequency.
Traded volume (MWh/day) — market liquidity
Energy that actually changed hands on the continuous intraday — how deep the market is.
Typical: LV ~7 GWh/day, EE ~6, LT ~23 (Lithuania is the deepest Baltic intraday market). Volume tracks volatility: e.g. LV peaked at ~22.4 GWh on 20 May vs its ~7 GWh average. A 10 MW battery cycling once is ~20 MWh — a tiny fraction of daily liquidity, so there's ample room to execute without moving the price. In this window the LV continuous quarter-hour spread peaks at €181/MWh — a peak, not a steady-state capturable figure.
The Baltics sit mid-pack — cheaper than Poland, dearer than Finland/France/Sweden. Volatility (not absolute level) drives storage value, and the Baltic mix of wind, limited interconnection and a young balancing market keeps volatility high.
Capacity = paid €/MW·h to stand ready. Clears ~uniformly Baltic-wide (Latvia column = the common clearing price). Source: Baltic Transparency Dashboard API.
Read the slope, not the average. Launch-era scarcity (Feb–Aug 2025) drove FCR/aFRR to extreme levels (aFRR↓ peaked ~€357/MW·h in May 2025); clearing prices have since fallen sharply. FCR pays most per MW but the entire Baltic FCR market is only ~20 MW — it saturates after a few batteries.
Activation energy — what you're paid when actually called (€/MWh)
Capacity (above) pays you to stand ready; activation pays per MWh when the TSO actually calls you to inject (↑) or absorb (↓). Two separate payments. Source: Baltic Transparency Dashboard (Latvia, scarcity-cap outliers filtered).
Balancing prices have moved through distinct regimes (launch scarcity, the 2026 collapse, the recent recovery). A long window mixes those regimes into one average that describes no period that ever existed — read the last 3 months for a decision, the longer windows for context.
This income stacks on top of the capacity payment — but you only earn it when actually dispatched, and you cycle the battery to do so. How to read ↑ vs ↓ (worked example):Upward (↑) = the grid is short, so it calls you to inject energy — you discharge and get paid the (high) upward price. You give energy, you receive money. Downward (↓) = the grid has a surplus, so it calls you to absorb energy — you charge. A positive downward price means you are paid to take energy in — i.e. you receive money and you get energy to store (doubly good); only a negative downward price would mean you pay to absorb. So both directions can earn — ↑ pays you to sell high, ↓ can pay you to buy (or be paid to buy). Why only aFRR (+ a general line)?FCR isn't activated for energy — it's a near-instant, symmetric frequency response paid purely as capacity, with negligible net energy, so there's no activation-price series. mFRR's Latvia-specific activation data is sparse/corrupted in the open feed, so the report shows the reliable general balancing-energy reference as the mFRR/overall proxy. You can earn activation without the capacity market. As a prequalified BSP you may submit voluntary energy bids to mFRR (MARI) and aFRR (PICASSO) with no capacity reservation — you forgo the availability payment but earn the activation €/MWh when called (aFRR needs an automatic-control / AGC connection). FCR is capacity-only (no energy market). Energy-only keeps you flexible and is attractive precisely when capacity prices are compressed (as now) — bid energy opportunistically rather than locking cheap capacity. (Confirm with Elering/AST before relying on it commercially.) Activation rate is data-grounded, not assumed: measured Baltic aFRR activation ≈ 20% of available hours (Transparency Dashboard, Mar–Apr 2026: ~85 GWh activated vs ~143 MW procured); mFRR is activated ~40% as often (~8%). These drive the activation line in the §10 calculator — the model defaults to the measured rate, adjustable.
6Procurement — reserve demand vs cleared volume
How much the TSOs need vs how much actually gets procured, per product (Baltic total of EE+LV+LT, MW). Source: Baltic Transparency Dashboard.
The market is structurally short: cleared volume sits below demand. Example — mFRR↓ demand runs ~650–750 MW but only ~380–470 MW clears, a ~250–300 MW shortfall. The TSOs cover that gap with non-market resources (Estonia's Kiisa emergency plant, Energy Cells & AST's own batteries) and cross-border balancing from non-Baltic TSOs — because market generation + storage can't yet meet the need. That unmet demand is the entry opportunity, and it narrows as storage arrives. (Demand data in the open feed starts ~Sep 2025; earlier months show cleared only. The "offered/bid" series is too sparse to chart, so it's omitted.)
1Cross-border transmission outages — when the interconnectors go down
Planned and forced unavailability on the cross-border links between Finland, the Baltics, Poland and Sweden — live from Nord Pool's Urgent Market Messages (UMM). When an interconnector drops out, cross-zone capacity shrinks and price spreads widen — the volatility a battery monetises. 18 active & upcoming transmission outages tracked.
Interconnector status — Finland · Baltics · Poland · Sweden
Available capacity by link — now vs nominal
Capacity over time — MW available (peak → drop → recovery)
Why it matters for a battery. The biggest Baltic swing is the LitPol Link (LT↔PL) — since the Feb-2025 desynchronisation from BRELL it is the only synchronous tie to Continental Europe — plus the EstLink (FI↔EE) and NordBalt (LT↔SE) HVDC cables. An outage on any of these isolates a price zone, widens local spreads and raises balancing need — all upside for storage. Source: Nord Pool UMM transmission messages, refreshed with the report (2026-08-11).
27-day weather → expected renewable output
Cloud, wind and solar radiation for the three Baltic capitals, with the implied solar & wind output per day (day vs night). Cloudy/calm → less solar & wind → firmer prices; windy/sunny → more renewables → softer prices & wider spreads.
Forecast renewable output — next 7 days (Baltic average)
Stacked generation by technology + the BESS power line. Click a legend name to hide it.
Scenario
Region
Band
Ctrl+scroll to zoom · drag to pan · double-click to reset
2
Output shape — why nameplate ≠ real MW
From the hourly single-axis-tracker PV model (real, by season) + capacity factors. The seasonal split and the midday belly drive cannibalisation.
Average day — % of nameplate by hour
Season
CF applied: PV 11% · onshore wind 35% · offshore 48% (annual). PV shape from the internal single-axis-tracker model per season; onshore wind shape from your 7-year 10-min measured series (winter 44% / summer 30% / annual 35% CF); offshore modelled.
Onshore wind availability (Baltics)
View
Sample day
From a 7-year, 10-minute measured onshore-wind series (314,537 samples, ~7 m/s mean, 500 MW reference turbine). Wind is below 10% of nameplate ~29% of the year and near-zero ~13% — the structural reason firm output needs grid backup, not just storage.
Average day — generation vs demand
Scenario
Region
Season
Year2030
Real expected output (nameplate × CF × seasonal hourly shape) vs demand. Area above the bold demand line = midday surplus to absorb / curtail / export.
Firming calculator — PV + wind + 4 h BESS to deliver a stable X MW
Firm power MW
Season
Battery fixed at 4-hour duration (energy = 4 × power). Because a 4 h battery can't bridge the whole night, the wind + PV nameplate is over-built to cover more hours directly. Summer needs more storage to move the PV belly; winter firms mostly on flat wind.
3
The saturation crossover — when BESS cannibalises itself
Built on the pipeline + surplus from sections 1–2. Rising renewables widen the spread; rising BESS compresses it.
Base scenario · Baltic
Scenario
Region
Ctrl+scroll to zoom · drag to pan · double-click to reset
ANCILLARY FIRST
The fast reserve market (FCR+aFRR) is only ~150 MW for all three countries. BESS already exceeds it — ancillary collapses first, 2025→2028.
THEN ARBITRAGE
Value migrates to energy arbitrage, whose depth grows with the renewable surplus — the durable layer, but it compresses once storage can soak the whole belly.
THE CROSSOVER
—
RENEWABLES RESCUE
A large onshore-wind + PV pipeline keeps growing the surplus — the force that can outrun BESS build and keep arbitrage alive into the late 2030s.
CF PV 11% · onshore wind 35% · offshore 48%. PV hourly shape from internal single-axis-tracker model (per season); onshore wind hourly + duration curve from a 7-year 10-min measured series; offshore modelled. Firming battery = 4 h. 2025 installed & 2030 NECP sourced; 2040 scenario assumption. Indicative — not investment advice.
▸The honest picture
The 2025 gold rush is over. When the Baltic balancing capacity market (BBCM) launched in Feb 2025, thin competition drove capacity prices to scarcity levels — FCR averaged ~€97/MW·h, aFRR-down ~€127. By early 2026 they had fallen to ~€51.5 and ~€10.2 — a 47–92% collapse▼ as batteries flooded a tiny-demand market (Baltic FCR need is only ~20 MW).
Energy markets are the durable case. Latvia day-ahead averages €89/MWh (2026 YTD €95), spiking to €1174 and negative on windy days. But the real signal is intraday: over the last 13 days the LV intraday quarter-hour spread reached €181/MWh on volatile days — well above the day-ahead spread (~€170). That's a peak, not a steady-state number; analysts model a battery capturing ~50% of the gross spread. That last-moment volatility is what a battery is built to catch.
Balancing is now a declining bonus, not the thesis. It still pays, but the trend is down and a handful of new projects saturate it. Underwrite on energy arbitrage + intraday; treat capacity revenue as upside that compresses.
The structural tailwind ▲ growing: the Baltics are early in a renewables build-out — Latvia alone goes from ~0.3 to ~1.0 GW solar by 2030 (2.2 GW by 2060) and ~0.1 to ~0.8 GW wind, with offshore arriving 2032, while demand rises 7.6→8.7 TWh (national energy plans / market forecasts). More intermittent renewables = more price volatility, more balancing need, more hours of negative and spike prices — exactly what a battery monetises. So even as today's launch-era prices compress, the underlying need for storage grows; the value migrates from scarce-capacity payments to a structurally deeper energy-arbitrage opportunity.
Behind-the-meter is a quiet bonus. If the owner also consumes on-site (e.g. a factory), energy discharged into your own load avoids the full retail import cost — wholesale + network/transmission tariff + taxes — because it never travels through the DSO grid. That avoided ~€100+/MWh is typically worth more than selling at the ~€91 wholesale price (see the Business case tab).
What this means for an investment: the case rests on where prices settle, not the launch peaks. The €/MWh calculator in the Business case tab opens on a Base case, with Pessimistic and Optimistic scenarios in the dropdown to bracket it (each one is fully editable) — payback lands in the multi-year range, and the spread between your all-in cost and your catch price is the whole game.
Every figure on this page is pulled live from public TSO and exchange data (ENTSO-E Transparency Platform, Baltic Transparency Dashboard, Nord Pool) and is independently sanity-checked. Indicative for discussion — not investment advice.
1Solar & wind capture prices — the volatility engine
Why the spreads exist: renewables realise less than baseload, and the gap widens as they grow (cannibalisation).
Latvia baseload 2024
€87/MWh
Solar capture rate
76% → 60%2023 → 2024 · ≈€52/MWh
Wind capture rate
~78%≈€68/MWh
Solar capture fell from 76% to 60% in a single year as Latvian PV grew — pushing midday prices down and evening prices up. That widening daily swing is exactly what a battery arbitrages. How to read "capture rate": it's the average price a technology actually earns ÷ the plain baseload average. Worked example — Latvia's 2024 baseload averaged €87/MWh, but solar mostly generates midday when (thanks to all the other panels) prices average only ~€52; so solar's capture rate = 52/87 ≈ 60%. The more solar is built, the lower midday prices go, the lower the rate — "cannibalisation." Baltic studies show solar capture falling fast — ~90% (2022) → 80% (2023) → 60%+ (2024) and projected toward 20% post-2026 as PV grows. Wind keeps ~78% (≈€68) because it generates across all hours and doesn't pile into one cheap window. Sources: Štāls et al. (Baltic price-cannibalisation study); MDPI app14156396; AST Latvia market review 2024.
2Long-term outlook — the gold-rush normalises to a profitable floor
An independent forward-price curve for Baltic battery revenue — blended value per MWh (energy arbitrage + balancing, stacked), in real 2026 €, drawn from established power-market forward data. It is not "everything collapses": the launch-era gold-rush normalises as the market saturates, then floors above cost. Capacity's share inside this blend shrinks (the fading piece), but day-ahead, intraday and activation keep the blended value at a durable, profitable level.
High / Average / Low forward-price scenarios · near-term solid, 2028+ projected (dashed)
Decline, then a profitable floor. The average case falls from ~€200/MWh (2026 gold-rush) to ~€90/MWh real by 2040 — still above the ≈€67/MWh all-in cost of the base system, so the asset stays cash-generative across its life. Independent reference points agree on the shape: the Baltic BBCM data and established power-market forward curves all show revenue declining to a floor — they differ only on the starting level and how high the floor sits. The capacity market is the piece that collapses hardest (70–95% off the 2025 launch), but it was never the bulk of the money; the durable layer is energy + activation. Forward-price scenarios shown High / Average / Low, 2026–2040.
BESS investment economics — the €/MWh calculator
Everything in €/MWh: your all-in cost (LCOS) vs your catch price, and the spread between them. Pick a scenario (Pessimistic / Base / Optimistic) and adjust any input before generating.
🔒 Locked: base-case model, fixed at the standard 20 MW setup with the standard grid tariffs. All inputs, the full line-by-line calculation, financials & market-data export unlock with a key.
📊 From the latest ~30 days — data-led settings
Suggested values computed from current market data — they show where today's market points. Pick a scenario above, then type these into the matching inputs to test.
156€/MWh
Arbitrage spread
Median LV day-ahead daily spread, last 30 days (30 days)
Held at analyst best-practice ~50% of gross spread · model now 50
1/day
Profitable cycles/day
Share of last-30d LV days with spread > €60 breakeven
Build a case, then save & name it (e.g. “Positive”, “Negative trend”) — stored in your browser.
Installed power (nominal) (inverter nameplate)ℹ️The battery's own nameplate power — the most it can charge or discharge at any single moment, before the grid is considered. It also sets the energy capacity together with the duration (20 MW × 2 h = 40 MWh). Each of the two grid connections below can be smaller than this number, and for each direction the smaller of the two is what actually limits you. MW
Grid connection — consumption (MW you may draw to charge)ℹ️How many MW your connection agreement lets you take FROM the grid to charge the battery. If it is smaller than the installed power, filling the battery takes more hours — 40 MWh through a 10 MW connection at 88% round-trip efficiency needs about 4.5 hours, not 4. Charging over more hours means some of those hours are no longer the cheapest ones of the night, so the price gap you earn on gets a little smaller. This is also the number the grid capacity charge is billed on — the charge applies to the consumption connection only, with nothing levied on the production side, so contracting less here genuinely costs less. MW
Grid connection — production (MW you may inject discharging)ℹ️How many MW you are allowed to inject INTO the grid while discharging. If it is smaller than the installed power, emptying the battery takes more hours, so you keep selling past the daily price peak into hours that pay less. In the Baltic data this costs more than an equally small consumption connection, because high prices sit in only a few evening hours while cheap night hours are broad and flat. A smaller connection here also limits how many MW of balancing reserve you can commit. MW
Duration
System: 20 MW / 40 MWh(power × duration)
ℹ️The price-ladder factor says how much of the normal price spread still survives when one cycle has to be stretched over more hours. It is measured, not assumed: the model takes the real hourly day-ahead prices of the last weeks, sorts each day's 24 hours, and reads what the best 1, 2, 3 … hours actually paid and what the cheapest 1, 2, 3 … hours actually cost. A factor of 1.000 is the standard case where both grid connections equal the installed power — the "captured fraction" slider further down already contains that case's own dilution, so this factor adds only the extra loss caused by a smaller connection. 0.914, for example, means you capture 91.4% of what the standard case captures.
Network operator (sets the two grid tariffs below)
Grid-billed share (% — storage nets in−out; billed only on the difference)100%
Electricity tax (€/MWh)1.01
Balancing portfolio (€/MWh)5
Land / premises rent (€/yr)15,000
General O&M (€/kWh·yr — maintenance, admin, insurance)5
All-in operating cost (excl. aggregator): –
COMMERCIAL STRUCTURE
PPA type
Floor level (€/MW·yr)50,000
Owner's profit share (of surplus above the floor)50%
PPA terms
Term 1 — years8
Term 2 — years (starts when term 1 ends)5
Term 2 — floor level (€/MW·yr)35,000
ENERGY ARBITRAGE (€/MWh)
Gross daily spreadℹ️The average day-ahead price gap inside one day (highest hour minus lowest hour) in Latvia, over the last 3 months of live data — currently €170/MWh. It is recomputed every time the report rebuilds, so the business case always starts from the latest market rather than a number frozen when the page was written. The window matches the balancing-price window so every revenue line in the case is read off the same three months. Click "distribution" below the slider to see how those days were distributed and how much of the total value the expensive ones carry. This is the GROSS gap; what you actually earn is the captured fraction below.170
What it means: the gross daily spread is the theoretical gap between the day's lowest and highest price. A real battery never buys at the exact low and sells at the exact high — forecasting and dispatch are imperfect — so the captured fraction (~50–60%) is the share you realistically capture. The captured spread above is the resulting €/MWh that actually drives arbitrage revenue.
BALANCING MARKETℹ️The MW you may commit to reserve is limited by the smallest of the three power numbers — installed power, consumption connection, production connection. The reason: these products are two-directional. If the TSO buys 20 MW of reserve from you, it expects you to push 20 MW up (discharge) when the grid is short AND absorb 20 MW down (charge) when it is long. A 10 MW connection on either side therefore caps the whole commitment at 10 MW, even though the other side could do 20.
Capacity is a standing-ready price (€/MW·h). Activation is energy-when-called, so it mirrors arbitrage: gross spread × captured fraction = the captured €/MWh that drives revenue. Both are pre-filled from the price window above and editable; how often you're called is the separate activation rate below.
Balancing activation decline (%/yr — energy when called; volatility-driven)−0.5%/yr
The shares below are reserved power — it can't also arbitrage. Three levers shift the battery between energy and balancing: the shares (FCR/aFRR/mFRR %), capacity availability (hours that power is actually held), and the activation rate (cycles spent delivering energy when called). Turn any of them down → more cycles free up for arbitrage.
Capacity availability60%
What it means: the share of the year's 8,760 hours your committed MW is actually held / cleared in the reserve market — the asset's time-availability. It is not how much of the battery you offer (that's the FCR/aFRR/mFRR shares below). At the current setting ≈ 5,260 h/yr held.
Activation rate (aFRR, measured ~20%; mFRR auto ×0.4)30%
ON = forgo availability payments (FCR→0), keep activation only. Attractive when capacity prices are low.
FCR5%
aFRR (↑+↓)10%
mFRR (↑+↓)10%
ANNUAL TRAJECTORY & INFLATION
Cost inflation (%/yr — all operating costs escalate)2%/yr
The three decline rates above (arbitrage / capacity / activation) are Phase-1 (2026–30) rates; the scenario sets the full curve. Base case: arbitrage dips early as new storage saturates the spread (−0.5%/yr), then recovers later (+3→+5%/yr) as deeper renewables widen intraday volatility; capacity fell hard (saturation); activation is more resilient.
Price trajectory by year — view / edit each year's % change
Defaults follow the scenario's 3-phase curve (P1 2026–30 = the decline sliders above → P2 31–35 → P3 36+). Edit any cell — it overrides that year. Changing scenario or the sliders resets the table.
Site load as % of nominal power — scales with system size (30 MW → 25% = 7.5 MW). Edit to your site:
Summer day25% (5.0 MW)
Summer night15% (3.0 MW)
Winter day15% (3.0 MW)
Winter night15% (3.0 MW)
Peak / contracted power25% (5.0 MW)
Weekly intensity (operating days/week — 5 = 2 days off)5 days
Avoided import (€/MWh)100
Demand charge (€/kW/mo)2.8
FINANCING (for IRR)
Gearing (debt share)75%
Loan rate5.5%
Loan term8 yr
Cost (LCOS)
–
Captured /MWh
–
Margin / MWh
–
Net revenue / yr
–
CapEx · payback
–
Project IRR (unlev.)
–
Equity IRR (lev.)
–
DSCR (min · avg, loan yrs)
–
Behind-the-meter benefit / yr (self-consumption + peak-shaving)
–
–
Daily spread — distribution
🔒 The full line-by-line calculation is locked. The base case is fixed at the standard 20 MW setup; the cumulative-net / energy / CapEx chart below stays live.
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.
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.
Instant access — choose your tier
Pay by card and your access key arrives by email immediately. The key is valid for 7 days from purchase, after which the report locks again. Payments are collected by SIA "Oda fabrica", VAT reg. LV40103169332; a VAT invoice is issued automatically.
Tier 1 — full calculatorEdit every variable + see the full line-by-line calculation.€300+ VAT 21%€363.00 incl. VAT
Tier 2 — + financials exportEverything in Tier 1, plus the full financials as a downloadable Excel/CSV.€350+ VAT 21%€423.50 incl. VAT
Tier 3 — + market data & studyEverything in Tier 2, plus the full market-data export and the feasibility study.€400+ VAT 21%€484.00 incl. VAT
Secure card payment via Stripe. A VAT invoice is issued automatically — companies enter their name and VAT / registration number on the payment page; private individuals simply pay. Payments go to SIA Oda Fabrica.
Prefer a bank transfer or a longer engagement? Write to contact@odafin.eu