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.

AC energy delivered per cycle, before annual fade; no further discharge efficiency is applied. The 13.5 kWh example uses the Powerwall energy figure. State cycle life at the same usable depth.

Total installed price, after any incentive you qualify for. This is what the arbitrage has to earn back, so use your real quote.

The price you avoid paying by discharging. Take it from your utility's time-of-use schedule, not an average bill.

The price you pay to charge. Must be below the on-peak rate — there is nothing to arbitrage otherwise.

Share of the energy you buy that comes back out. 0.90 is Powerwall 2's published AC-to-battery-to-AC figure, which is the path a grid-charged cycle takes.

One full charge and discharge per day is typical. Use 0.5 if you only part-cycle, or 2 if your tariff has two peak periods.

Rated cycles restated at the capacity you entered above. Datasheet cycle counts are usually measured at 80% depth of discharge, so multiply by 0.8: a common LFP rating of 6,000 becomes 4,800. It is a test figure, not a warranty promise.

Annual cash-flow assumptions

Missing advanced values mean zero degradation, zero maintenance, full cycle-rated life and zero discount. Enter your own assumptions; these are not forecasts.

Reset

Results

Example — computed from the default inputs above. Change any field and press Compute.

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.

Home Battery Backup Calculator

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.

Annual cash flows
YearOperating fractionUsable kWhCharging costAvoided peak billMaintenanceNet cash flowCumulative cash flow
000$0.00$0.00$0.00−$12,000.00−$12,000.00
1113.5$821.25$1,971.00$0.00$1,149.75−$10,850.25
2113.5$821.25$1,971.00$0.00$1,149.75−$9,700.50
3113.5$821.25$1,971.00$0.00$1,149.75−$8,550.75
4113.5$821.25$1,971.00$0.00$1,149.75−$7,401.00
5113.5$821.25$1,971.00$0.00$1,149.75−$6,251.25
6113.5$821.25$1,971.00$0.00$1,149.75−$5,101.50
7113.5$821.25$1,971.00$0.00$1,149.75−$3,951.75
8113.5$821.25$1,971.00$0.00$1,149.75−$2,802.00
9113.5$821.25$1,971.00$0.00$1,149.75−$1,652.25
10113.5$821.25$1,971.00$0.00$1,149.75−$502.50
11113.5$821.25$1,971.00$0.00$1,149.75$647.25
12113.5$821.25$1,971.00$0.00$1,149.75$1,797.00
13113.5$821.25$1,971.00$0.00$1,149.75$2,946.75
140.150713.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

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

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.