EstimationPro AI EstimationPro AI

Construction Cost API

A free public API for U.S. construction and remodeling costs. 400+ pricing items across 34 trades, regional multipliers for 50 metros, and material price trend endpoints (see /trends). No API key required.

411
Pricing Items
34
Trades
50
Metro Areas
$0
Cost

Quick Start

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

# Get roofing costs in Los Angeles
curl "https://estimationpro.ai/api/v1/costs?trade=roofing&zip=90210"

# Get the cost index for all metros
curl "https://estimationpro.ai/api/v1/index"

# Check material price trends (currently returns null values, see the Trends endpoint below)
curl "https://estimationpro.ai/api/v1/trends"

Turning a response into a line item: the roofing call above returns architectural-installed at typical $6.22/sq ft in the 90210 ZIP. For a 2,000 sq ft roof: 2,000 × $6.22 = $12,440 (range $9,040-$15,820 low to high), before tear-off, disposal and your markup.

Get the Data

Three ways to access U.S. construction cost data, all free:

{}

API

Call endpoints directly from your app. JSON responses, no API key required.

View endpoints ↓
📊

Kaggle

Download a snapshot of the dataset (CSV and JSON): 385 items, regional multipliers, and the EPCI cost index.

Get on Kaggle →
🔧

Embed

Embed interactive cost calculators on your site. 250+ tools for contractors and homeowners.

Browse calculators →

Rate Limits

Each IP gets 100 requests per day in total, shared across /trades, /costs, /costs/:itemId, /trends and /multipliers, plus a separate 500 per day on /api/v1/index. Both daily counts reset at midnight UTC. A site-wide limit of 100 requests per minute per IP also applies, resetting every minute. Counts are kept in memory on each server instance, so they are loosely enforced and may not count down reliably between requests. Please cache responses and keep usage modest.

EndpointLimit
All other endpoints (combined)100 requests/day
/api/v1/index500 requests/day

The /api/v1 endpoints return X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset (seconds until the daily reset). Responses also carry RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset for the per-minute limit; a 429 from the per-minute limit carries only those.

Response Format

Successful responses are JSON with a data field containing the result and a meta field with attribution. Errors (400, 404, 429, 503) return {"error": "message"} only:

{
  "data": { ... },
  "meta": {
    "source": "EstimationPro.ai Construction Cost API",
    "url": "https://estimationpro.ai/api",
    "methodology": "BLS OEWS + PPI + contractor feedback",
    "updated": "2026-09-24",
    "license": "Free for non-commercial use with attribution"
  }
}

meta.updated is the date of your request, not the date the underlying data last changed. For an item's actual freshness, check its own lastVerified field.

Endpoints

Clicking "Try it live" counts against your daily rate limit above.

GET /api/v1/trades 100/day shared

Returns all 34 construction trades with item counts.

Example Response

{
  "data": {
    "trades": [
      { "trade": "concrete", "itemCount": 13 },
      { "trade": "roofing", "itemCount": 14 },
      { "trade": "electrical", "itemCount": 23 }
    ],
    "totalItems": 411
  },
  "meta": { "source": "EstimationPro.ai Construction Cost API", ... }
}
Try it live →
GET /api/v1/costs 100/day shared

Returns all pricing items for a trade. Optionally adjusted for regional pricing by ZIP code or state. Only items with regionallyAdjusted: true are adjusted. Items the database flags as non-regional (mostly retail material prices such as shingle bundles, tile and paint, but also about 20 installed items such as thermostat, smart switch and garage door opener installs, plus percentage items like contractor markup) return the national price whatever location you pass, so check regionallyAdjusted on each item.

Parameters

NameRequiredDescription
trade Required Trade name (e.g., "roofing", "concrete", "electrical")
zip Optional ZIP code for regional price adjustment
state Optional State code (e.g., "CA", "TX") for regional adjustment

Example Response

{
  "data": {
    "trade": "roofing",
    "location": "Los Angeles-Long Beach-Anaheim, CA",
    "multiplier": 1.13,
    "itemCount": 14,
    "items": [
      {
        "id": "architectural-installed",
        "description": "Architectural shingles, installed per sq ft",
        "unit": "sq ft",
        "low": 4.52,
        "typical": 6.22,
        "high": 7.91,
        "volatility": "standard",
        "lastVerified": "2026-06-11",
        "regionallyAdjusted": true
      }
    ]
  }
}
Try it live →
GET /api/v1/costs/:itemId 100/day shared

Returns full detail for a specific pricing item including sources.

Parameters

NameRequiredDescription
itemId Required Item ID (e.g., "ready-mix-standard", "outlet-installation")

Example Response

{
  "data": {
    "trade": "concrete",
    "id": "ready-mix-standard",
    "description": "Ready-mix concrete (3000-4000 PSI), delivered",
    "unit": "cubic yard",
    "low": 110,
    "high": 200,
    "typical": 150,
    "tolerance": 0.35,
    "regional": true,
    "volatility": "volatile",
    "sources": [
      "Concrete Network 2026 ($160-195/cy, natl avg $179.89 per NRMCA)",
      "Angi 2026 concrete cost per yard",
      "concretecalculate.com 2026 ready-mix by state ($120-165, avg ~$140)"
    ],
    "lastVerified": "2026-08-30"
  }
}
Try it live →
GET /api/v1/index 500/day

Returns the EstimationPro Cost Index for 50 states plus DC and 50 metro areas. EPCI = 100 at national average. Includes project-specific costs for bathroom remodels, kitchen remodels, deck builds, interior paint, and roof replacements. The index is a snapshot generated 2026-03-16 from the multipliers and prices at that time. It is not updated when item prices change, so use /costs for current prices.

Example Response

{
  "data": {
    "meta": { "methodology": "EPCI = 100 * regional multiplier..." },
    "index": {
      "metro:new-york-newark-jersey-city": {
        "name": "New York-Newark-Jersey City, NY-NJ-PA",
        "epci": 118,
        "projects": {
          "bathroom_remodel": { "low": 14160, "typical": 23600, "high": 35400 }
        }
      },
      "state:TX": { "name": "TX", "epci": 90, ... }
    }
  }
}
Try it live →
GET /api/v1/trends 100/day shared

Returns commodity prices (copper, aluminum, lumber, steel), FRED economic indicators (construction spending, housing starts, building permits, Case-Shiller), and BLS PPI series data. The data pipeline that populates these values is currently disabled. Until it is turned back on, price and value fields return null, trendDirection returns "unknown", and PPI changePercent returns 0 with lastChecked "never" (0 here means no data, not no change).

Example Response

// No live data until the next refresh (see note above).
{
  "data": {
    "commodities": [
      { "commodity": "copper", "unit": "USD/lb", "latestPrice": null, "trendDirection": "unknown" }
    ],
    "economicIndicators": [
      { "seriesId": "HOUST", "title": "Housing Starts", "latestValue": null, "yearOverYearChange": null }
    ],
    "ppiSeries": [
      { "id": "WPU08", "name": "Lumber & Wood Products", "changePercent": 0, "lastChecked": "never" }
    ]
  }
}
Try it live →
GET /api/v1/multipliers 100/day shared

Returns the regional cost multiplier for a ZIP code or state. Use this to adjust national average prices to an estimated regional level (derived from BLS OEWS construction wages).

Parameters

NameRequiredDescription
zip Optional ZIP code (one of zip or state required)
state Optional State code (one of zip or state required)

Example Response

{
  "data": {
    "location": "98101",
    "resolvedState": "WA",
    "region": "pacific",
    "multiplier": 1.21,
    "label": "Seattle-Tacoma-Bellevue, WA",
    "source": "metro",
    "stateDetail": { "multiplier": 1.12, "region": "pacific" },
    "regionDetail": { "name": "Pacific", "multiplier": 1.15, "laborMultiplier": 1.33 }
  }
}
Try it live →

Data Sources

Kaggle Dataset

A snapshot of the construction cost dataset (version 1, generated 2026-03-19) is available on Kaggle for download, analysis, and use in your own projects. It is licensed CC BY 4.0 (attribution required, commercial use allowed), which is more permissive than this API's non-commercial license below. It includes 385 pricing items across 32 trades, regional multipliers for all 50 states, and the EPCI cost index for 50 metro areas. For current data, use the live API above.

View on Kaggle →

GitHub

We've submitted this API to the public-apis directory on GitHub (pending review). Star or follow the PR to stay updated.

View on GitHub →

Attribution

This API is free for non-commercial use. Please include attribution when displaying data from this API:

Data from <a href="https://estimationpro.ai/tools/api">EstimationPro.ai Construction Cost API</a>