The charge that cost twice what the app promised
It was a Tuesday morning in September when Ade's message arrived in our support inbox. She'd been charged £47.63 for a 20-minute top-up in central London. Our app had shown £24.80. She was furious, and rightfully so. Within hours, three more similar reports came in.
What we thought we were solving
When we launched Volta, the problem felt simple enough to articulate. EV drivers across the UK faced a fragmented mess: 40-plus charging networks, each with different pricing structures, each hiding costs behind confusing tariffs and fee schedules. You'd arrive at a charger thinking you'd pay £15, only to discover parking was another £8, idle fees kicked in after 30 minutes, and VAT was applied in ways you didn't anticipate.
So we built the app to show the total cost upfront. Not just the per-kilowatt-hour rate. Everything. Parking. Idle charges. Tax. All of it, before you arrived at the location.
The logic was sound. The execution, as it turned out, had a gap we'd missed entirely.
Where the numbers stopped adding up
Ade's case forced us to trace back through the data flow. She'd used a charger on our network list, checked the total cost we'd calculated, and proceeded. But between the moment our app pulled the pricing from that network's API and the moment she plugged in, the operator had updated their idle fee schedule. The network hadn't notified us. We weren't polling in real-time. Our cached pricing was now four hours old.
That was the first layer. The second was worse. For certain networks, we'd been pulling base rates correctly but hadn't accounted for dynamic pricing that kicked in during peak hours. The charger operator applied surge pricing at 8 am to 6 pm weekdays, but their API documentation buried this in a separate endpoint we weren't reading. We were reading the off-peak rate and assuming it applied all day.
By the time we'd mapped out all three networks involved in those four complaints, we'd found the pattern: we were building a true total cost promise, but our data pipeline had blind spots. Networks update prices asynchronously. Some charge idle fees only after a certain threshold. Others apply time-of-use multipliers we weren't capturing. A few, frankly, have pricing terms so opaque that even their own API documentation is unclear.
The rebuild that took six weeks
We had a choice. We could either hide uncertainty ('Sorry, real-time prices not available for this location') or we could rebuild the pipeline to be honest about what we actually knew and when.
We chose the harder path.
First, we reached out directly to every network. Not the support email that disappears into a queue, but the product and operations teams. We asked for their actual pricing logic in structured format. Some were brilliant. Instavolts and Gridserve have well-documented APIs. Others took negotiation. A couple sent spreadsheets. One sent a PDF and a phone number.
Then we rebuilt how the app handles real-time updates. Instead of caching network prices for four hours, we now pull pricing 30 seconds before you trigger the cost calculation. Journey planning does two passes: an initial route with cached data (so it loads fast), then a real-time refresh 10 seconds before you tap 'Confirm Journey'. On the map, every charger now shows a timestamp of when we last verified its cost. If it's older than five minutes, we mark it clearly.
For the idle fees and dynamic pricing we couldn't reliably predict, we stopped pretending. The app now shows the base cost in solid figures, then flags which networks add idle charges (and approximately when those kick in), and which ones apply peak-hour pricing. You see the range, not a false certainty.
What we learned from Ade and the others
The most useful thing those complaints taught us wasn't technical. It was that trust evaporates the instant the numbers don't match. EV drivers are already making a thousand small friction decisions every day with electric cars. Range anxiety, charging anxiety, cost anxiety. We added to that burden by showing a number we couldn't guarantee.
What changed is simpler than it sounds: we now separate what we know (the per-kWh rate, the parking fee structure, whether idle charges apply) from what we're inferring (total cost across your full session). The app is clearer about uncertainty. Chargers with stable, documented pricing show exact totals. Chargers with dynamic or variable components show you the range and the factors that affect it.
We also added receipt export and cost-centre reporting for fleet managers. If you're managing a company's charging spend, you need to see what you actually paid, not what the app predicted. That real data is now pulled directly from the networks' billing APIs so it matches your invoice exactly.
The conversation that didn't end
I emailed Ade a month after her complaint. We'd refunded her, obviously, but I wanted to know if the rebuilt app worked better. She replied. She'd been using it since the update, and the predictions now matched her receipts within a couple of pence. She asked a good question, though: 'Why can't all the networks just publish their full pricing upfront?' The honest answer is that some of them benefit from the opacity. Dynamic pricing makes them more money. Idle fees are incentive structures in disguise. But that's not a Volta problem to solve. That's a network problem.
What we can control is being direct about what we know, and clear about what we don't.
If you're mapping a route across the UK and expecting the cost on screen to match the bill in your wallet, that reasonable expectation should never cost you twice what you were promised. How many other apps in your phone are doing the same thing we were doing, showing you confidence they can't actually back up?
Ready to try Volta by MRVL?
One tap to download. No sign-up wall.