Understanding the Tibber price model (Germany)

New Tibber customer here waiting for my Pulse to arrive while trying to understand the Tibber price model in Germany to the last detail. :slight_smile:

My following ruminations are only relevant for Tibber customers in Germany.

The price components are:

Epex spot market price plus

VAT included, source: Wie setzt sich der Strom-Einkaufspreis zusammen? | Tibber Support Center):

  • 0.22 Cent/kWh (was: 0.2 Cent/kWh) for certificates (proof of origin) (Herkunftsnachweise)
  • 0.7 Cent/kWh additional procurement costs (weitere Beschaffungskosten)
  • but: I was billed (for February 2023): 0.72 Cent/kWh, so continuing with 0.72 Cent/kWh instead of 0.22+0.7 Cent/kWh

VAT excluded, depends on location, source: local power grid operator:

  • 4.44 Cent/kWh grid usage fee/concession fee (Netznutzungsentgelt)
  • 1.99 Cent/kWh concession levy (Konzessionsabgabe)
  • 79.2 EUR/a grid usage fee (Netznutzungsentgelt)
  • 12.24 EUR/a metering point operation (Messstellenbetrieb)

VAT excluded, source: German government, valid for 2023:

  • 2.05 Cent/kWh electricity tax (Stromsteuer)
  • 0.591 Cent/kWh offshore grid levy (Offshore-Netzumlage)
  • 0.357 Cent/kWh Combined Heat and Power Act levy (KWKG-Umlage)
  • 0.417 Cent/kWh network fee regulation levy (NEV-Umlage)

Total cost/kWh:

Spot market price * 1.19 + ( 0.72 + 2.05 + 0.591 + 0.357 + 0.417 + 4.44 + 1.99 ) Cent * 1.19 =
Spot market price * 1.19 + 12.57235 Cent

… plus Tibber fee: 3.99 EUR/m
… plus grid usage fee and cost of metering point operation: (79.20 EUR/a + 12.24 EUR/a - price is for a Ferraris meter, price for a “moderne Meßeinrichtung” is moderately higher) * 1.19 / 12 = 9.07 EUR/m (depends on location, source: local power grid operator)

epexspot 2023-03-28 DE-LU 00:00-01:00: 7.868 Cent/kWh

7.868 Cent/kWh * 1.19 + 12.57235 Cent/kWh = 21.93527 Cent/kWh

Now let’s compare my calculations to the data from the Tibber API:

"today": [
                  "total": 0.2194,
                  "energy": 0.0787,
                  "tax": 0.1407,
                  "startsAt": "2023-03-28T00:00:00.000+02:00"

21.94 - 21.93527 Cent/kWh = 0,00473 Cent/kWh - close enough. :slight_smile:

Comparison to Tibber Price Calculator:

Perfect match for additional price components (12.57 ct/kWh), base price (Grundpreis) should be 9.07 EUR/m.

Edit #1:
According to Dein Stromvertrag für das digitale Zeitalter ⚡️ Tibber the price per kWh doesn’t include the grid usage fee (Netznutzungsentgelt) and the cost of metering point operation (Kosten für Messstellenbetrieb). I have updated the OP accordingly. Let’s wait for my first invoice from Tibber …

Edit #2:
Concession levy (Konzessionsabgabe) was missing in my calculations. Please note that the 0.2 cent/kWh for certificates has been raised to 0.22 cent/kWh. Calculations in OP updated.

Edit #3:
Don’t trust the metering point operation cost (see screenshot above). There is a reason for the asterisk: The costs shown refer to a Ferraris meter, billing is based on the actual type of your electricity meter (Ferraris meter, modern metering device, intelligent metering system).
The assumed energy consumption according to the dynamised Standardlastprofil (SLP, standard load profile) when Pulse is not used looks strange (real data from the Tibber API from Thursday 2023-02-16 to Tuesday 2023-02-28):

I would expect the hourly consumption to be almost identical for weekdays, Saturdays and Sundays respectively, with only minor differences due to the dynamisation of the SLP. However, this is obviously not the case.
I took the trouble to calculate the dynamised SLP for these days for my energy consumption (https://www.bdew.de/media/documents/Profile.zip):

Please note the similar shapes for weeksdays, Saturdays and Sundays respectively and the slight decrease of the maxima over the course of time.
Now let’s check the differences (blue: consumption billed - consumption calculated) and the spot market prices (red):

At a first glance, one could get the impression that consumption_billed > consumption_calculated when spot market price is high, but the absolutely astonishing result of epex_cost_consumption_billed - epex_cost_consumption_calculated is 21,5524 - 21,5667 EUR = -0,0143 EUR.
So it looks to me like the consumption billed is a randomisation of the real SLP while maintaining the total cost. Any ideas what might be the reason for this randomisation?
Why bothering at all? The goal is to calculate whether it is cheaper to use the Pulse or not. Obviously, using the Pulse is (currently) cheaper if you manage to charge your EV at night, but without an EV it isn’t obvious at all whether you benefit from using your Pulse or not.

Edit #4:
Instead of

I was billed 0,720 ct/kWh (for whatever reason …) for February. Calculations in OH corrected. Now dynamic cost/kWh calculated and advertised match to the cent.

Is your question answered with your edits?

I won’t think so hard about it:
if you’re already able to use the API (meaning, you already contracted with Tibber), you’ll find not only the net prices, but also your gross prices at your specific Messlokations-ID (don’t know, if there’s an equivalent to other countries for that monstrous name, it means your specific digital meter or smart meter with Pulse) already included in the API (and Tibber binding).

Tibber API for “current energy prices”:

  "data": {
    "viewer": {
      "homes": [
          "currentSubscription": {
            "priceInfo": {
              "current": {
                "total": 0.3073,
                "energy": 0.133,
                "tax": 0.1743,
                "startsAt": "2023-03-28T21:00:00.000+02:00"

Tibber binding currently only has total in its channels:

  • current_total
  • tomorrow_prices (in JSON: [{"startsAt":"2023-03-29T00:00:00.000+02:00","total":0.2651},....)

I think I’ve got it sorted. :slight_smile: The main difficulty was to obtain the locally variable price components.

The ‘energy’ value provided by the Tibber API is rounded, for validation purposes the ‘real’ values from epexspot should be used.

It might be useful to include the missing values in the Tibber binding, as the Tibber API does not provide historical energy (=spot market price) values (I might be wrong though - I haven’t checked Tibber Developer in detail).

Edit #1:

  viewer {
    homes {
      currentSubscription {
        priceInfo {
          range(resolution: HOURLY, last: 1000 ) {
            nodes { 

to get (rounded) historical spot market prices.

1 Like