Every commercial battery decision eventually comes down to one number: when does the hardware pay for itself? The vendors will show you optimistic scenarios. We'll show you how the math actually works for a 200 kWh system installed in Bavaria in 2025 — including the parts that reduce your returns and what stacking three revenue streams does to the timeline.
This is a worked example, not a marketing sheet. The input assumptions are grounded in H1 2025 market data from EPEX SPOT and regelleistung.net. The numbers are realistic for a mid-size commercial operator with a well-managed C&I load profile and access to proper metering infrastructure.
System Specification and Capital Cost
The system we're modeling: a 200 kWh / 100 kW lithium iron phosphate (LFP) battery storage system, meaning a 2-hour storage duration at C0.5 continuous discharge. LFP chemistry is the default for commercial-scale BESS in Germany right now — better cycle life than NMC, and cycle degradation matters when you're planning 400–600 full equivalent cycles per year.
Capital and installation costs
| Cost component | Amount (EUR) | Notes |
|---|---|---|
| Battery hardware (200 kWh LFP, incl. BMS) | €120,000 | ~€600/kWh at 2025 pricing |
| PCS / inverter (100 kW bidirectional) | €18,000 | SMA or equivalent grid-tied PCS |
| Installation and civil works | €14,000 | Includes protection relay, grid connection |
| SCADA / control hardware | €4,500 | PLC + communication gateway for BESS API |
| Grid operator notification and metering | €2,800 | MeLo registration, smart meter upgrade |
| Commissioning and testing | €3,200 | Includes FCR prequalification test run |
| Total installed CAPEX | €162,500 |
These figures assume no KfW financing and no BAFA subsidy (both were under revision during H1 2025). If you do access KfW 270 or a state-level BayernFonds program, knock 10–15% off CAPEX. If you don't, plan for the full number.
Revenue Stream 1: FCR Availability Payments
FCR (Frequency Containment Reserve) is the most predictable revenue source for a commercial BESS. You're not predicting prices — you're being paid to hold symmetric capacity available. Participation is via weekly tender on regelleistung.net, bids in MW of symmetric power, and settlement is availability-based regardless of how often the grid actually calls on you.
For 100 kW bidirectional, you can offer 100 kW of FCR symmetrically. The constraint: FCR requires ±100% power within 30 seconds of frequency deviation, and the system must maintain the capability with SOC between roughly 20–80% to guarantee symmetric response in both directions.
FCR revenue estimate (2025 market)
| Parameter | Value |
|---|---|
| Offered capacity | 100 kW symmetric |
| Average FCR price, H1 2025 (regelleistung.net) | ~€7.80/MW/h |
| Hours per year (full availability assumed) | 8,760 h |
| Availability factor (accounting for maintenance windows) | 94% |
| Annual FCR revenue | ~€64,200 |
The €7.80/MW/h average is consistent with the 2025 FCR market where increased BESS participation has compressed prices relative to 2022–2023 peaks. Some weeks traded above €10, some below €6. The 94% availability assumption allows for scheduled maintenance, firmware updates, and the occasional forced outage. If you're running with zero maintenance windows, you could push closer to 97% — but don't model that in your business case.
Revenue Stream 2: EPEX SPOT Intraday Trading
The second revenue source requires active dispatch. Every 15 minutes, EPEX SPOT clears intraday prices. The spread between the lowest and highest price in a given day is your theoretical opportunity. The realistic share of that spread you capture depends on your dispatch timing, your SOC headroom, and whether you're already partly committed to FCR.
The FCR-spot stacking constraint matters here. When offering 100 kW FCR, your system needs to hold ≥20% and ≤80% SOC to maintain symmetric reserve. That limits your usable window for deep charge/discharge cycles. In practice, with active SOC management, you can still extract meaningful spot spreads by operating in the 25–75% band and timing charge cycles around FCR deactivation windows or off-peak tenders.
Spot trading parameters (Bavarian grid connection assumed)
| Parameter | Value |
|---|---|
| Usable capacity for spot (FCR-constrained) | ~100 kWh effective |
| Average captured spread, 2025 model | €45/MWh |
| Full equivalent cycles used for spot per year | 220 |
| Round-trip efficiency (LFP, PCS losses) | 88% |
| Grid use fee on discharge (§14a EnWG context) | €0.5/MWh discharged |
| Annual spot trading revenue (net) | ~€38,500 |
The €45/MWh captured spread is conservative relative to what aggressive intraday trading produced in 2024 (the negative price days alone were significantly larger opportunity). But for a business case, you want a number you can defend in a bad year, not the median of a volatile distribution.
Revenue Stream 3: Leistungspreis Peak Shaving
For most commercial facilities in Bavaria on a Niederspannung or Mittelspannung tariff, the Leistungspreis (demand charge) is billed on the peak 15-minute demand reading each month. The Leistungspreis in Bavaria varies by Verteilnetzbetreiber — the model uses €120/kW/year, which is representative of a southern German urban/industrial grid connection.
Peak shaving value depends on how peaky your load profile is. If your facility already runs at fairly flat demand, the battery has less headroom to shave. The scenario here assumes an industrial or logistics facility with a demand profile that produces monthly peaks 20–30% above average demand — typical for facilities with electric forklift charging, compressed air, or HVAC-driven peaks.
Peak shaving calculation
| Parameter | Value |
|---|---|
| Contracted demand | 300 kW |
| Typical monthly demand peak (before shaving) | 280 kW |
| Achievable reduction with 100 kW / 200 kWh | ~55 kW (19.6% reduction) |
| Leistungspreis rate | €120/kW/year |
| Savings adjusted for peak coincidence factor | ~80% of theoretical |
| Annual peak shaving value | ~€5,280 |
Peak shaving is the smallest of the three streams for this system size — and that's by design. At 200 kWh / 100 kW, FCR and spot are the primary revenue drivers. Peak shaving supplements rather than anchors the case. For facilities with a Leistungspreis above €200/kW/year or with much larger contracted demand, this calculus changes significantly.
The Stacked Annual Revenue Model
| Revenue stream | Annual revenue (EUR) | Share of total |
|---|---|---|
| FCR availability payments | €64,200 | 58% |
| EPEX SPOT intraday trading | €38,500 | 35% |
| Leistungspreis peak shaving | €5,280 | 5% |
| Ancillary benefits (avoided grid fees, §14a) | ~€2,000 | 2% |
| Total gross annual revenue | €109,980 |
Deducting Operational Costs
Gross revenue isn't what you take home. OPEX needs to come out of the model or your payback calculation is fiction.
| OPEX line item | Annual cost (EUR) |
|---|---|
| Software platform and market access fee | €6,500 |
| Preventive maintenance contract (inverter + BMS) | €3,200 |
| Insurance (battery storage coverage) | €1,800 |
| Metering and communication (SmartMeter, SIM) | €600 |
| Battery degradation reserve (2% per year) | €3,250 |
| Total annual OPEX | €15,350 |
The degradation reserve deserves explanation. LFP batteries at 400 cycles/year degrade roughly 1.5–2.5% capacity per year. We're setting aside 2% of hardware CAPEX annually to cover a partial cell replacement or capacity rebalancing around year 7–8. If you don't account for this, your year 9 revenue numbers will be wrong because the battery won't hold the capacity you're modeling.
Payback Timeline
| Metric | Value |
|---|---|
| Total installed CAPEX | €162,500 |
| Total gross annual revenue | €109,980 |
| Total annual OPEX | €15,350 |
| Net annual cash flow | €94,630 |
| Simple payback period | 1.72 years |
| IRR (10-year model, 2% revenue decline/yr) | ~58% |
The 1.72-year payback is real for this parameter set — but it requires stacking all three revenue streams and achieving FCR availability close to 94%. If you only run FCR and skip spot trading, payback stretches to about 3.2 years. If FCR prices fall to €5/MW/h (which happened briefly in 2024 during compressed tender periods), add another six months.
What This Model Does Not Include
We're not saying this model is complete. There are scenarios where these numbers look worse:
- Grid congestion penalties: Redispatch calls from the TSO or DSO can curtail your discharge at exactly the moments you'd planned to sell. We haven't modeled this because Bavaria has relatively low congestion frequency, but it's real in Amprion-adjacent grid zones.
- FCR market saturation: If installed BESS capacity in the German FCR market continues growing at 2024-2025 rates, clearing prices in 2027–2028 could compress further. Model with a 5% annual price decline assumption if you're doing a 10-year projection.
- Energy community regulations: Changes to §14a EnWG steuerbare Verbrauchseinrichtungen rules could affect both the cost of grid fees and the framework for demand response value. The regulatory environment is in motion.
- Financing costs: The model uses unlevered CAPEX. If you're borrowing at 5.5% over 7 years, the effective payback in cash terms extends by roughly 0.4 years on this CAPEX size.
The point isn't to present a guaranteed outcome — it's to show which inputs matter most. FCR pricing and availability are the dominant variables. Get those right and the rest follows. Get those wrong and a spreadsheet full of optimistic spot spreads won't save the business case.
Using the encosa Calculator
The model above is a static snapshot. What encosa tracks in real time is the dynamic interaction between FCR SOC constraints, intraday price movements, and peak shaving triggers simultaneously. When FCR deactivation windows open up in a low-frequency week, the system shifts SOC to widen the spot trading band. When EPEX negative prices appear, it front-loads charge and defers FCR commitment.
The revenue calculator on the encosa platform lets you input your actual system specifications, grid connection tariff, and facility load profile and models these interactions against historical EPEX and regelleistung.net data. The output is a site-specific payback model, not a generic template. If the numbers above are directionally useful but you need precision for a financing decision, that's where you should start.