Dynamic vs Fixed Tariffs

How the engine handles flat and dynamic electricity tariffs, and why the tariff type can dramatically affect battery value and payback period.


Tariff types

The tariff object in a scan request supports two modes:

TypeFieldDescription
"flat"flatRateCentsPerKwhA single price per kWh, constant across all hours
"dynamic"dynamicRateTypeHourly wholesale prices from EPEX Day-Ahead

The tariff type fundamentally changes how the engine values self-consumption, feed-in, and battery operation.


Flat tariff modelling

With a flat tariff, every kWh has the same value regardless of when it is consumed or exported:

import_cost[h]  = grid_import[h] × flat_rate
export_value[h] = grid_export[h] × feed_in_rate

The flat feed-in rate defaults to EUR 0.10/kWh (configurable via feedInEurPerKwh). With a flat tariff, the only economic benefit of solar is the spread between the import rate and the feed-in rate. Batteries provide limited additional value because there is no price variation to exploit.


Dynamic tariff modelling

With dynamic tariffs, the engine uses historical hourly wholesale prices from EPEX Day-Ahead for the Netherlands:

import_cost[h]  = grid_import[h] × spot_price[h] × (1 + markup)
export_value[h] = grid_export[h] × spot_price[h]

Spot prices vary significantly: negative prices (you get paid to consume) can occur during windy/sunny periods, while evening peaks can reach EUR 0.50+/kWh.

Price distribution (typical year)

  • Name
    minimum
    Type
    EUR/kWh
    Description

    -0.05 to 0.00 (negative during oversupply)

  • Name
    median
    Type
    EUR/kWh
    Description

    0.08 – 0.12

  • Name
    p95
    Type
    EUR/kWh
    Description

    0.30 – 0.50

  • Name
    maximum
    Type
    EUR/kWh
    Description

    0.80+ (rare peak events)

Dynamic tariff request

{
  "tariff": {
    "type": "dynamic",
    "dynamicRateType": "EPEX"
  }
}

Battery arbitrage

Batteries become significantly more valuable with dynamic tariffs because they can exploit price spreads:

  1. Charge the battery during low-price hours (midday solar surplus, or negative-price hours)
  2. Discharge during high-price evening peaks

The engine optimizes this hourly dispatch automatically. Typical arbitrage revenue:

ConfigurationAnnual arbitrage value
5 kWh battery, dynamic tariffEUR 200 – 350 / year
10 kWh battery, dynamic tariffEUR 350 – 500 / year
5 kWh battery, flat tariffEUR 50 – 100 / year

Feed-in compensation

How exported solar energy is valued differs by tariff type:

Tariff typeFeed-in rateNotes
FlatUser-configurable (default EUR 0.10/kWh)Set via feedInEurPerKwh in the tariff object
DynamicHourly EPEX base price (clamped ≥ 0)Raw spot wholesale, excl. taxes — auto-calculated

With dynamic tariffs, the engine may recommend a battery specifically to avoid exporting during low-price hours and instead discharge during high-price hours.


Impact comparison

The tariff type affects multiple scan outputs:

MetricFlat tariffDynamic tariff
Annual savingsPredictable, moderateHigher variance, often higher mean
Payback periodLonger (less savings)Shorter (more savings from arbitrage)
Battery ROILow (no price spread)Significant (price arbitrage)
Optimal battery sizeOften 0 or minimalLarger batteries economically justified
Self-sufficiencySameSame (physical, not economic)
CO₂ savingsSameSame (based on kWh, not price)

Was this page helpful?