Solar array energy sizing calculator
The solar array energy sizing calculator estimates the DC panel wattage needed to supply a specified daily electrical demand.
Run — free
Enter the energy required in kilowatt-hours per day, the site's average peak sun hours, and a combined system loss percentage. The calculation adjusts the ideal array size for losses such as temperature, wiring, inverter conversion, mismatch, dirt, and shading. It returns the exact calculated requirement and a practical minimum rounded up to the next whole watt, giving you a transparent starting point for preliminary solar planning.
Start with a representative daily energy demand
Reliable sizing begins with energy, not with the instantaneous power rating printed on an appliance. Add the watt-hours used by every load over a typical day, or divide a representative monthly utility total by the number of days in that billing period. Enter the resulting total as daily_energy_kwh. If the system is meant to offset only part of a building's consumption, enter only that target portion. Seasonal loads deserve special care: air conditioning, electric heating, irrigation pumps, and holiday occupancy can make an annual average unrepresentative of the period that matters most. For an off-grid design, use a conservative high-demand day rather than an optimistic annual mean, because an undersized array may leave batteries unrecovered. For a grid-connected estimate, an annualized daily average can be a useful first pass. The calculator assumes that the stated demand is the energy the array must deliver after the entered losses. It does not forecast future consumption, so include expected additions such as an electric vehicle or heat pump when they are genuinely part of the design brief.
Use peak sun hours rather than daylight duration
Peak sun hours express the day's solar irradiation as an equivalent number of hours at one kilowatt per square metre. They are not the number of hours between sunrise and sunset. A site may have a long summer day but fewer useful peak sun hours because of cloud, haze, roof orientation, or seasonal sun angle. Use a value from a reputable solar resource for the location and the array's expected tilt and orientation whenever possible. Decide whether to size for an annual average, the weakest design month, or another defined operating period, then use energy demand from the same period. Mixing a winter load with an annual-average solar resource can create a result that looks precise but does not describe either condition. The core calculation first determines ideal wattage by dividing daily watt-hours by peak sun hours. Fewer peak sun hours therefore require more installed panel capacity. This tool accepts values up to 24, but realistic resource data will normally be far below that boundary. Treat the output as sensitive to the quality and seasonal relevance of this single input.
Combine losses consistently and interpret the result
The system_loss_percent field represents the combined reduction between panel nameplate production under reference conditions and useful daily energy. Common contributors include module temperature, inverter conversion, DC and AC wiring, panel mismatch, soiling, partial shading, degradation, and availability. Use a combined estimate derived from your design assumptions; do not simply add percentages that apply sequentially unless that method matches the source of those figures. The calculator converts the loss percentage into retained efficiency and divides the ideal wattage by that efficiency. For example, a larger loss estimate always increases required DC array wattage. The required_array_wattage_w result preserves two decimal places for comparison, while minimum_whole_watt_array_w rounds upward so the displayed integer never falls below the calculation. Actual projects use commercially available module ratings, so select a combination whose total nameplate wattage meets or exceeds that minimum. This is an energy-balance estimate, not a complete electrical design. Confirm module count, inverter loading, voltage windows, conductor sizes, structural capacity, setbacks, battery autonomy, local weather extremes, codes, and permitting requirements with qualified project professionals before purchasing or installing equipment.
What you can do with it
Preliminary home solar estimate
Translate an average household daily consumption target into the minimum DC panel wattage for a known local solar resource.
Off-grid load planning
Estimate array wattage for a cabin, communications site, or remote load using a conservative demand day and seasonal peak sun hours.
Compare loss assumptions
Run consistent scenarios to see how shading, temperature, conversion, and wiring loss estimates change the array capacity requirement.
FAQ
What does the API request cost?
Each API request costs $0.002. The same deterministic calculation can also run free in your browser.
What is a peak sun hour?
It is an irradiation measure equal to one hour at one kilowatt per square metre, not simply an hour of daylight.
Which losses should I include?
Use one combined estimate covering relevant effects such as module temperature, inverter conversion, wiring, mismatch, soiling, shading, degradation, and downtime.
Why does the calculator round up to a whole watt?
Rounding upward ensures the practical integer recommendation does not fall below the calculated minimum wattage.
Does this calculate the number of solar panels?
No. It calculates total required array wattage. Divide the minimum wattage by a selected module's rated watts and round up to estimate module count.
Is this enough for a final installation design?
No. A final design must also address equipment compatibility, voltage and current limits, structure, storage, safety, local codes, and site-specific conditions.
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-array-sizing \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"daily_energy_kwh":30,"peak_sun_hours":5}'const res = await fetch("https://api.kit.forhosting.com/elec/solar-array-sizing", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"daily_energy_kwh": 30,
"peak_sun_hours": 5
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/elec/solar-array-sizing",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"daily_energy_kwh": 30,
"peak_sun_hours": 5
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/elec/solar-array-sizing", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"daily_energy_kwh":30,"peak_sun_hours":5}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"daily_energy_kwh":30,"peak_sun_hours":5}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/elec/solar-array-sizing", 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_energy_kwh": 30,
"peak_sun_hours": 5
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "elec.solar_array_sizing",
"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. |