EV charging subscriptions: which one saves you money?
Type how much you charge at rapid chargers each month and see whether an IONITY, Tesla, bp pulse, GRIDSERVE, Shell, Fastned or Be.EV subscription would save you money, with each network's prices checked in October 2026.
Most of the big rapid charging networks sell a monthly subscription that lowers the price of every kWh. Whether one saves you money depends on how much you charge with that network. Type the miles or kWh you charge at rapid chargers in a month and choose the network you use most. The calculator compares paying as you go with each of its subscriptions, shows the point at which each one pays for itself, and works out the same charging on the other networks.
The subscription calculator needs JavaScript switched on in your browser.
How the subscriptions work
You pay a fixed fee each month, and every kWh you charge with that network costs less. The subscription pays for itself once the money you save on each kWh adds up to more than the fee. So the point at which it pays for itself is the fee divided by the saving per kWh.
For example, IONITY Power costs £10.50 a month and lowers IONITY’s app price from 79p to 47p a kWh, which saves 32p on every kWh. It pays for itself from £10.50 ÷ 32p = 33 kWh a month. In a car that does 3.5 miles per kWh, that is about 115 miles of rapid charging a month.
Be.EV’s Go and Go Further passes work differently. The monthly fee includes a set amount of charging, and after that each kWh costs 49p. A pass is worth having when the charging you would otherwise pay for costs more than the fee.
Worked example: 350 miles a month
A car that does 3.5 miles per kWh needs 350 ÷ 3.5 = 100 kWh for 350 miles. At IONITY:
- Paying as you go in the app: 100 × 79p = £79.00 a month.
- IONITY Motion: £5.49 + 100 × 59p = £64.49 a month.
- IONITY Power: £10.50 + 100 × 47p = £57.50 a month, which is £21.50 a month (£258 a year) less than paying as you go.
For only 70 miles a month (20 kWh), paying as you go costs £15.80, and both plans cost more: Motion £17.29 and Power £19.90. At IONITY’s prices, paying as you go is cheapest up to 27 kWh a month, Motion from 28 to 41 kWh, and Power from 42 kWh.
UK rapid charging subscriptions compared
| Network | Price without a subscription | Subscription | Price with it | Pays for itself from |
|---|---|---|---|---|
| IONITY | 79p in the app (83p by card) | Motion: £5.49 a month | 59p | 28 kWh a month (about 100 miles) |
| IONITY | 79p in the app | Power: £10.50 a month | 47p | 33 kWh (about 115 miles) |
| Tesla Supercharger | 69p for other cars at peak times | Supercharging Membership: £8.99 a month | 48p | 43 kWh (about 150 miles) |
| bp pulse | 89p | Subscription: £7.85 a month, first month free | 69p | 40 kWh (about 140 miles) |
| GRIDSERVE | 85p to 92p in the app | GRIDSERVE Plus: £7.99 a month | 25% off: 64p to 69p | 35 to 38 kWh (about 120 to 130 miles) |
| Shell Recharge | 64p to 79p in the Shell App | Subscription: £9.99 a month | 30% off: 45p to 55p | 43 to 53 kWh (about 150 to 185 miles) |
| Fastned | 71.1p in the app (79p standard) | Gold: £4.99 a month until early 2027 | 55p | 31 kWh (about 110 miles) |
| Be.EV | 59p to 89p | Flexi Pass: £13.99 a month | 39p | 28 to 70 kWh (about 100 to 245 miles) |
| Be.EV | 59p to 89p | Go Pass: £49 a month with 120 kWh included | Then 49p | 56 to 84 kWh (about 195 to 295 miles) |
| Be.EV | 59p to 89p | Go Further Pass: £89 a month with 250 kWh included | Then 49p | 100 to 151 kWh (about 350 to 530 miles) |
Prices per kWh include VAT and were checked on 28 October 2026. Miles are for a car that does 3.5 miles per kWh. Where a network’s price depends on the site, the figures cover its range. Be.EV’s Go Further pass only costs less than the Go pass above about 202 kWh a month, and its Flexi pass costs less than the Go pass below about 90 kWh.
Networks without a subscription
- InstaVolt: 92p a kWh from 7am to 8pm, and at any time when you pay by card. In the InstaVolt app it is 55p from 8pm to 7am.
- Osprey: in the Osprey app, 82p on weekdays from 7am to 8pm, 79p at weekends and 69p overnight (8pm to 7am). Paying by card costs 89p.
- MFG EV Power: 69p to 79p, depending on the site.
Cheaper times to charge
Several networks charge less at night, with or without a subscription:
- InstaVolt: 55p from 8pm to 7am in the app.
- Osprey: 69p from 8pm to 7am in the app.
- Be.EV: 49p from 7pm to 7am for anyone using the Be.EV app or card.
- Shell Recharge: Night Saver prices from 60p between 7pm and 7am at some sites, and from 42p with a subscription.
- Tesla: lower off-peak prices, set for each Supercharger. The Tesla app shows them.
If you can charge at home, that is cheaper still. Electricity on the energy price cap costs 26.32p a kWh from 1 October to 31 December 2026, about a third of the price at most rapid chargers. A subscription mainly helps drivers who cannot charge at home, or who make long trips often.
Before you subscribe
- Each subscription only works on its own network. If you use several networks, work each one out separately, with the charging you do on that network.
- Cancelling: IONITY’s monthly plans, GRIDSERVE Plus, Tesla’s membership and Be.EV’s passes can be cancelled at any time. Fastned Gold can be cancelled after 30 days. bp pulse gives the first month free.
- Limits: Shell’s 30% discount covers up to 1,000 kWh a month. Fastned Gold covers up to three cars in a household, and one Tesla membership covers all your cars.
- Offers end: Fastned Gold is £4.99 a month until early 2027.
- Prices change: networks change their prices often, and some charge more at some sites. Check the price in the network’s app before you subscribe, and type it into the calculator.
Questions people ask
Is IONITY Power worth it?
Only if you charge about 42 kWh a month or more at IONITY, which is about 145 miles in a car that does 3.5 miles per kWh. Between 28 and 41 kWh a month, the cheaper Motion plan saves more. Below 28 kWh, paying 79p in the app is cheapest.
Is a Tesla Supercharging Membership worth it for a non-Tesla car?
At the peak prices in Zapmap’s September 2026 survey, 69p without a membership and 48p with one, the £8.99 membership pays for itself from about 43 kWh a month, roughly 150 miles. Tesla sets the price for each site and time of day, so check the Tesla app for the Superchargers you use.
Can I use one subscription on every network?
No. Each subscription lowers the price only at that network’s own chargers. Charging elsewhere costs that network’s normal price.
To work out what a single journey costs in an electric or petrol car, use the journey cost calculator. More free calculators are on the free tools page.
Sources
Each network’s own prices, checked on 28 October 2026: IONITY subscriptions (United Kingdom); bp pulse pricing; GRIDSERVE pricing; Shell Recharge pricing; Fastned prices and subscriptions; Be.EV charging passes and Be.EV pricing; InstaVolt pricing terms; Osprey pricing; MFG EV Power; Tesla: Supercharging other EVs. Tesla’s and Shell’s typical prices: Zapmap: rapid charging, top 10 network pricing (September 2026). Tesla’s membership fee: carwow: electric car charging subscriptions. Home electricity: Ofgem: energy price cap, 1 October to 31 December 2026.
Braindumps checks these prices every month and updates the calculator when they change.
Use this calculator on your own site
You are welcome to use this calculator on your own website. Copy the code below into a Custom HTML block in WordPress, or into any web page. It needs no other files. The prices in it were checked on 28 October 2026 and do not update themselves, so change them in the code when the networks change theirs. We only ask that you keep the link to Braindumps at the bottom.
<!-- Braindumps EV charging subscription calculator (UK). Self-contained: no external files. Prices were checked on 28 October 2026 and change often: type the price your app shows. -->
<div id="bd-evs">
<style>
#bd-evs{--bd-red:#d63333;--bd-line:rgba(127,127,127,.35);--bd-soft:rgba(127,127,127,.08);font:inherit;color:inherit;max-width:760px;margin:1.5em 0}
#bd-evs *{box-sizing:border-box}
#bd-evs [hidden]{display:none!important}
#bd-evs fieldset{border:1px solid var(--bd-line);border-radius:10px;padding:14px 16px 6px;margin:0 0 14px;min-width:0}
#bd-evs legend{font-weight:700;padding:0 6px}
#bd-evs .row{display:grid;grid-template-columns:1fr 1fr;gap:10px 16px}
@media (max-width:560px){#bd-evs .row{grid-template-columns:1fr}}
#bd-evs label{display:block;font-size:.92em;margin-bottom:10px}
#bd-evs .hint{display:block;opacity:.7;font-size:.88em}
#bd-evs input,#bd-evs select{width:100%;padding:8px 10px;margin-top:4px;border:1px solid var(--bd-line);border-radius:6px;font:inherit;background:transparent;color:inherit}
#bd-evs select option{color:#1d1d22;background:#fff}
#bd-evs .seg{display:flex;flex-wrap:wrap;gap:8px;margin:2px 0 12px;border:0;padding:0}
#bd-evs .seg label{display:flex;align-items:center;gap:6px;margin:0;padding:8px 14px;border:1px solid var(--bd-line);border-radius:999px;cursor:pointer;font-size:.95em}
#bd-evs .seg input{width:auto;margin:0;accent-color:var(--bd-red)}
#bd-evs .seg label:has(input:checked){border-color:var(--bd-red);background:var(--bd-soft);font-weight:700}
#bd-evs .plan{border-top:1px solid var(--bd-line);padding-top:10px;margin-top:4px}
#bd-evs .plan h4{margin:0 0 6px;font-size:1em}
#bd-evs .result{border:2px solid var(--bd-red);border-radius:10px;padding:14px 16px;background:var(--bd-soft)}
#bd-evs .total{font-size:1.6em;font-weight:700;margin:0;line-height:1.2}
#bd-evs .sub{margin:2px 0 6px}
#bd-evs h3{font-size:1.05em;margin:16px 0 4px}
#bd-evs table{width:100%;border-collapse:collapse;margin:8px 0}
#bd-evs td{padding:5px 0;border-bottom:1px solid var(--bd-line);text-align:left;vertical-align:top}
#bd-evs td:last-child{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap;padding-left:12px}
#bd-evs tr.best td{font-weight:700}
#bd-evs tr.here td:first-child{border-left:3px solid var(--bd-red);padding-left:6px}
#bd-evs td small{display:block;opacity:.75;font-weight:400}
#bd-evs details{margin-top:8px}
#bd-evs summary{cursor:pointer;font-weight:700}
#bd-evs pre{white-space:pre-wrap;font-size:.85em;margin:8px 0 0;background:transparent;border:0;padding:0}
#bd-evs .note{font-size:.85em;opacity:.75;margin:10px 0 0}
#bd-evs .warn{color:var(--bd-red);font-weight:700}
</style>
<fieldset>
<legend>How much you charge</legend>
<div class="seg" role="radiogroup" aria-label="Measure your charging in">
<label><input type="radio" name="bd-evs-unit" value="miles" checked> Miles a month</label>
<label><input type="radio" name="bd-evs-unit" value="kwh"> kWh a month</label>
</div>
<div class="row" id="bd-evs-bymiles">
<label>Miles a month on rapid chargers
<input id="bd-evs-miles" type="number" min="0" step="10" value="350" inputmode="numeric">
<span class="hint">Only the miles you charge for at public rapid chargers, not at home.</span></label>
<label>Your car's efficiency (miles per kWh)
<input id="bd-evs-mpk" type="number" min="0" step="0.1" value="3.5" inputmode="decimal">
<span class="hint">Most electric cars manage 3 to 4 miles per kWh, and less in winter.</span></label>
</div>
<div class="row" id="bd-evs-bykwh" hidden>
<label>kWh a month on rapid chargers
<input id="bd-evs-kwh" type="number" min="0" step="1" value="100" inputmode="numeric">
<span class="hint">Your charging app shows the kWh of each charge.</span></label>
</div>
</fieldset>
<fieldset>
<legend>Network and prices</legend>
<label>The network you use most
<select id="bd-evs-net"></select></label>
<div id="bd-evs-prices"></div>
<p class="note" id="bd-evs-netnote"></p>
</fieldset>
<div class="result" aria-live="polite">
<p class="total" id="bd-evs-total">£0</p>
<p class="sub" id="bd-evs-sub"></p>
<table><tbody id="bd-evs-lines"></tbody></table>
<p id="bd-evs-said"></p>
<h3>The same charging on each network</h3>
<table><tbody id="bd-evs-all"></tbody></table>
<p class="note">Each network's cheapest way to pay for this much charging, at its usual price. In practice you charge where the chargers are on your journeys.</p>
<details><summary>Show the working</summary><pre id="bd-evs-working"></pre></details>
<p class="note" id="bd-evs-note"></p>
</div>
<p class="bd-credit" style="font-size:.85em;opacity:.75;margin:10px 0 0">EV charging subscription calculator by <a href="https://braindumps.co.uk/ev-charging-subscription-calculator/">Braindumps.co.uk</a></p>
<script>
(function () {
"use strict";
/* BEGIN CALC */
// Monthly cost in pounds of k kWh on a plan. A plan has a monthly fee in pounds and either a price
// per kWh in pence, or an allowance: "included" kWh for the fee, then "after" pence per kWh.
function planCost(plan, k) {
k = k > 0 ? k : 0;
var fee = plan.fee > 0 ? plan.fee : 0;
if (plan.included > 0) { return fee + Math.max(0, k - plan.included) * (plan.after > 0 ? plan.after : 0) / 100; }
return fee + k * (plan.price > 0 ? plan.price : 0) / 100;
}
// The kWh a month above which a plan costs less than paying as you go (Infinity if it never does).
function breakEven(plan, payg) {
var fee = plan.fee > 0 ? plan.fee : 0;
if (!(payg > 0)) { return Infinity; }
if (plan.included > 0) {
var within = fee / (payg / 100);
if (within <= plan.included) { return within; }
var after = plan.after > 0 ? plan.after : 0;
if (!(payg > after)) { return Infinity; }
return (fee - plan.included * after / 100) / ((payg - after) / 100);
}
var price = plan.price > 0 ? plan.price : 0;
if (!(payg > price)) { return Infinity; }
return fee / ((payg - price) / 100);
}
// The cheapest way to pay for k kWh a month on one network: pay as you go or one of its plans.
function cheapest(payg, plans, k) {
var best = { name: "Pay as you go", cost: (k > 0 ? k : 0) * (payg > 0 ? payg : 0) / 100, index: -1 };
(plans || []).forEach(function (p, i) {
var c = planCost(p, k);
if (c < best.cost - 1e-9) { best = { name: p.name, cost: c, index: i }; }
});
return best;
}
/* END CALC */
// Prices checked on 28 October 2026, in pence per kWh including VAT, and monthly fees in pounds.
// "payg" is the price without a subscription in the network's own app. Where the price depends on the
// site, the calculator starts in the middle of the network's range. A plan with "discount" takes that
// share off the pay-as-you-go price. Update these when the networks change their prices.
var CHECKED = "28 October 2026";
var NETWORKS = [
{ id: "ionity", name: "IONITY", payg: 79, paygNote: "IONITY app price. Paying by card at the charger costs 83p.",
plans: [{ name: "IONITY Motion", fee: 5.49, price: 59 }, { name: "IONITY Power", fee: 10.5, price: 47 }],
note: "Monthly plans can be cancelled at any time. IONITY also sells yearly plans, paid up front." },
{ id: "tesla", name: "Tesla Supercharger", payg: 69, paygNote: "For non-Tesla cars at peak times (Zapmap, September 2026). Tesla sets the price for each site and time of day: the Tesla app shows it.",
plans: [{ name: "Supercharging Membership", fee: 8.99, price: 48 }],
note: "Members pay the price Tesla drivers pay: 48p at peak times in Zapmap's September 2026 survey. Sign up in the Tesla app. One membership covers all your cars." },
{ id: "bppulse", name: "bp pulse", payg: 89, paygNote: "Standard rapid price in the bp pulse app or by card. A few sites charge 79p to 93p.",
plans: [{ name: "bp pulse subscription", fee: 7.85, price: 69 }],
note: "The first month is free. Subscribers pay 69p at most sites (63p to 74p at a few)." },
{ id: "gridserve", name: "GRIDSERVE", payg: 88.5, paygNote: "GRIDSERVE app price: 85p to 92p depending on the site. The calculator starts in the middle.",
plans: [{ name: "GRIDSERVE Plus", fee: 7.99, discount: 0.25 }],
note: "GRIDSERVE Plus takes 25% off the app price. Cancel at any time." },
{ id: "shell", name: "Shell Recharge", payg: 71.5, paygNote: "Shell App price: 10p less than paying by card, which costs 74p to 89p depending on the site (Zapmap, September 2026). The calculator starts in the middle.",
plans: [{ name: "Shell Recharge subscription", fee: 9.99, discount: 0.3 }],
note: "The subscription takes 30% off the Shell App price, on up to 1,000 kWh a month. Night Saver prices, from 7pm to 7am, are lower again." },
{ id: "fastned", name: "Fastned", payg: 71.1, paygNote: "Fastned app price: 10% off the standard price of 79p.",
plans: [{ name: "Fastned Gold", fee: 4.99, price: 55 }],
note: "Gold is £4.99 a month until early 2027 and can be cancelled at any time after 30 days. It covers up to three cars in a household." },
{ id: "beev", name: "Be.EV", payg: 74, paygNote: "Be.EV ultra-rapid price: 59p to 89p depending on the site. The calculator starts in the middle. Be.EV app users pay 49p from 7pm to 7am.",
plans: [{ name: "Be.EV Flexi Pass", fee: 13.99, price: 39 }, { name: "Be.EV Go Pass", fee: 49, included: 120, after: 49 }, { name: "Be.EV Go Further Pass", fee: 89, included: 250, after: 49 }],
note: "The Go and Go Further passes include that much charging each month, then 49p a kWh. All three can be cancelled at any time." },
{ id: "instavolt", name: "InstaVolt", payg: 92, paygNote: "From 7am to 8pm, and at any time by card. 55p from 8pm to 7am in the InstaVolt app.",
plans: [], note: "InstaVolt has no subscription." },
{ id: "osprey", name: "Osprey", payg: 82, paygNote: "Osprey app price on weekdays from 7am to 8pm: 79p at weekends, 69p overnight (8pm to 7am) and 89p by card.",
plans: [], note: "Osprey has no subscription." },
{ id: "mfg", name: "MFG EV Power", payg: 74, paygNote: "69p to 79p depending on the site. The calculator starts in the middle.",
plans: [], note: "MFG EV Power has no subscription." }
];
var root = document.getElementById("bd-evs");
if (!root) { return; }
function el(id) { return document.getElementById(id); }
function num(id) { var e = el(id); var v = e ? parseFloat(e.value) : NaN; return isFinite(v) && v >= 0 ? v : 0; }
function money(v) { return "£" + v.toLocaleString("en-GB", { minimumFractionDigits: 2, maximumFractionDigits: 2 }); }
function pounds(v) { return "£" + Math.round(v).toLocaleString("en-GB"); }
function short(v, d) { return v.toLocaleString("en-GB", { maximumFractionDigits: d }); }
function pence(v) { return short(v, 2) + "p"; }
function feeText(v) { return v % 1 ? money(v) : "£" + short(v, 0); }
function unit() { var c = root.querySelector('input[name="bd-evs-unit"]:checked'); return c ? c.value : "miles"; }
function round2(v) { return Math.round(v * 100) / 100; }
function resolved(net) {
return net.plans.map(function (p) {
var q = { name: p.name, fee: p.fee, price: p.price, included: p.included, after: p.after, discount: p.discount };
if (p.discount) { q.price = round2(net.payg * (1 - p.discount)); }
return q;
});
}
var current = NETWORKS[0];
var edited = {};
var building = false; // While the price boxes are rebuilt, events from the old boxes are ignored.
function field(parent, labelText, id, value, step, hintText) {
var label = document.createElement("label");
label.appendChild(document.createTextNode(labelText));
var input = document.createElement("input");
input.id = id; input.type = "number"; input.min = "0"; input.step = step; input.inputMode = "decimal";
input.value = String(value);
label.appendChild(input);
if (hintText) { var h = document.createElement("span"); h.className = "hint"; h.id = id + "-hint"; h.textContent = hintText; label.appendChild(h); }
parent.appendChild(label);
return input;
}
function buildPrices() {
var box = el("bd-evs-prices");
building = true;
box.textContent = "";
edited = {};
var first = document.createElement("div"); first.className = "row"; box.appendChild(first);
field(first, "Pay as you go (pence per kWh)", "bd-evs-payg", current.payg, "0.1", current.paygNote);
resolved(current).forEach(function (p, i) {
var wrap = document.createElement("div"); wrap.className = "plan";
var h = document.createElement("h4"); h.textContent = p.name; wrap.appendChild(h);
var r = document.createElement("div"); r.className = "row"; wrap.appendChild(r);
field(r, "Monthly fee (£)", "bd-evs-fee-" + i, p.fee.toFixed(2), "0.01");
if (p.included > 0) {
field(r, "kWh included each month", "bd-evs-inc-" + i, p.included, "1");
field(r, "Then (pence per kWh)", "bd-evs-after-" + i, p.after, "0.1");
} else {
field(r, "Price with it (pence per kWh)", "bd-evs-p-" + i, p.price, "0.1", p.discount ? short(p.discount * 100, 0) + "% off the pay-as-you-go price." : "");
}
box.appendChild(wrap);
});
el("bd-evs-netnote").textContent = current.note;
building = false;
box.querySelectorAll("input").forEach(function (input) {
input.addEventListener("input", function () {
edited[input.id] = true;
if (input.id === "bd-evs-payg") { followDiscounts(); }
});
});
}
// A plan priced as a share off the pay-as-you-go price follows it, until its own price is typed in.
function followDiscounts() {
var payg = num("bd-evs-payg");
current.plans.forEach(function (p, i) {
var id = "bd-evs-p-" + i;
if (p.discount && !edited[id] && el(id)) { el(id).value = String(round2(payg * (1 - p.discount))); }
});
}
// The prices as they are in the boxes now (a missing box keeps the network's own figure).
function typedPlans() {
var start = resolved(current);
function val(id, fallback) { return el(id) ? num(id) : (fallback > 0 ? fallback : 0); }
return current.plans.map(function (p, i) {
var d = start[i];
if (p.included > 0) { return { name: p.name, fee: val("bd-evs-fee-" + i, d.fee), included: val("bd-evs-inc-" + i, d.included), after: val("bd-evs-after-" + i, d.after) }; }
return { name: p.name, fee: val("bd-evs-fee-" + i, d.fee), price: val("bd-evs-p-" + i, d.price) };
});
}
function row(tbody, a, sub, b, cls) {
var tr = document.createElement("tr");
if (cls) { tr.className = cls; }
var td1 = document.createElement("td"); td1.textContent = a;
if (sub) { var s = document.createElement("small"); s.textContent = sub; td1.appendChild(s); }
var td2 = document.createElement("td"); td2.textContent = b;
tr.appendChild(td1); tr.appendChild(td2); tbody.appendChild(tr);
}
function planWords(p) {
if (p.included > 0) { return feeText(p.fee || 0) + " a month with " + short(p.included, 0) + " kWh included, then " + pence(p.after || 0) + " a kWh"; }
return feeText(p.fee || 0) + " a month plus " + pence(p.price || 0) + " a kWh";
}
function update() {
if (building) { return; }
var byMiles = unit() === "miles";
el("bd-evs-bymiles").hidden = !byMiles;
el("bd-evs-bykwh").hidden = byMiles;
var mpk = num("bd-evs-mpk");
var k = byMiles ? (mpk > 0 ? num("bd-evs-miles") / mpk : 0) : num("bd-evs-kwh");
var milesFor = function (kwh) { return byMiles && mpk > 0 ? " (about " + short(Math.round(kwh * mpk), 0) + " miles)" : ""; };
var payg = num("bd-evs-payg");
var plans = typedPlans();
var best = cheapest(payg, plans, k);
var paygCost = k * payg / 100;
var kText = short(Math.round(k * 10) / 10, 1) + " kWh a month";
var lines = el("bd-evs-lines"); lines.textContent = "";
row(lines, "Pay as you go", pence(payg) + " a kWh", money(paygCost), best.index === -1 && plans.length ? "best" : "");
plans.forEach(function (p, i) { row(lines, p.name, planWords(p), money(planCost(p, k)), best.index === i ? "best" : ""); });
var total = el("bd-evs-total"), sub = el("bd-evs-sub"), said = [];
if (!plans.length) {
total.textContent = money(paygCost) + " a month";
sub.textContent = "for " + kText + " on " + current.name + " at " + pence(payg) + " a kWh (" + pounds(paygCost * 12) + " a year). " + current.name + " has no subscription, so compare the other networks below.";
} else if (best.index >= 0) {
var saving = paygCost - best.cost;
total.textContent = best.name + " saves you " + money(saving) + " a month";
sub.textContent = "compared with paying as you go at " + pence(payg) + " a kWh, for " + kText + ": " + pounds(saving * 12) + " a year.";
} else {
var next = null;
plans.forEach(function (p) { var c = planCost(p, k); if (!next || c < next.cost) { next = { name: p.name, cost: c }; } });
total.textContent = "Pay as you go is cheapest";
sub.textContent = "for " + kText + " on " + current.name + ": " + money(paygCost) + " a month. " + next.name + " would cost " + money(next.cost - paygCost) + " a month more.";
}
plans.forEach(function (p) {
var be = breakEven(p, payg);
if (!isFinite(be)) { said.push(p.name + " never costs less than paying as you go at these prices."); }
else { said.push(p.name + " costs less than paying as you go from " + short(Math.ceil(be), 0) + " kWh a month" + milesFor(Math.ceil(be)) + "."); }
});
el("bd-evs-said").textContent = said.join(" ");
// Every network, for the same charging. The chosen one uses the prices in the boxes.
var all = NETWORKS.map(function (n) {
var np = n === current ? plans : resolved(n);
var npayg = n === current ? payg : n.payg;
var b = cheapest(npayg, np, k);
return { net: n, best: b };
}).sort(function (a, b) { return a.best.cost - b.best.cost; });
var tb = el("bd-evs-all"); tb.textContent = "";
all.forEach(function (x, i) {
var how = x.best.index === -1 ? "pay as you go" + (x.net.plans.length ? "" : " (no subscription)") : x.best.name;
row(tb, x.net.name, how, money(x.best.cost), (x.net === current ? "here" : "") + (i === 0 ? " best" : ""));
});
var w = [];
if (byMiles) { w.push("Charging = " + short(num("bd-evs-miles"), 0) + " miles / " + short(mpk, 2) + " miles per kWh = " + short(k, 1) + " kWh a month"); }
w.push("Pay as you go = " + short(k, 1) + " kWh x " + pence(payg) + " = " + money(paygCost));
plans.forEach(function (p) {
if (p.included > 0) {
var over = Math.max(0, k - p.included);
w.push(p.name + " = " + money(p.fee) + (over > 0 ? " + (" + short(k, 1) + " - " + short(p.included, 0) + ") kWh x " + pence(p.after) : " (" + short(k, 1) + " kWh is inside the " + short(p.included, 0) + " kWh)") + " = " + money(planCost(p, k)));
} else {
w.push(p.name + " = " + money(p.fee) + " + " + short(k, 1) + " kWh x " + pence(p.price) + " = " + money(planCost(p, k)));
}
var be = breakEven(p, payg);
if (isFinite(be) && !(p.included > 0)) { w.push(" pays for itself from " + money(p.fee) + " / (" + pence(payg) + " - " + pence(p.price) + ") = " + short(be, 1) + " kWh a month"); }
else if (isFinite(be)) { w.push(" pays for itself from " + short(be, 1) + " kWh a month"); }
});
el("bd-evs-working").textContent = w.join("\n");
var note = el("bd-evs-note");
if (!(k > 0)) { note.innerHTML = '<span class="warn">Enter how much you charge each month' + (byMiles ? " and your car's miles per kWh" : "") + ".</span>"; }
else { note.textContent = "Prices checked on " + CHECKED + " on each network's own website; Tesla's and Shell's typical prices are from Zapmap's survey of September 2026. Networks change their prices often, and some charge different prices at different sites and times, so check the app before you subscribe. Cheaper off-peak prices are not included."; }
}
var select = el("bd-evs-net");
NETWORKS.forEach(function (n, i) {
var o = document.createElement("option");
o.value = String(i);
o.textContent = n.name + (n.plans.length ? "" : " (no subscription)");
select.appendChild(o);
});
select.addEventListener("change", function () { current = NETWORKS[+select.value] || NETWORKS[0]; buildPrices(); update(); });
root.addEventListener("input", update);
root.addEventListener("change", update);
buildPrices();
update();
})();
</script>
</div>