Roof rainwater runoff calculator
A 120 m² asphalt-shingle roof sheds 5,100 litres, or 5.1 m³, in a 50 mm design storm once the 0.85 runoff coefficient is applied. Enter footprint and rainfall in metric or imperial units to size barrels or dry wells. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Roof area
- 120
- Rainfall depth
- 50
- Area unit
- m2
- Depth unit
- Mm
- Roof surface
- Asphalt shingle
- Area m2
- 120
- Rainfall depth m
- 0.05
- Runoff coefficient
- 0.85
- C source
- preset
A roof rainwater runoff calculator turns the horizontal footprint of a roof and a design rainfall depth into the peak runoff volume that gutters, downspouts, and yard drains must handle for that storm. Enter plan area in square metres, square feet, or square yards; enter design depth in millimetres, centimetres, metres, or inches; optionally set a runoff coefficient or pick a roof surface preset such as metal, tile, asphalt shingle, membrane, gravel built-up, or green roof. The tool converts everything to SI, multiplies volume as coefficient times area times depth, and returns cubic metres, litres, US gallons, and cubic feet plus an effective runoff depth after the coefficient.
What roof runoff volume means and the V = C × A × d formula
Peak rainwater runoff volume for a design storm is the total water that leaves the roof surface after a specified rainfall depth, not the instantaneous flow rate used in intensity-based pipe sizing. The classic storage form is V equals C times A times d: A is the horizontal footprint area that intercepts rainfall, d is the design rainfall depth for the event you are checking, and C is a dimensionless runoff coefficient between zero and one that accounts for wetting, ponding, and small losses on the covering.
Metal and membrane roofs often use coefficients near zero point nine five; asphalt shingles near zero point eight five; green roofs can be much lower because substrate stores water. Footprint means plan area—the rectangle or polygon of the building outline that rain sees from above—not the expanded sloped surface area you would use for shingle takeoffs.
For a given design depth, two roofs with the same plan area capture the same storm depth even if pitch differs; pitch affects surface length and sheet flow time, but the simple volume product still uses horizontal area. Results in cubic metres scale by one thousand to litres and by division by three point seven eight five four one one seven eight four to US liquid gallons, with cubic feet available for cistern notes written in imperial units.
This capability does not replace a local code intensity-duration-frequency curve or a full rational-method peak discharge calculation; it answers the volume question homeowners, estimators, and drainage drafts use when sizing barrels, dry wells, or temporary storage for a design depth.
Practical tips, limits, and related searches
Measure or take plan dimensions from drawings rather than measuring only the ridge-to-eave surface; multi-wing roofs sum each plan rectangle. Choose a design depth from your local drainage guide, a historic storm you want to store, or a manufacturer table, and keep the same depth basis when comparing options. Green roofs and gravel ballast can store a large fraction of small storms—do not assume C equals one unless you are deliberately sizing for full capture.
Prefer this capability when you already know footprint and design depth and need transparent multi-unit volume; pair with tank volume tools when the next question is how full a barrel becomes. Round-trip checks are easy: convert units by hand, multiply C times area in square metres times depth in metres, and confirm litres equal cubic metres times one thousand within the same fixed rounding used in the published steps.
What you can do with it
Size rain barrels and dry wells for a design storm
Homeowners enter roof plan area and a local design rainfall depth to estimate peak runoff volume before choosing barrel capacity or soakaway storage.
Preliminary gutter and drain volume checks
Estimators convert footprint and storm depth into litres and gallons with a documented runoff coefficient for drainage notes and bid assumptions.
FAQ
How do you calculate roof rainwater runoff volume?
Use V = C × A × d: convert footprint area and rainfall depth to consistent SI units, multiply by the runoff coefficient C (0–1), then scale cubic metres to litres or US gallons.
Should I use footprint area or sloped roof surface area?
Use horizontal footprint (plan) area. Design rainfall depth multiplies plan capture; sloped surface area is for material takeoffs, not this volume product.
What happens if roof area is zero or negative?
Roof area and rainfall depth must both be strictly positive finite numbers.
Is the roof rainwater runoff calculator free?
The browser tool is free and runs locally.
Which runoff coefficient should I use for my roof?
Pick the roof covering and a typical value is applied: metal and membrane 0.95, tile 0.90, asphalt shingles 0.85, gravel built-up 0.80 and green roofs 0.50, because their substrate stores water. Without a covering, 0.90 is used.
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/home/roof-rain-runoff \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"roof_area":120,"rainfall_depth":50}'const res = await fetch("https://api.kit.forhosting.com/home/roof-rain-runoff", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"roof_area": 120,
"rainfall_depth": 50
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/home/roof-rain-runoff",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"roof_area": 120,
"rainfall_depth": 50
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/home/roof-rain-runoff", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"roof_area":120,"rainfall_depth":50}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"roof_area":120,"rainfall_depth":50}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/home/roof-rain-runoff", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"roof_area": 120,
"rainfall_depth": 50
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "home.roof_rain_runoff",
"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
Zero or negative area or depth is rejected with a clear invalid_input error.
What roof runoff volume means and the V = C × A × d formula
Convert mixed unit notes before you call when drawings show square feet and rainfall tables list inches, or let the calculator convert with area_unit and depth_unit.
How to call the API and read the response
Send a JSON body with required roof_area and rainfall_depth as strictly positive finite numbers. Optional area_unit defaults to m2 and accepts ft2 or yd2; optional depth_unit defaults to mm and accepts cm, m, or in. Optional runoff_coefficient is a number from zero to one inclusive; when omitted, the solver uses zero point nine zero unless roof_surface supplies a preset. Optional roof_surface is metal, tile, asphalt_shingle, membrane, gravel_built_up, green_roof, or custom; custom requires an explicit runoff_coefficient. Aliases map area, footprint_area, and footprint to roof_area; depth, rain_depth, design_rain, and design_rainfall to rainfall_depth; C, c, and coefficient to runoff_coefficient; surface and covering to roof_surface. On success the response echoes normalized inputs, area_m2 and rainfall_depth_m after conversion, runoff_coefficient and c_source (default, preset, input, or override), runoff_volume_m3, runoff_volume_liters, runoff_volume_gallons, runoff_volume_ft3, effective_runoff_depth_mm, formula, message, and ordered steps suitable for teaching or regression asserts. Failed validation—missing required fields, non-finite numbers, zero or negative area or depth, coefficient outside zero to one, unknown units or surface tokens, or custom without a coefficient—returns invalid_input and is never charged. Pricing is a flat $0.002 per successful request with unit item.
Practical tips, limits, and related searches
If the covering is known but you lack a measured C, pick the nearest roof_surface preset and document the source; when a product data sheet lists a runoff coefficient, pass it as runoff_coefficient and optionally still set roof_surface for labelling. Keep magnitudes inside the published positive range up to one trillion so intermediate products stay finite in IEEE double precision on the Worker and in the browser. This landing targets people searching for a roof rainwater runoff calculator, roof drainage volume from rainfall depth, or design storm runoff for gutters and cisterns; it is not a rainfall intensity converter alone, not a gutter length takeoff, and not a municipal stormwater permit model. Failed tasks that return invalid_input do not consume prepaid balance, which keeps exploratory scripts cheap when integrators deliberately send zero area to exercise the error path.
Integration use cases
Teaching fixtures and API golden tests
Developers and instructors generate known-good V = C × A × d cases plus deliberate zero-area rejections as deterministic examples for unit tests.
Technical questions
What runoff coefficient should I use?
Typical impermeable roofs use about 0.85–0.95. Pick a roof_surface preset or pass runoff_coefficient from product data; green roofs often need a lower C.