Solar battery bank sizing calculator
50 Ah a day for 3 days of autonomy at 50 % depth of discharge needs a 300 Ah bank: 150 Ah of usable charge, doubled so no more than half is ever drawn. Plan house banks for cabins, RVs and boats. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Daily load ah
- 50
- Autonomy days
- 3
- Depth of discharge
- 0.5
- Energy needed ah
- 150
- Required capacity ah
- 300
Solar battery bank sizing answers a practical design question: how many amp-hours of storage do you need so a known daily load can run through a chosen number of days without charging, while respecting a chemistry-safe depth-of-discharge limit? The classic field formula multiplies daily consumption in amp-hours by autonomy days, then divides by the usable depth-of-discharge fraction so nameplate capacity is larger than the raw energy budget. Use it for off-grid cabin worksheets, RV and marine house-bank planning, installer quote checks, educational labs, and any pipeline that needs a repeatable Ah bank size without spreadsheets or one-off scripts. It does not model Peukert, temperature derating, or charge-controller losses; those refinements belong after this first-pass capacity figure.
How battery bank amp-hours are sized from load and autonomy
Daily load in amp-hours is the average charge drawn from the bank over twenty-four hours at the system voltage you design for. If you know watt-hours instead, divide daily energy by nominal voltage—for example twelve hundred watt-hours on a twelve-volt bank is one hundred amp-hours per day. Autonomy days capture how long the bank must carry that load when solar or grid charging is unavailable: cloudy stretches, winter shoulder seasons, or intentional no-sun design margins.
Depth of discharge is the fraction of nameplate capacity you allow to be used; lead-acid banks are often limited near fifty percent to protect cycle life, while many lithium iron phosphate packs can use eighty percent or more of rated Ah. The estimate multiplies daily amp-hours by autonomy days to get the energy that must be stored as usable charge, then divides by the DoD fraction so the nameplate bank is large enough that only the allowed portion is discharged.
For example, fifty amp-hours per day with three days of autonomy and a fifty percent DoD yields one hundred fifty amp-hours of usable energy and three hundred amp-hours of required nameplate capacity. The model assumes constant daily energy and ignores inverter efficiency, wire losses, and rate-dependent capacity—apply those factors upstream if you need a more conservative field estimate.
Where teams use solar battery bank sizing
Off-grid and hybrid solar designers size house banks for cabins, telecom sites, and remote pumps so night-time and multi-day cloudy loads stay within the chemistry DoD they specify. RV, marine, and van-life builders convert fridge and lighting budgets into a nameplate Ah figure before shopping parallel strings of deep-cycle or lithium modules. Educators and training programs generate expected answers for lab worksheets that teach energy storage without laboratory equipment.
Facility and backup planners adapt the same arithmetic when a daily critical load and a multi-day outage window replace solar autonomy language. Pair the result with string voltage and series-parallel layout rules in your own tools when you convert amp-hours into module counts.
What you can do with it
Off-grid cabin and remote site design
Convert daily Ah load, cloudy-day autonomy, and a chemistry-safe DoD into the nameplate battery bank capacity needed before ordering modules.
RV, marine, and van house banks
Size deep-cycle or lithium house banks from fridge and lighting amp-hour budgets with multi-day autonomy and a chosen discharge limit.
FAQ
How is required battery bank capacity calculated?
Required amp-hours equal daily load in amp-hours multiplied by autonomy days, then divided by the depth-of-discharge fraction.
What if depth of discharge is zero or greater than one?
Depth of discharge must be greater than 0 and at most 1; zero would divide by zero and values above one imply more usable capacity than nameplate. Failed tasks are not charged.
How do I convert daily watt-hours into amp-hours?
Divide the daily watt-hours by the bank's nominal voltage. For example, 1200 Wh a day on a 12 V bank is 100 Ah a day, which is the figure you enter as the daily load.
What depth of discharge should I use for lead-acid or lithium?
Lead-acid banks are often limited to about 50 % to protect cycle life, while many lithium iron phosphate packs can use 80 % or more of their rated capacity. Enter it as a fraction, such as 0.5 or 0.8.
How many days of autonomy should I plan for?
Typical off-grid values run from 1 to 5 days, depending on how long cloudy spells or winter can leave the bank without charging. Each extra day enlarges the bank in the same proportion.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/elec/solar-battery-bank \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"daily_load_ah":50,"autonomy_days":3,"depth_of_discharge":0.5}'const res = await fetch("https://api.kit.forhosting.com/elec/solar-battery-bank", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"daily_load_ah": 50,
"autonomy_days": 3,
"depth_of_discharge": 0.5
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/elec/solar-battery-bank",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"daily_load_ah": 50,
"autonomy_days": 3,
"depth_of_discharge": 0.5
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/elec/solar-battery-bank", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"daily_load_ah":50,"autonomy_days":3,"depth_of_discharge":0.5}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"daily_load_ah":50,"autonomy_days":3,"depth_of_discharge":0.5}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/elec/solar-battery-bank", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"daily_load_ah": 50,
"autonomy_days": 3,
"depth_of_discharge": 0.5
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "elec.solar_battery_bank",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
How battery bank amp-hours are sized from load and autonomy
Still, the load-times-autonomy over DoD form remains the standard first-pass bank size in solar design manuals, installer worksheets, and student problems, and it is exactly what this endpoint computes without inventing chemistry or electrical dynamics beyond that transparent formula.
Inputs, outputs, and validation rules
Failed validation is not charged. Units stay in amp-hours and days: convert milliamps, watt-hours, or voltage-specific loads before calling if your meters report other units. Prefer consistent continuous-day averages; highly seasonal loads should use a representative or worst-case daily Ah figure so the autonomy product remains meaningful for the season you size against. Send three required finite numbers: daily_load_ah for average daily consumption in amp-hours, autonomy_days for days without charging, and depth_of_discharge as a usable fraction greater than zero and at most one. All three must be finite and strictly positive where required; zero or negative load or autonomy is rejected with invalid_input because a non-positive budget cannot size a bank, and DoD outside the open-closed interval (0, 1] fails validation because division by zero or a fraction above full capacity is meaningless. The response echoes the resolved inputs, energy_needed_ah as daily load times autonomy days, required_capacity_ah as that energy divided by depth of discharge, and a short formula string suitable for audit logs and design notes. Round display values for customers if you like, but pin the twelve-decimal API numbers in automated tests so goldens stay stable across runtimes.
Where teams use solar battery bank sizing
Installer quote tools embed the free browser form on landing pages that rank for solar battery bank sizing calculator and call the API from configurators that return required capacity alongside panel counts and inverter options. Because each successful call is a single analytic item priced at $0.002, batch scripts can sweep load, autonomy, and DoD grids—many daily budgets against many cloudy-day targets—without model cost or subscription overhead. Prefer this endpoint when you already know daily amp-hours, autonomy days, and a DoD policy and only need transparent nameplate capacity—not full Peukert curves, temperature models, multi-string state-of-charge simulators, or charge-controller loss trees, which need richer inputs and different capabilities.
Integration use cases
Installer quotes and education tools
Embed deterministic JSON bank sizing in quote configurators or grade student worksheets that teach solar storage math.
Technical questions
What is depth_of_discharge?
It is the maximum fraction of nameplate capacity you allow to be discharged, greater than zero and at most one. Use 0.5 for many lead-acid policies or 0.8 for typical lithium usable ranges.
How do I convert daily watt-hours into daily_load_ah?
Divide daily watt-hours by the nominal bank voltage. For example, 1200 Wh on a 12 V system is 100 Ah per day. Always use the voltage of the battery string you are sizing.
How much does each API call cost?
$0.002 per successful request. The browser tool above runs free locally; the API draws from your prepaid KIT balance only when the task succeeds.