DEV Community

Brad
Brad

Posted on • Originally published at estimationpro.ai

I Built the First Free Construction Cost API - Here's Why One Didn't Exist Until Now

Construction is a $2 trillion industry. Two. Trillion. And until now, there wasn't a single free API for cost data.

I know because I looked. For months.

The $42,000 Problem

My name's Brad. I've been a remodeling contractor in the Pacific Northwest for over 20 years. Third-generation carpenter. Five years in the Air Force as a B-52 crew chief before that. I've framed walls in Alaska, hung cabinets in Hawaii, and pulled permits in half a dozen states in between.

A couple years ago I started building EstimationPro.ai, an AI-powered estimating tool for contractors. The idea was simple: take photos of a job, add some notes, and get a professional estimate in minutes instead of hours. Every contractor I know spends their evenings hunched over spreadsheets instead of being with their family. I wanted to fix that.

But here's where it got ugly. I needed pricing data. What does a 2x4 cost? What's the going rate for a plumber in Seattle vs. Dallas? How much should I charge per square foot for tile install?

I figured this data was out there. It had to be. Construction is one of the largest industries on the planet.

It wasn't.

Every Door Was Locked

RSMeans/Gordian: The industry standard. Licensing starts at $356/year for a single user. Enterprise access? Up to $42,000/year. And you can't redistribute the data in your app.

ENR (Engineering News-Record): Paywalled. Their cost indices are useful but locked behind a subscription.

BuildingConnected, ProEst, Sage Estimating: All proprietary. All expensive. All closed.

I even checked the public-apis GitHub repo. It has 411,000+ stars and catalogs hundreds of free APIs across every industry you can think of. Weather has 20+ free APIs. Finance has over 100. There's a free API for astronomy. There's a free API for cat facts.

Construction? Zero entries. Nothing.

Think about that. You can get the current position of the International Space Station for free, but you can't look up what a sheet of drywall costs in Denver.

So I Built One

The EstimationPro Construction Cost API is live right now at estimationpro.ai/api/v1. No API key required. No signup. No paywall.

Here's what it covers:

  • 385 pricing items across 32 construction trades (concrete, roofing, electrical, plumbing, HVAC, framing, tile, paint, cabinetry, countertops, and 22 more)
  • Regional price adjustments for all 50 states and 50 metro areas, built on BLS OEWS wage data
  • Material price trends from BLS Producer Price Index (11 commodity series: lumber, steel, copper, concrete, drywall, plywood, and more)
  • Economic indicators from FRED (construction spending, housing starts, building permits, Case-Shiller home price index)
  • EPCI (EstimationPro Cost Index) - think CPI but specifically for remodeling, broken out by metro area

Every item has a low, typical, and high price. Every item has sources. Every item has a last-verified date.

Try It Right Now

Enough talking. Here's what you can do with it.

1. What does roofing cost in Los Angeles?

curl:

curl "https://estimationpro.ai/api/v1/costs?trade=roofing&zip=90210"
Enter fullscreen mode Exit fullscreen mode

JavaScript:

const res = await fetch(
  "https://estimationpro.ai/api/v1/costs?trade=roofing&zip=90210"
);
const { data } = await res.json();

console.log(`Location: ${data.location}`);
console.log(`Regional multiplier: ${data.multiplier}`);
data.items.forEach(item => {
  console.log(`${item.description}: $${item.low} - $${item.high} per ${item.unit}`);
});
Enter fullscreen mode Exit fullscreen mode

You get back every roofing line item, regionally adjusted for the LA market. Shingles, tear-off, underlayment, flashing, ridge vents, all of it.

2. How do construction costs compare across cities?

curl "https://estimationpro.ai/api/v1/index"
Enter fullscreen mode Exit fullscreen mode
const res = await fetch("https://estimationpro.ai/api/v1/index");
const { data } = await res.json();

// EPCI = 100 is the national average
// New York might be 118, Houston might be 90
Object.entries(data.index).forEach(([key, metro]) => {
  console.log(`${metro.name}: EPCI ${metro.epci}`);
  if (metro.projects?.bathroom_remodel) {
    const br = metro.projects.bathroom_remodel;
    console.log(`  Bathroom remodel: $${br.low.toLocaleString()} - $${br.high.toLocaleString()}`);
  }
});
Enter fullscreen mode Exit fullscreen mode

The EPCI is something I haven't seen anywhere else. It's a single number that tells you how expensive construction is in a given metro relative to the national average. New York at 118 means costs run about 18% above the national average. A city at 90 means 10% below.

3. Are material prices going up?

curl "https://estimationpro.ai/api/v1/trends"
Enter fullscreen mode Exit fullscreen mode
const res = await fetch("https://estimationpro.ai/api/v1/trends");
const { data } = await res.json();

// Commodity prices (copper, aluminum, lumber, steel)
data.commodities.forEach(c => {
  console.log(`${c.commodity}: $${c.latestPrice} ${c.unit} (${c.trendDirection})`);
});

// FRED economic indicators
data.economicIndicators.forEach(ind => {
  console.log(`${ind.title}: ${ind.latestValue} (YoY: ${ind.yearOverYearChange}%)`);
});

// BLS PPI for construction materials
data.ppiSeries.forEach(ppi => {
  console.log(`${ppi.name}: ${ppi.changePercent > 0 ? '+' : ''}${ppi.changePercent}%`);
});
Enter fullscreen mode Exit fullscreen mode

This endpoint combines three data sources into one call. If lumber prices spike 15% and you're bidding a framing job, you want to know. Your customers' apps should know too.

4. What's the regional multiplier for Seattle?

curl "https://estimationpro.ai/api/v1/multipliers?zip=98101"
Enter fullscreen mode Exit fullscreen mode
const res = await fetch(
  "https://estimationpro.ai/api/v1/multipliers?zip=98101"
);
const { data } = await res.json();

console.log(`State: ${data.resolvedState}`);       // "WA"
console.log(`Region: ${data.region}`);              // "Pacific"
console.log(`Multiplier: ${data.multiplier}`);      // 1.21
console.log(`Label: ${data.label}`);                // "Washington (Pacific region)"

if (data.regionDetail) {
  console.log(`Labor multiplier: ${data.regionDetail.laborMultiplier}`);
}
Enter fullscreen mode Exit fullscreen mode

The multiplier is derived from BLS Occupational Employment and Wage Statistics. It's the actual wage ratio for carpenters, electricians, and plumbers in that area compared to the national average, weighted and blended into a single number you can multiply against any national-average price.

5. Browse all available trades

curl "https://estimationpro.ai/api/v1/trades"
Enter fullscreen mode Exit fullscreen mode

Returns all 32 trades with their item counts. Good starting point if you want to explore what's available.

How the Data Stays Current

I'm not just dumping a spreadsheet into an endpoint and calling it a day. Four automated systems keep this data honest:

BLS PPI Tracker runs monthly, pulling 11 Producer Price Index series for construction materials. Lumber, steel, copper, concrete, drywall, plywood, asphalt, paint, gypsum, hardwood, plumbing fixtures. When a PPI series moves more than 5% from the baseline, affected pricing items get flagged for review and can auto-adjust.

FRED Tracker pulls economic indicators monthly. Construction spending, housing starts, building permits, the Case-Shiller home price index, and the PPI construction materials composite. These are the macro signals that tell you where the market is heading.

Commodity Tracker checks copper, aluminum, lumber, and steel prices weekly through Alpha Vantage and FRED. Each commodity has a pass-through rate that maps wholesale price changes to what a contractor actually pays at the retail level.

Retail Price Tracker validates against actual Home Depot prices via SerpApi. This is the ground truth. When the database says a 2x4 costs $4-7 and Home Depot is showing $9, we know something needs updating.

On top of all that, there's a contractor feedback loop. Every estimate generated through EstimationPro creates edit history. When contractors consistently adjust a line item up or down, that signal feeds back into the pricing database. Real contractors correcting real prices on real jobs.

Every pricing item also carries a volatility tier (volatile, standard, or stable) and a confidence score. Volatile items like lumber get refreshed more aggressively. Stable items like concrete labor rates hold longer.

Why It's Free

I've been in the trades for over 20 years. Every contractor who taught me something, every journeyman who showed me a better way to cut a miter or run a drain line, they didn't charge me for that knowledge. That's how the trades work. You learn from the people around you, and eventually you pass it on.

Locking construction cost data behind a $42,000 paywall doesn't help anyone build better software for contractors. Contractors already get squeezed enough. The developers trying to build tools for them shouldn't have to start from zero because the data is gatekept.

The only requirement is attribution. Link back to EstimationPro.ai. That's it.

The Details

Base URL: https://estimationpro.ai/api/v1

Endpoints:
| Endpoint | Description |
|---|---|
| GET /trades | List all 32 trades with item counts |
| GET /costs?trade=roofing | Get pricing items for a trade |
| GET /costs?trade=roofing&zip=90210 | Same, regionally adjusted |
| GET /costs/:itemId | Full detail on a single item |
| GET /index | EPCI cost index for states and metros |
| GET /trends | Commodity prices + economic indicators |
| GET /multipliers?zip=98101 | Regional multiplier for a location |

Rate limits: 100 requests/day per IP for most endpoints, 500/day for the index. Resets at midnight UTC. Rate limit headers included in every response.

CORS: Enabled for all origins. Call it from your frontend, your backend, your CLI, whatever.

Response format: Every response wraps data in { data: {...}, meta: {...} }. The meta block always includes the source, methodology, and last-updated date.

Full API docs: estimationpro.ai/api

What You Could Build With This

I built EstimationPro with this data. But there's a lot more that could exist:

  • A home renovation cost calculator (plug in ZIP code, get local prices)
  • A contractor bid comparison tool (are you being quoted fair prices?)
  • A material cost alert system (notify when lumber spikes)
  • A regional cost-of-living tool that includes actual construction costs, not just rent and groceries
  • A real estate investment analyzer that factors in renovation costs by market
  • An insurance claims estimator for damage repair

If you're a developer building anything in the construction, real estate, or home improvement space, this data was built for you.

Get Started

Fastest way to see it working:

curl "https://estimationpro.ai/api/v1/costs?trade=electrical&zip=10001" | python -m json.tool
Enter fullscreen mode Exit fullscreen mode

Full docs at estimationpro.ai/api.

Building something with it? I'd genuinely like to hear about it. Drop a comment below or reach out at estimationpro.ai.

And if a free construction cost API is something you've been waiting for, share this with someone who needs it. The construction industry is way behind on open data. Time to fix that.

Top comments (0)