How Estimates Are Calculated

Where every price on this site comes from — the public datasets behind it, the math applied, and what the numbers can and cannot tell you.

Every price on this site is an estimate built from public data, not a quote and not a number we invented. This page explains exactly where each figure comes from, the math applied to it, and the limits of what it can tell you.

The short version

  1. We research a national base price for the job — a low, average and high.
  2. We work out where you are, from your ZIP code down to the metro area.
  3. We adjust the national price using regional price data and local income data for that area.

The result is a range for your area rather than one national number that is wrong almost everywhere.

Step 1 — The national base price

Each service we cover starts with a researched national range: a low, an average and a high, plus the unit the trade actually prices in (per project, per square foot, per hour). This base reflects a typical job in typical conditions, before any local adjustment.

The base covers the main work in an average job. Extras that are commonly billed separately — permits, disposal, emergency call-outs — are called out on each service page rather than hidden inside the average.

Step 2 — Locating you (HUD)

Prices track metro areas far better than they track states. To get from a ZIP code to a metro area we use the HUD USPS ZIP Code Crosswalk, the standard mapping between USPS ZIP codes and Census geographies (here, the CBSA / metro area).

When a ZIP maps to more than one metro, we take the one holding the largest share of that ZIP’s residential addresses. Rural ZIPs that sit outside any metro fall back to state-level data.

Step 3 — Regional Price Parity (BEA)

The core adjustment comes from Regional Price Parities published by the U.S. Bureau of Economic Analysis. An RPP is an index where 100 = the national average: an area at 112 is 12% more expensive than the US as a whole, an area at 91 is 9% cheaper.

We use the “all items” line from two BEA tables:

  • MARPP — metro-area parities, used whenever we can resolve your ZIP to a metro.
  • SARPP — state parities, used for rural ZIPs and state-level pages.

That index becomes a straight multiplier: RPP ÷ 100. If neither is available, the multiplier is 1 and you are seeing the national figure.

Step 4 — Local income and housing (Census)

Price parity captures the general cost of an area, but what local households earn also shapes what trades can charge. We pull three figures from the U.S. Census American Community Survey (5-year estimates):

  • Population (table B01003)
  • Median household income (table B19013)
  • Median home value (table B25077)

Median household income drives a second, deliberately gentle multiplier — the square root of the local median divided by the national median (about $75,149). The square root damps the effect so income nudges the estimate rather than dominating it, and the result is clamped to a 0.85–1.20 range so no single area swings wildly.

Putting it together

The two multipliers combine, and the national low, average and high are each multiplied by the result:

Local price = National price × (RPP ÷ 100) × income factor

A worked example — a job with a $1,200 national average, in a metro with an RPP of 112 and a median household income of $95,000:

  1. Price parity: 112 ÷ 100 = 1.12
  2. Income factor: √(95,000 ÷ 75,149) ≈ 1.12
  3. Estimate: $1,200 × 1.12 × 1.12 ≈ $1,510

The same math is applied to the low and the high, so the whole range shifts with the area instead of only the midpoint.

What Low, Average and High mean

  • Low — a small, simple, easy-access job in good conditions.
  • Average — what a typical homeowner with a typical job actually pays. This is the number to plan around.
  • High — a large or complicated job: difficult access, premium materials, or work that needs extra equipment or permits.

Real quotes outside this range are not necessarily wrong. They usually mean the job has a condition the estimate cannot see.

How often the data updates

BEA publishes Regional Price Parities annually and we track the latest release, with the option to pin a specific year. Census ACS 5-year estimates also update annually. City and state estimates are generated and stored ahead of time, so loading a page never triggers a live API call — pages stay fast, and the figures you see are stable rather than shifting between refreshes.

What these numbers are not

  • Not a quote. Only a contractor who has seen the job can give you a price they will stand behind.
  • Not a live feed. Estimates reflect the most recent published datasets, which lag the market.
  • Not a substitute for multiple bids. Use these ranges to sanity-check the bids you receive and to spot an outlier.
  • Not sensitive to your specific property. Access, condition, age and local ordinances can all move a real price outside the range.

Data sources

Source What we use it for
BEA Regional Price Parities Metro (MARPP) and state (SARPP) price indices — the main local adjustment
HUD USPS ZIP Code Crosswalk Mapping a ZIP code to its metro area (CBSA)
U.S. Census — American Community Survey Population, median household income and median home value
Census ACS 5-Year API The specific 5-year estimate tables listed above

See the method in action

The quickest way to understand any of this is to use it: open a guide, enter a ZIP, and watch the range move for that area.