# US Construction Jobs API (`aspen-technology-labs-inc/us-construction-jobs-api`) Actor

Find US construction job postings by role, location, company, salary, posting age, employment type, remote status, and seniority. Built for construction job boards, recruiting products, and workforce intelligence.

- **URL**: https://apify.com/aspen-technology-labs-inc/us-construction-jobs-api.md
- **Developed by:** [Aspen Technology Labs, Inc.](https://apify.com/aspen-technology-labs-inc) (community)
- **Categories:** Jobs, Developer tools, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 job records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## US Construction Jobs API - JobsIndex by Aspen Tech Labs

This Actor provides direct access to US construction job postings, from hands-on job-site work to executive roles at general contractors. It currently covers approximately **70,000 active construction jobs from 11,313 unique US employers**, sourced from both direct employers and staffing agencies and updated daily.

The dataset captures hiring across the industry: a homebuilder such as D.R. Horton may be recruiting carpenters and site supervisors while a regional roofing company needs roofers or drywall installers and a Texas data-center project needs crane operators.

Jobs are organized into sub-categories such as construction manager, construction worker, installer, construction surveyor, carpenter, heavy equipment operator, painter, construction engineer, cabinet maker, and glazier. Title-level detail extends to construction superintendent, installation technician, construction estimator, site supervisor, roofer, crane operator, drywall installer, and insulator.

Coverage includes direct-employer postings from general contractors such as Turner Construction and Brasfield & Gorrie, homebuilders such as D.R. Horton, and companies such as Amazon and CBRE hiring their own construction and facilities staff. It also includes specialized construction and skilled-trades staffing agencies such as Aerotek, Michael Page, Insight Global, and MRINetwork.

Coverage spans every major US metro area. Use this Actor as an organic backfill layer for construction and skilled-trades job boards, as a competitive hiring signal for construction firms and staffing agencies, or as a data source for economists and researchers tracking regional construction employment and wage trends.

### Need More or Something Different?

If this Actor is working well for you, we'd love a review. For more data, custom feeds, feedback, or questions, reach out through our [website](https://jobsindex.com/) or by [email](mailto:inquiry+apify@aspentechlabs.com). You can also explore [JobMarketPulse](https://jobmarketpulse.com/), our labor and job market intelligence platform.

### Built-In Search Preset

This Actor is fixed internally to `country=United States` and `category=Construction`. The runtime always enforces those values even if different values are submitted. The internal preset is not editable through `what` or `where`; users narrow the construction dataset with the structured inputs below.

### Quick Start

```json
{
  "title": "Construction Project Manager",
  "region": "Texas",
  "size": 5
}
```

### Input Parameters

| Parameter | Description | Example |
|---|---|---|
| `salary` | Salary amount or range filter. | `30h-50h` |
| `country` | Fixed preset. Runtime always uses `United States`; changes are ignored. | `United States` |
| `region` | State, province, or region. | `Texas` |
| `city` | City filter. | `Houston` |
| `postal_code` | Postal or ZIP code filter. | `77002` |
| `metro_area` | Metropolitan area filter. | `Houston-Pasadena-The Woodlands, TX` |
| `title` | Job title filter. | `Construction Project Manager` |
| `company_name` | Company name filter. | `Turner Construction` |
| `company_domain` | Company website domain. | `turnerconstruction.com` |
| `category` | Fixed preset. Runtime always uses `Construction`; changes are ignored. | `Construction` |
| `sub_category` | More specific construction job function or trade. | `Construction Manager` |
| `industry` | Company industry filter. | `Construction` |
| `posted` | Relative posting age or ISO date. | `1w` |
| `employment_type` | Employment type. | `Full-Time` |
| `remote` | Work arrangement filter. Supported values: `remote`, `on-site`, `hybrid`. | `on-site` |
| `seniority` | Seniority level. | `Manager` |
| `page` | Page number, starting from 0. | `0` |
| `size` | Number of results per page. Default 5, min 1, max 100. | `5` |

### Salary Filter Format

Use `NUMBER[UNIT]` or `NUMBER[UNIT]-NUMBER[UNIT]`.

Supported units:

- `h` - per hour
- `d` - per day
- `w` - per week
- `m` - per month
- `y` - per year

Examples:

- `30h-50h` - hourly rate between 30 and 50
- `75000y` - yearly salary of 75,000
- `50000y-120000y` - yearly salary range

### Location Filtering

This Actor is fixed to `country=United States`. Use structured location filters to narrow results within the US:

- `region`
- `city`
- `postal_code`
- `metro_area`

### Limits and Pagination

This Actor uses the JobsIndex jobs API. Results are paginated with `page` and `size`.

| Parameter | Default | Min | Max |
|---|---:|---:|---:|
| `page` | 0 | 0 | Depends on `size` and the item cap |
| `size` | 5 | 1 | 100 |

Invalid `page` or `size` values can return `400 Invalid page or size parameters`.

#### Item Caps

| Query shape | Max items | Effective max `size` | Over-size behavior |
|---|---:|---:|---|
| No company filter | 1000 | 100 | Validation error; not silently capped |
| Company filter with the Actor preset or another filter | 20 | 20 | Silent cap with capping metadata |

A company filter means `company_name` or `company_domain`. This Actor always applies the internal `category=Construction` preset, so company-filtered requests use the 20-item cap.

When capping applies, response metadata includes `size_requested` and `size_capped_by="company|keywords"`. These fields are absent from uncapped responses.

No-company-filter requests are not silently capped. Requests beyond the 1000-item retrieval window can return `400 Item limit reached. Maximum of 1000 items can be retrieved`.

#### Field Validation

Invalid filter values can return `400 Invalid value for parameter: <name>`. Common validation examples include malformed company domains, invalid dates or relative `posted` values, invalid salary format, unsupported location formats, or overly long field values.

### Output

Each run stores job records in the default Apify dataset. The dataset schema includes an `Overview` table for the most useful fields and a `Raw data (all fields)` table for the complete JobsIndex record.

Example dataset item:

```json
{
  "id": "example-construction-job-id",
  "title": "Construction Project Manager",
  "title_raw": "Senior Construction Project Manager",
  "company_name": "Example Construction Company",
  "company_domain": "exampleconstruction.com",
  "category": "Construction",
  "sub_category": "Construction Manager",
  "country": "United States",
  "region": "Texas",
  "city": "Houston",
  "metro_area": "Houston-Pasadena-The Woodlands, TX",
  "salary_value": "90000.00-120000.00",
  "salary_currency": "USD",
  "salary_unit": "YEAR",
  "employment_type": "Full-Time",
  "remote": "on-site",
  "posted": "2026-08-01",
  "url_source": "https://exampleconstruction.com/careers/project-manager",
  "url_apply": "https://exampleconstruction.com/careers/project-manager/apply"
}
```

Field availability depends on the source job posting.

# Actor input Schema

## `salary` (type: `string`):

Salary amount/range filter. Format: 1-9 digits followed by y, m, w, d, or h; optional range A-B. Examples: 20h-30h, 35h, 20h-200000y.

## `country` (type: `string`):

Fixed preset for this Actor. The runtime always uses United States; changing this value in input is ignored.

## `region` (type: `string`):

State, province, or region. Maximum 80 characters.

## `city` (type: `string`):

City filter. Maximum 100 characters.

## `postal_code` (type: `string`):

Postal or ZIP code. Maximum 20 characters.

## `metro_area` (type: `string`):

Metropolitan area filter. Maximum 100 characters. Example: Denver-Aurora-Centennial, CO.

## `title` (type: `string`):

Job title filter. Maximum 200 characters.

## `company_name` (type: `string`):

Company name filter. Company filters reduce the retrievable item cap; see README.

## `company_domain` (type: `string`):

Company website domain in valid DNS form, for example ibm.com. Company filters reduce the retrievable item cap; see README.

## `category` (type: `string`):

Fixed preset for this Actor. The runtime always uses Construction; changing this value in input is ignored.

## `sub_category` (type: `string`):

More specific construction job function or trade. Maximum 100 characters.

## `industry` (type: `string`):

Company industry. Maximum 100 characters. Example: Food Products or Hotels and Restaurants.

## `posted` (type: `string`):

Relative posting age, such as 1h, 1d, 1w, 1m, or an ISO date: YYYY, YYYY-MM, YYYY-MM-DD.

## `employment_type` (type: `string`):

Employment type, for example Full-Time. Comma-separated values are supported; each value can be up to 31 characters.

## `remote` (type: `string`):

Work arrangement filter. Supported values: remote, on-site, hybrid.

## `seniority` (type: `string`):

Seniority level, for example Junior, Middle, Senior. Comma-separated values are supported; each value can be up to 31 characters.

## `page` (type: `integer`):

Page number. Starts from 0. Pagination is capped by query shape: no company filter up to 1000 items, company filter with another filter up to 20 items, company filter only up to 5 items.

## `size` (type: `integer`):

Number of results per page. Default 5, min 1, max 100. Effective maximum can be lower for company-filtered queries; see README.

## Actor input object example

```json
{
  "salary": "",
  "country": "United States",
  "region": "",
  "city": "",
  "postal_code": "",
  "metro_area": "",
  "title": "",
  "company_name": "",
  "company_domain": "",
  "category": "Construction",
  "sub_category": "",
  "industry": "",
  "posted": "",
  "employment_type": "",
  "remote": "",
  "seniority": "",
  "page": 0,
  "size": 5
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `meta` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("aspen-technology-labs-inc/us-construction-jobs-api").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("aspen-technology-labs-inc/us-construction-jobs-api").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call aspen-technology-labs-inc/us-construction-jobs-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=aspen-technology-labs-inc/us-construction-jobs-api",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/Uv0vBFJoYnJ9yZP82/builds/PD4TkAgtVvSwiAerJ/openapi.json
