It started with a negative number.
Last winter, I was checking the Octopus Agile app and saw an electricity price of -3p/kWh. The grid was paying me to use electricity. Wind generation had outstripped demand overnight and the wholesale price had gone negative. It lasted a couple of hours. But it planted a question: if electricity sometimes costs less than nothing, and sometimes costs 50-60p, what would happen if I could buy it when it was cheap and use it when it was expensive?
The answer, obviously, is a home battery. And I went deep on the research – the tariff maths, the hardware options, the automation software, the payback calculations. I wrote about that process in “Why I’m Installing a Home Battery in 2026,” and if you want the full picture of why home batteries make financial sense right now, that is the place to start.
But this piece is about what happened next. Because once I had done the research, I wanted to model my own situation precisely. And every calculator I found let me down.
The problem with every battery calculator
There are dozens of solar and battery calculators online. Most of them do the same thing: you enter your annual consumption, pick a tariff, and they estimate your savings. Some are more sophisticated than others. A few will model time-of-use tariffs with a day rate and a night rate.
None of them could do what I needed.
The issue is Octopus Agile. Agile does not have a day rate and a night rate. It has 17,520 different rates per year – one for every half-hour of every day, set by wholesale electricity prices. On a Tuesday in January, the rate at 4pm might be 58p. At 2am that same night, it might be 5p. On a windy Sunday in April, it might go negative for six hours straight.
No flat-tariff calculator can model this. The savings from a battery on Agile depend entirely on the spread between the cheapest and most expensive half-hours of each specific day, across an entire year. You need the actual rate data.
Intelligent Octopus Go is simpler – a flat 8p overnight and 33.72p during the day at my postcode (IGo rates vary by region, so check the Octopus app for your address) – but I wanted to compare it honestly against Agile. And I wanted to compare both against doing nothing. Not with back-of-envelope estimates, but with real rates and real consumption data.
So I built a simulator.
What it does
The Octopus Battery Simulator pulls 12 months of actual half-hourly Agile rates from the Octopus Energy API for your region. It then models eight scenarios across three tariffs, with and without a battery, with and without EV charging optimisation:
- Flat tariff, no battery – your current fixed-rate baseline
- Flat tariff, with battery – what a battery saves on a standard tariff (spoiler: not much)
- Agile, no battery – switching to Agile with no hardware changes
- Agile, with battery – the battery charges cheap and discharges expensive
- Agile, with battery + EV optimisation – the EV also charges during the cheapest slots
- Intelligent Go, no battery – the 8p/33.72p split without storage
- Intelligent Go, with battery – overnight charging displaces expensive daytime power
- Intelligent Go, with battery + EV optimisation – everything shifted to 8p
For the Agile scenarios, it simulates what Predbat does: for each day in the dataset, it identifies the cheapest half-hours for charging and the most expensive for discharging. It is not a theoretical average. It runs the calculation on every single day of real data.
You can adjust the battery size, round-trip efficiency, your consumption profile, and your EV charging load. And if you have your MPAN (the reference number on your electricity bill), you can pull your actual smart meter data from the Octopus API and use your real half-hourly consumption instead of an estimate.
It is pure Python, zero external dependencies, MIT-licenced, and open source. The code is at github.com/bigtreacle/octopus-battery-simulator and there is a hosted version at battery.bustamantedick.com if you just want to run the numbers without installing anything.
What I found
I plugged in my own consumption – around 9,000 kWh per year, with a high overnight baseload from a server rack that runs around the clock, and weekly EV charging sessions. The household is gas-heated, so the electricity covers computing, cooking, an EV, and everything else.
The first finding was not surprising: switching to Agile with no battery at all would save a significant amount compared to a standard fixed tariff – the simulator showed savings of around £1,100 per year for my consumption profile. Agile has averaged around 18p/kWh in London over the past 12 months, against a typical fixed rate in the mid-20s. For a household with a lot of overnight consumption, Agile is already cheaper because the cheap hours align with when the servers and fridge are drawing power anyway.
The second finding was the expected one: adding a battery on Agile makes it better. The battery charges during the cheapest slots – often around 5-10p in the small hours – and discharges during the 4-7pm peak when rates average above 30p. Over 12 months of real data, the spread between the cheapest 10% and most expensive 10% of half-hours averaged 32p. That is real money cycling through the battery every day.
The third finding surprised me.
Intelligent Octopus Go with a battery matched or beat Agile with a battery. I had expected Agile to win comfortably – it is the “advanced” tariff, the one that rewards active optimisation. But the real data told a different story.
On Intelligent Go, the spread between the night rate (8p) and the day rate (33.72p) is 25.72p, and it is guaranteed. Every day. Every season. No checking an app, no worrying about whether today’s Agile rates are good or bad. The battery charges at 8p overnight and displaces 33.72p power all day. The maths is the same whether it is a windy April or a still January.
On Agile, the spread varies. Some days it is excellent – 40p or more between the cheapest and most expensive slots. Other days, particularly in winter when demand is high and wind generation is low, the spread compresses. January in the dataset had no negative pricing hours at all and an average rate above 21p. The battery still helped, but its daily margin was smaller and less predictable.
When I ran both tariffs across a full year with the same battery size and consumption profile, the annual bills came out within a few hundred pounds of each other. Agile had a slight edge in some configurations, Intelligent Go in others. The gap was nothing like the clear Agile advantage I had expected.
That matters, because Intelligent Go is dramatically simpler to live with. There is no half-hourly price to monitor. There is no automation that needs to run perfectly every day. The battery charges overnight, discharges during the day, and the economics are predictable. If the two approaches deliver similar savings, simplicity wins.
Why this was not obvious from averages
Most analysis of Agile uses average rates – “the average overnight rate is X, the average peak rate is Y, therefore the spread is Z.” That is how I modelled it initially, and it looked like Agile was the clear winner.
The problem is that averages mask variability. An average overnight rate of 10p might be made up of some nights at 3p and some at 18p. On the nights when Agile is 18p and Intelligent Go is 8p, the fixed tariff is doing much better. On the nights when Agile goes negative, it pulls ahead. Over a year, these effects largely cancel out – which is why the two tariffs end up closer than average-based analysis suggests.
You can only see this by modelling every day individually, with real rates. Which is what the simulator does.
The negative pricing question
One argument for Agile is negative pricing – periods when the grid pays you to use electricity. Over the 12 months in the dataset – based on 12 months of Octopus Agile API data for London (Region C), April 2025 to April 2026 – there were 172 hours of negative pricing. That is real, and the simulator captures it: on those half-hours, charging the battery earns you money instead of costing it.
But 172 hours out of 8,760 is about 2% of the year. The financial impact is meaningful but modest – it improves the Agile case but does not transform it. And the structural trend is interesting: negative pricing is increasing as wind and solar capacity grows. If the UK hits 1,000 hours of negative pricing annually (some analysts project this within a few years), the Agile case strengthens considerably. The simulator will model this as it happens, because it always uses the most recent 12 months of real data.
What I learned about battery sizing
The simulator lets you adjust battery capacity, which answers one of the most common questions: how big should the battery be?
On Agile, there are diminishing returns beyond about 13 kWh for a household consuming around 9,000 kWh per year. The 13 kWh battery captures the most expensive peak hours. A larger battery captures additional hours that are only moderately expensive – the incremental saving is small.
On Intelligent Go, the picture is different. Every additional kWh of battery capacity displaces another kWh from the 33.72p day rate to the 8p night rate – a guaranteed 25.72p saving per kWh per day. A larger battery keeps paying back at nearly the same rate per kWh until it covers your entire daytime consumption. For my household, that inflection point was around 18-20 kWh.
This is exactly the kind of thing you cannot see from a flat-rate calculator. The optimal battery size depends on your tariff, your consumption pattern, and the real rate data for your region. The simulator shows you where the diminishing returns kick in for your specific situation.
How to use it
The quick version: Go to battery.bustamantedick.com, enter your annual consumption and region, and run the comparison. It takes about thirty seconds and gives you a reasonable estimate across all eight scenarios.
The accurate version: If you have an Octopus Energy account, you can enter your API key and MPAN to pull your actual smart meter data. The simulator then uses your real half-hourly consumption instead of an estimated profile. This matters because consumption shape – when you use electricity, not just how much – is what determines how much a battery can save you.
The self-hosted version: Clone the GitHub repo, and run it locally. Pure Python, no dependencies to install. The README walks through setup.
The code is MIT-licenced. Use it, fork it, improve it. If you find a bug or want to add a feature, pull requests are welcome.
What it does not do
A few honest limitations:
It does not model solar. This is a battery-and-tariff simulator, not a solar generation model. If you have panels, the economics change – solar self-consumption displaces grid power entirely, which is better than any tariff rate. But modelling solar output requires location, orientation, shading, and weather data that are outside the scope of this tool.
It does not predict future rates. The simulator uses 12 months of historical data. Past Agile rates do not guarantee future rates. If Agile rates change structurally – more negative pricing, higher peaks, different seasonal patterns – the next 12 months will look different from the last 12. The tool shows you what would have happened, not what will happen.
It does not account for battery degradation. LFP batteries typically retain 80% or more of their capacity at year 10, but the simulator models year-one performance. Over a decade, actual savings will be slightly lower than the modelled figures.
It is not financial advice. It is a calculator. The numbers are only as good as the inputs, and investment decisions should factor in things the simulator does not model: installation costs, warranty terms, your risk tolerance, whether you plan to add solar later, and whether you trust yourself to set up the automation.
Why open source
I built this because I needed it. The research told me a battery would save money, but I wanted to know how much, on which tariff, with my actual consumption. No existing tool could answer that question properly.
Once it worked, open-sourcing it was the obvious choice. Everyone considering a home battery faces the same question, and the answer depends on their specific situation – their region, their consumption, their tariff options. A simulator that uses real data and models real tariff structures is more useful to more people than any blog post full of averages.
If you are on the fence about a home battery, run your numbers. The answer might surprise you – it surprised me.
The simulator is at battery.bustamantedick.com and the source code is at github.com/bigtreacle/octopus-battery-simulator.
Sources
[1] Octopus Energy API – half-hourly Agile rates for all 14 UK regions. Product code AGILE-24-10-01. Historical data publicly available.
[2] Intelligent Octopus Go tariff rates – confirmed via Octopus Energy for the author’s postcode in South East England, April 2026. Night rate: 8.00p/kWh (23:30-05:30). Day rate: 33.72p/kWh. Rates are postcode-specific and vary by region.
[3] Negative pricing trends: Timera Energy, “Negative Prices Growing with RES in GB Power Market”; Bloomberg, “UK’s Surge in Negative Power Prices Opens Door to Battery Boom” (January 2026).
[4] Predbat – open-source battery automation for Home Assistant. Documentation. The simulator models a simplified version of Predbat’s charge/discharge optimisation logic.