Battery Arbitrage Calculator
Estimate time-of-use battery savings with annual capacity fade, maintenance, cash flows, payback, NPV and IRR.
The formula, every assumption, and the primary sources behind this tool are published on this page.
Results
The investment is recovered during modeled operation. Check cumulative net cash flow and NPV for the full result.
Constant-capacity payback extrapolation: 10.4 years
Payback within modeled operation: 10.44 years
Net present value: $3,120.00
Internal rate of return: 3.4379%
Years the cycle rating allows at this rate: 13.2 years
Initial daily bill saving before maintenance: $3.15
Initial annualized bill saving before maintenance: $1,149.75
Cost to store one usable kWh: $0.1667
Gross margin per kWh discharged: $0.2333
Investment allocation per kWh discharged: $0.1852
Margin after investment allocation, before maintenance: $0.0481
Discharged energy during modeled operation: 64,800 kWh
Net cash flow during modeled operation: $3,120.00
The off-peak price is divided by efficiency, not multiplied: to deliver one kilowatt-hour you had to buy rather more than one. Charging the loss to the purchase is what makes this figure honest.
Throughput cost is a diagnostic per-kWh allocation of investment. Annual cash flow subtracts charging cost and maintenance only; investment is already paid at year 0.
Annual cash flows
Year 0 pays the investment once. Later rows are year-end cash flows. The final operating fraction prorates throughput and maintenance; no replacement or salvage is assumed. Payback interpolates earnings during operation.
| Year | Operating fraction | Usable kWh | Charging cost | Avoided peak bill | Maintenance | Net cash flow | Cumulative cash flow |
|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | $0.00 | $0.00 | $0.00 | −$12,000.00 | −$12,000.00 |
| 1 | 1 | 13.5 | $821.25 | $1,971.00 | $0.00 | $1,149.75 | −$10,850.25 |
| 2 | 1 | 13.5 | $821.25 | $1,971.00 | $0.00 | $1,149.75 | −$9,700.50 |
| 3 | 1 | 13.5 | $821.25 | $1,971.00 | $0.00 | $1,149.75 | −$8,550.75 |
| 4 | 1 | 13.5 | $821.25 | $1,971.00 | $0.00 | $1,149.75 | −$7,401.00 |
| 5 | 1 | 13.5 | $821.25 | $1,971.00 | $0.00 | $1,149.75 | −$6,251.25 |
| 6 | 1 | 13.5 | $821.25 | $1,971.00 | $0.00 | $1,149.75 | −$5,101.50 |
| 7 | 1 | 13.5 | $821.25 | $1,971.00 | $0.00 | $1,149.75 | −$3,951.75 |
| 8 | 1 | 13.5 | $821.25 | $1,971.00 | $0.00 | $1,149.75 | −$2,802.00 |
| 9 | 1 | 13.5 | $821.25 | $1,971.00 | $0.00 | $1,149.75 | −$1,652.25 |
| 10 | 1 | 13.5 | $821.25 | $1,971.00 | $0.00 | $1,149.75 | −$502.50 |
| 11 | 1 | 13.5 | $821.25 | $1,971.00 | $0.00 | $1,149.75 | $647.25 |
| 12 | 1 | 13.5 | $821.25 | $1,971.00 | $0.00 | $1,149.75 | $1,797.00 |
| 13 | 1 | 13.5 | $821.25 | $1,971.00 | $0.00 | $1,149.75 | $2,946.75 |
| 14 | 0.1507 | 13.5 | $123.75 | $297.00 | $0.00 | $173.25 | $3,120.00 |
How it works
Revenue is the on-peak price of the energy you discharge. Cost is the off-peak price of the energy you had to buy to store it, which is more than you discharge. The difference is then set against what each kilowatt-hour of throughput costs in battery wear — the step that decides whether the whole exercise is worth doing.
charge_cost = offpeak_rate / rtegross_margin = peak_rate − charge_costdaily_profit = usable_kwh × cycles_per_day × gross_marginpayback_years = battery_cost / (daily_profit × 365)battery_life = cycle_life / (cycles_per_day × 365)throughput_cost = battery_cost / modeled_discharged_kwhnet_margin = gross_margin − throughput_costcapacity_y = usable_kwh × (1 − degradation)^(y − 1)discharge_y = capacity_y × cycles_per_day × 365 × operating_fractioncashflow_0 = −battery_costcashflow_y = discharge_y × gross_margin − annual_maintenance × operating_fractionNPV = cashflow_0 + Σ cashflow_y / (1 + discount_rate)^yIRR = rate where NPV = 0, if unique
usable_kwh- Energy discharged per cycle, kWh.
battery_cost- Installed cost the arbitrage has to earn back.
peak_rate- On-peak retail price avoided, $/kWh.
offpeak_rate- Off-peak retail price paid to charge, $/kWh.
rte- Round-trip efficiency, AC in to AC out.
cycles_per_day- Full equivalent cycles per day.
cycle_life- Cycles before end of life, at the full depth of usable_kwh. Convert a datasheet rating quoted at 80% depth of discharge by multiplying it by 0.8.
charge_cost- offpeak ÷ rte — off-peak cost of one delivered kWh.
gross_margin- peak − charge_cost — earnings per kWh discharged.
throughput_cost- battery_cost ÷ total modeled discharged kWh. Diagnostic allocation only.
net_margin- gross_margin − throughput_cost, before maintenance. Annual cash flows deduct the investment at year 0 only.
Assumptions
- The round-trip loss is charged to the energy you buy, not taken off the price spread. Writing it as `capacity × efficiency × (peak − offpeak)` discounts the charging cost by the same factor as the revenue, which prices the loss at nothing. The correct statement is that a delivered kilowatt-hour cost `offpeak ÷ efficiency` to store.
- The 0.90 default is Tesla's Powerwall 2 datasheet figure, and its footnote is why it belongs here: "AC to battery to AC, at beginning of life", at 25 °C and 3.3 kW. Grid arbitrage is precisely that path — alternating current in from the meter, alternating current back out to the house.
- Powerwall 3 publishes 89%, but for "Solar to Battery to Home/Grid" — a DC-coupled solar path that skips a conversion stage a grid-charged cycle has to pay for. Do not read it as a grid-charging figure. If your battery only publishes a DC or solar-path efficiency, the AC round trip will be lower.
- The 4,800 default is EG4's LiFePower4 LFP spec sheet — over 6,000 cycles at 0.5C — restated at full depth, and the restatement matters. That rating is measured at 80% depth of discharge, so each rated cycle moves 80% of the pack, which is how EG4 arrives at its own lifetime throughput figure. Lifetime throughput here is capacity × cycles, so a count measured at partial depth cannot be multiplied by a full-depth capacity: 6,000 × 0.8 = 4,800. Using 6,000 against the full usable capacity would claim a quarter more throughput than the cells are rated for, cut the wear per kilowatt-hour by a fifth, and can flip a losing case into a winning one. If your own datasheet quotes a depth of discharge, apply the same conversion before entering the number. Either way it is a test result, not a promise: the same product's warranty runs ten years, prorated at a tenth per year, and covers defects rather than capacity retention — at one cycle a day 4,800 cycles is 13.2 years, so the cycle rating still outlives the warranty by about three years.
- Year 1 uses initial capacity; later years compound the supplied degradation. Operation stops at analysis horizon or equivalent-cycle life, whichever comes first. Maintenance is prorated in the shutdown year. Discounting uses calendar year ends.
- Today's on-peak and off-peak prices held flat for the battery's whole life. Tariffs get restructured — a wider spread improves the case, and a utility flattening its time-of-use rates can remove the business case outright while you still own the battery.
- This assumes you are allowed to charge from the grid off-peak and that doing so is worth full retail on discharge. Neither is universal: some net-metering and solar-incentive tariffs restrict or penalise grid charging, and exports are frequently paid well below retail. Check your tariff before counting on the figure.
- Demand charges, monthly fixed charges, tariff-switching fees and standby draw are excluded. The model covers energy arbitrage and the annual maintenance you enter, without power or tariff-window scheduling.
- Throughput cost is a diagnostic per-kWh allocation of investment. Annual cash flow subtracts charging cost and maintenance only; investment is already paid at year 0.
- Arbitrage is only one reason to own a battery. A negative verdict here does not mean the battery is a bad purchase — backup power during outages has real value that no price spread captures. It means the arbitrage alone will not pay for it.
FAQ
Why can IRR be missing while NPV is still shown?
IRR requires positive and negative cash flows. More than one sign change can allow multiple IRRs, so no arbitrary rate is chosen. NPV remains defined at your discount rate.
Is battery arbitrage actually worth it?
It depends on one comparison: the price spread against the battery's wear per kilowatt-hour. A $12,000 battery good for 4,800 full cycles at 13.5 kWh will move 64,800 kWh in its life, so each kilowatt-hour through it carries about 18.5¢ of wear. On a 40¢ peak and 15¢ off-peak tariff at 90% efficiency the gross margin is 23.3¢ — above the wear, netting roughly $3,120 over the battery's life and paying back in about 10.4 years against a 13.2-year cycle life. That is a thinner win than it first looks, and it turns on the cycle figure: take a 6,000-cycle datasheet number at face value instead of converting it to full-depth equivalents and the same battery appears to earn $6,900. Narrow the peak to 20¢ and the margin falls to 3.3¢, far under the wear, and the battery never pays for itself. That is the calculation to run before buying, and most online tools stop at the daily saving.
Why divide the off-peak rate by efficiency instead of multiplying the spread?
Because the loss happens when you buy the energy, not when you sell it. At 90% efficiency, delivering one kilowatt-hour on-peak means buying about 1.11 kWh off-peak, so a delivered kilowatt-hour costs the off-peak rate divided by 0.90 — 16.7¢ rather than 15¢. The common shortcut, multiplying the spread by efficiency, applies the same discount to the revenue and the cost, which means it never actually charges you for the loss.
Does cycling the battery twice a day double my savings?
More cycles increase the initial daily savings and consume cycle life faster. With zero degradation and maintenance, the lifetime saving is unchanged. Calendar-based degradation, maintenance and discounting can change that result.
How do I find my on-peak and off-peak rates?
From your utility's time-of-use rate schedule, not from your bill's average cost per kilowatt-hour — an average blends the two and understates the spread. Look for the tariff sheet for your specific rate plan, note the summer and winter peak windows separately, and use the summer peak if you want the best case. If you are not on a time-of-use plan yet, the spread you would get is the one on the plan you would switch to.
Sources
- Microsoft IRR function — periodic cash flows (checked October 4, 2026)
- Microsoft NPV and IRR — timing and possible multiple roots (checked October 4, 2026)
- Tesla Powerwall 2 datasheet — Round Trip Efficiency 90%, footnoted "AC to battery to AC, at beginning of life" at 25 °C and 3.3 kW: the grid-charging path this tool models
- Tesla Powerwall 3 datasheet — 89% "Solar to Battery to Home/Grid", a DC-coupled solar path, shown here so the two figures are not confused
- EG4 LiFePower4 LFP spec sheet — >6,000 cycles at 0.5C and 80% depth of discharge, design life >15 years (restated as the 4,800 full-cycle default)
- EG4 LiFePower4 limited warranty — ten years prorated at one tenth per year, covering defects: why the cycle rating is not a warranty promise
- U.S. EIA — Today in Energy: time-of-use rate availability and structure among U.S. utilities
Related calculators
Some product links on this site may be affiliate links; we may earn a commission at no extra cost to you. Read the Affiliate Disclosure.