How We Calculate UK Tariff Costs

The full method behind every comparison on this site.

The short version

Mainstream comparison sites estimate your bill by multiplying your annual kWh by an average rate. That works for boring single-rate tariffs. It breaks completely on time-of-use tariffs like Octopus Cosy, on dynamic tariffs like Octopus Agile, and on any household where when you use electricity matters as much as how much.

We do it differently. We take your real half-hourly smart meter readings - 48 slots per day - and price every slot at the rate that tariff was actually charging in that slot. Then we sum the slots and add the standing charge. We do that for every tariff in your DNO region, and rank the results.

It's the same calculation your supplier does for billing. Just applied to every tariff at once, so you can see exactly which one would have cost you the least.

The calculation, in four steps

STEP 1
Load your slots

Your half-hourly meter readings are loaded for the period being compared - 48 slots per day, stored in UTC.

STEP 2
Map slot to rate

For each slot, the rate the tariff was charging at that moment is looked up - either fixed, time-banded, or dynamic.

STEP 3
Sum and add standing charge

slot kWh × slot rate, summed across the period, plus the tariff's daily standing charge for each day.

STEP 4
Rank by total cost

Repeat for every tariff available in your DNO region. Cheapest wins.

How each tariff type is modelled

Standard (single-rate) tariffs

The simplest case. Every slot's rate is the same flat unit rate, so the calculation reduces to: total kWh in the period × unit rate, plus the standing charge for each day in the period. This is identical to how your supplier bills a single-rate tariff.

Economy 7

Economy 7 splits each day into a day rate and a night rate, with the night window running for a continuous 7-hour period overnight. The exact night window varies by region and supplier - we apply the actual night window published by the supplier for your region.

For each slot, we look up whether that slot falls inside the night window (cheap rate) or outside it (day rate), then price the slot accordingly. Slots that straddle the boundary are handled correctly - a 30-minute slot starting 15 minutes before the boundary is split.

Time of Use (Cosy, GoElectric, etc.)

Time of Use tariffs have multiple rate bands - typically a peak window, an off-peak window, and sometimes a super-cheap overnight window. Each band has a fixed start and end time in UK local time.

For each slot, we look up which band the slot falls inside (e.g. "peak 4 - 7 pm", "off-peak 10 pm - 5 am"), then price the slot at that band's rate. Slots that straddle a band boundary are split. The standing charge is applied once per day, on top of the summed slot costs.

Dynamic (Agile, Tracker, FreePhase)

Dynamic tariffs have rates that change every 30 minutes or every day, tied to the wholesale electricity market. For tariffs like Octopus Agile, that means 48 different rates per day, published a day in advance. For Tracker-style tariffs, the rate changes once per day based on the wholesale price for that day.

For each slot, we look up the dynamic rate that applied at that exact moment - the same rate the supplier actually used to bill you (or would have used, if you'd been on that tariff). Negative rates, which Agile occasionally produces during high-renewable conditions, are handled correctly - they reduce your bill.

Why this beats "average household" comparisons

A typical price comparison site treats your annual kWh as a single number and divides it across a generic load profile - often the Ofgem "typical domestic consumption" figure of around 2,700 kWh per year. They then multiply that profile by each tariff's average rate and call it a comparison.

For a single-rate tariff, that approach is roughly accurate. For anything else, it's misleading - sometimes by hundreds of pounds.

A worked example: a heat pump that runs during a tariff's peak window costs the household significantly more than the same kWh spread across the day. The average-rate method cannot see that. The half-hourly method can.

Technical detail - timezones, DST, partial-period extrapolation
UTC slots vs UK local time

Half-hourly meter readings from the UK DCC are recorded in UTC. Time-of-use band times published by suppliers (e.g. "Cosy peak 4 - 7 pm") are in UK local time, which is GMT in winter and BST in summer. The comparison engine converts each UTC meter slot to local time before matching it to a TOU band, so a 4:30 pm BST slot is correctly priced at the peak rate even though its UTC timestamp reads 3:30 pm.

DST transition days

On the spring-forward day in late March, the UK day loses one hour - so there are only 46 half-hourly slots, not 48. On the autumn-back day in late October, the day gains one hour, giving 50 slots. Both cases are handled correctly.

We use a 46-slot threshold (not 48) as the boundary for "this was a complete day" - so DST spring-forward days are not accidentally treated as partial / incomplete days.

Standing charge proration

Standing charges are charged per day, regardless of usage. We apply one full day's standing charge for each calendar day in the period - including the DST days, which still count as billable days even though they have 46 or 50 slots.

Partial-month extrapolation

If a comparison period is partly missing data (e.g. you have meter readings for the first 20 days of the month but not the rest), we extrapolate from the days we do have to estimate the full month. Results based on extrapolation are clearly labelled in the UI with a coverage badge showing the percentage of the period that was actually measured.

Where two or more tariffs are within a few percent of each other on cost, we recommend re-running the comparison once you have a full month of data. Extrapolation is fine for ranking but less precise for absolute pounds-and-pence.

Rate version history

Every supplier rate change is recorded with the date it took effect. When you compare a period from six months ago, the rates that were actually in effect six months ago are used - not today's rates. This means historical comparisons reflect what you would actually have paid, not what you would pay today.

Rate band straddling

A small number of TOU band start/end times do not land exactly on a half-hour boundary (for example, a band that starts at 4:00 pm and ends at 7:00 pm aligns fine; a band that ends at 7:30 pm but starts on the half-hour aligns fine too). For any band edge that does not align, the slot is split proportionally between the two adjacent bands.

Where the rates themselves come from

Refresh schedule, supplier APIs, independence policy, and failure handling are documented on the data sources page.

What we do not model

Being honest about what the comparison covers is more useful than pretending it is complete. The following are intentionally outside scope:

  • Future rate changes announced but not yet in effect. We apply each tariff at the rates that were live during the period being compared.
  • Exit fees on your current tariff if you switch away. Always check your current contract before switching.
  • Non-standard meter setups outside the published tariff structure - e.g. dual-rate meters with custom band schedules that the supplier negotiated individually.
  • Welcome credits and one-off promotional offers that depend on signup behaviour rather than rate structure.
  • Gas usage and dual-fuel discounts - this is an electricity-only comparison.
  • Feed-in tariff payments for solar export.

Comparisons are estimates based on the rates and meter data available at the time. Nothing on this site constitutes financial advice. Always verify rates directly with the supplier before switching.