Water service line calculator
15 GPM over 80 feet of copper, with 60 psi at the street and 20 psi kept at the house, needs a three-quarter-inch service line. Get the standard diameter, the pressure left at the house and the water speed. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Demand gpm
- 15
- Supply pressure psi
- 60
- Length ft
- 80
- Residual pressure psi
- 20
- Material
- Copper
- Hazen williams c
- 140
- Pressure budget psi
- 40
- Available head ft
- 92.4
- Exact diameter in
- 0.6751164831
Homeowners replacing a lead or galvanized service, plumbers bidding a new lateral, and estimators who only know peak gallons per minute and street psi need a transparent diameter they can compare to stock half-inch through four-inch sizes. This water service line calculator takes total household demand in GPM, available supply pressure at the street connection, developed length of the run, optional residual pressure at the house, and pipe material, then solves the Hazen-Williams friction equation for the exact minimum diameter and rounds up to the next standard nominal size. It reports head loss, residual pressure at the house end, mean velocity, and ordered steps so quotes and checklists stay auditable.
How demand, street pressure, and Hazen-Williams set diameter
A water service line is the pipe from the utility main or curb stop to the building meter or first shutoff. You convert the usable pressure budget into available head by subtracting the residual pressure you want to keep at the house from the street supply pressure, then multiplying the difference by two point three one feet of water per psi. Rearranging the formula for diameter yields the exact theoretical minimum pipe that would spend the entire budget on friction.
Because you buy stock sizes rather than continuous diameters, the tool then steps up through half, three-quarter, one, one-and-a-quarter, one-and-a-half, two, two-and-a-half, three, and four inch nominal sizes and keeps the first size whose computed head loss still fits inside the available head. Material enters only through the C-factor: copper commonly uses one hundred forty, smooth plastics such as PEX, polyethylene, HDPE, PVC, and CPVC use one hundred fifty, and galvanized steel uses one hundred twenty for a rougher interior.
Mean velocity is reported as zero point four zero eight five times GPM over diameter squared so you can flag runs that would be noisy or erosive.
What you can do with it
Replace a residential service lateral
Homeowners and plumbers enter peak GPM, measured street psi, and trench length to pick a standard copper or PEX diameter before pulling a permit or ordering pipe.
Compare materials under the same demand
Estimators swap material between copper and galvanized to see how C-factor changes recommended diameter, residual pressure, and velocity on the same run.
FAQ
How does the water service line calculator choose diameter?
It converts the street-minus-residual pressure budget into feet of head, solves Hazen-Williams for the exact minimum inches, then rounds up to the next standard nominal size (½″ through 4″) that keeps head loss within that budget.
Why does pipe material change the result?
Hazen-Williams uses a C-factor for interior smoothness. Copper uses 140; PEX, polyethylene, HDPE, PVC, and CPVC use 150; galvanized uses 120. Smoother pipe allows a smaller diameter for the same demand and pressure budget.
Is this a full plumbing design?
No. It is first-pass friction sizing for a single developed service length.
What size water service line do I need for 15 GPM?
Over 80 feet of copper with 60 psi at the street and a 20 psi target at the house, the exact minimum falls just under three-quarter inch, so that stock size is the recommendation.
What residual pressure should I keep at the house?
If you leave it out, the calculator keeps 20 psi at the house end, a common plumbing-code style floor. Whatever you choose must stay below the street pressure, because the difference is the budget the pipe can spend on friction.
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/water-service-line \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"demand_gpm":15,"supply_pressure_psi":60,"length_ft":80}'const res = await fetch("https://api.kit.forhosting.com/home/water-service-line", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"demand_gpm": 15,
"supply_pressure_psi": 60,
"length_ft": 80
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/home/water-service-line",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"demand_gpm": 15,
"supply_pressure_psi": 60,
"length_ft": 80
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/home/water-service-line", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"demand_gpm":15,"supply_pressure_psi":60,"length_ft":80}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"demand_gpm":15,"supply_pressure_psi":60,"length_ft":80}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/home/water-service-line", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"demand_gpm": 15,
"supply_pressure_psi": 60,
"length_ft": 80
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "home.water_service_line",
"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 to call the API and what comes back
POST a JSON body with required demand_gpm as the total peak household demand in US gallons per minute, required supply_pressure_psi as the available pressure at the street or curb connection, and required length_ft as the developed service length in feet. Optionally send residual_pressure_psi when you need a different floor than the default of twenty psi at the house end, and material when the run is not copper—accepted values include copper, pex, polyethylene, hdpe, pvc, cpvc, and galvanized, with common aliases such as pe, poly, and steel. Demand, street pressure, and length must be finite and positive within published absolute limits so intermediate powers stay finite on the Worker and in the browser. Residual must be non-negative and strictly less than street pressure; if residual equals or exceeds supply, there is no pressure budget left for friction and the call fails with invalid_input. On success the body echoes rounded demand_gpm, supply_pressure_psi, length_ft, residual_pressure_psi, material, and hazen_williams_c; reports pressure_budget_psi and available_head_ft; publishes exact_diameter_in and recommended_diameter_in with matched_standard; returns head_loss_ft, pressure_drop_psi, residual_at_house_psi, velocity_fps, and adequate; adds unit labels, method, formula, message, and ordered steps for display or regression. Failed validation—missing demand or street pressure or length, non-positive flow or pressure budget, residual not below supply, unknown material, or values outside absolute limits—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
Survey the trench path for true developed length including rises and detours, not only the straight-line property setback. Prefer copper or approved plastic materials allowed by the water purveyor; do not assume galvanized C-factors for new smooth plastic. Keep velocity in a moderate band for long services—very high feet per second can rattle pipes and accelerate wear even when residual pressure still looks fine on paper. Round-trip checks are easy: recompute available head as pressure budget times two point three one, rebuild exact diameter from the Hazen-Williams inverse, and confirm head loss at the recommended size stays within the budget after the same twelve-decimal rounding used for all numeric fields. When teaching or writing tests, pair a typical fifteen GPM eighty-foot copper case at sixty psi with a long low-pressure run that forces a larger diameter, and include a deliberate residual greater than or equal to supply to prove the invalid_input path. Failed tasks that return invalid_input do not consume prepaid balance, which keeps exploratory scripts cheap when you deliberately send residual above street pressure to verify error handling.
Integration use cases
SEO widgets and contractor quote forms
Embed the free browser path on a water service line calculator page so visitors get the same inch recommendation your API later uses in automation.
Technical questions
What inputs are required?
demand_gpm (peak household flow in GPM), supply_pressure_psi (street pressure), and length_ft (developed service length). residual_pressure_psi defaults to 20 psi; material defaults to copper.
What does the water service line calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.