# Contractor License Lookup & New Contractors — WA OR NY CT TX (`northbell/contractor-licenses`) Actor

Look contractors up by name or license number, or list newly licensed contractor companies, from Washington L\&I, Oregon CCB, New York DOL, Connecticut DCP and Texas TDLR open data: status, expiry, bond, insurance, compliance flags. No login.

- **URL**: https://apify.com/northbell/contractor-licenses.md
- **Developed by:** [Northbell](https://apify.com/northbell) (community)
- **Categories:** Lead generation, Business
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.40 / 1,000 licenses

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Contractor License Lookup & New Contractors — WA OR NY CT TX

**Check a contractor's license, or get the contractor companies that were just licensed**, straight from the official open data of three state licensing agencies: **Washington L\&I**, the **Oregon Construction Contractors Board (CCB)** and the **New York State Department of Labor Contractor Registry**, the **Connecticut Department of Consumer Protection** (home improvement, new home construction, major, demolition, asbestos and lead abatement contractors), and for look-ups the **Texas Department of Licensing and Regulation (TDLR)** air-conditioning, electrical, sign, appliance-installation and elevator contractors. One clean row per license: **company, license number, status, license type and trades, licensed and expiry dates, city and ZIP**, plus the **surety bond and liability insurance** on file (Washington, Oregon) or the **wage, debarment, violation and workers' compensation flags** (New York). No login, no API key, $3 per 1,000 licenses plus $0.01 a run.

**Try it now. The input is already filled in.** Press **Start**: contractor companies licensed in the last 7 days in Washington, Oregon, New York and Connecticut, 20 per state — **80 licenses in about 35 seconds, for $0.25** (measured on 29 Oct 2026).

| `state` | `licensedOn` | `companyName` | `city` | `licenseType` / `trades` | `bond` | `insurance` |
| --- | --- | --- | --- | --- | --- | --- |
| WA | 2026-10-28 | BIGFOOT CUSTOM BUILDS LLC | PASCO | General | $30,000 | Atlantic Casualty Ins Co |
| WA | 2026-10-28 | RENKO TILE LLC | PACIFIC | Tile, Ceramic, Mosaic… | $15,000 | Contractors Bonding & Insurance |
| OR | 2026-10-27 | BW ELECTRIC LLC | BORING | Residential / Commercial Specialty Contractor | $55,000 | Property & Casualty Ins Co of Hartford |
| OR | 2026-10-26 | SAFE CHIMNEY INC | PORTLAND | Residential General Contractor | $25,000 | Great American E & S Ins Co |
| NY | 2026-10-27 | Jamin B LLC | Binghamton | Contractor Registry (public work) | | workers' comp: yes, debarred: no |

**To check a contractor**, put its name or license number in **Look up** (for example `Skanska` or `264089`): every chosen state is searched, current and past licenses alike, so an expired, suspended or out-of-business license shows up too.

| state | agency and list | what you get | new in 30 days (to 29 Oct 2026) |
|---|---|---|---|
| Washington | L\&I contractor licenses (every status) | license type, specialties, status, period start and expiry, UBI, active bond and insurance | 882 active company licenses (new and renewed) |
| Oregon | CCB active licenses | license types (endorsements), first registration date, expiry, bond and insurance, county | 436 newly registered companies |
| New York | DOL Contractor Registry (needed for public work) | certificate, status, issue and expiry dates, outstanding wage assessments, debarment, labor/tax and safety violations, workers' compensation | 1,017 certificates |
| Connecticut | DCP State Licenses and Credentials: home improvement, new home construction, major, demolition, asbestos and lead abatement contractors | credential number, type, status, first issue and expiry dates, trade name | 265 newly licensed companies |
| Texas | TDLR licenses: A/C, electrical, electrical sign, appliance installation and elevator contractors | license type and number, expiry (Active or Expired), city, county | look-ups only (no license dates published) |

### Who uses it

- **Homeowners, general contractors and property managers**: verify a contractor before hiring or paying — is the license active, when does it expire, which bond and insurer are on file.
- **Insurance, surety and bonding**: newly licensed contractors in Oregon and Washington, with the bond and liability insurer they started with.
- **Building-supply, equipment and software sales**: new roofing, electrical, plumbing or general contractors; filter **Trade contains** on `roof`, `electric`, `plumb`.
- **Public-work compliance**: New York subcontractors with outstanding wage assessments, debarment or no workers' compensation.

### Input

```json
{ "states": ["OR", "WA"], "licensedWithinDays": 7, "tradeContains": ["roof"], "output": "new" }
```

Look companies up:

```json
{ "lookup": ["Example Builders", "264089", "ALPHACC744P8"] }
```

- **Look up**: company names (any part) or license numbers; a 9-digit Washington UBI also works. Fills mean look-up mode: every chosen state, any date, any status.
- **States**: Washington, Oregon, New York, Connecticut, Texas, or all five (empty). Texas is used for look-ups only.
- **Licensed within (days)**: for the list of new contractors. What the date means differs by state: Oregon's is the **first** registration with the CCB and Connecticut's the **first** issue of the credential (truly new contractors); Washington's is the start of the **current license period**, so renewals are in it too; New York's is the certificate's issue date (new and renewed).
- **Trade or license type contains** / **City contains**: keep licenses whose type, trade or city contains one of your words.
- **Active licenses only**: on by default for the new-contractor list, off by default for look-ups.
- **Output**: all licenses in the window, or only the licenses your last run with the same settings did not return, dated no more than 7 days before the newest one it returned (for a daily schedule; states add licenses a few days late, and those still come through). Licenses left out by **Max contractors per state** are remembered as seen and are not returned later.

### What you get

| Field | What it is |
|---|---|
| `state`, `agency` | WA, OR, NY, CT or TX, and the licensing agency |
| `licenseNumber`, `companyName`, `dbaName`, `businessType` | the license or certificate number, the company, its trade name (NY) and form (LLC, Corporation…) |
| `licenseType`, `trades` | the license type and every specialty or endorsement (WA specialties, OR endorsements) |
| `status`, `suspendedOn` | ACTIVE, EXPIRED, SUSPENDED, OUT OF BUSINESS… (WA); Active, exempt or not (OR); Active (NY) |
| `licensedOn`, `licensedOnMeaning`, `firstLicensedOn`, `expiresOn` | the license date and what it means in that state, the first registration (OR) and the expiry |
| `city`, `addressState`, `zip`, `county` | where the company is |
| `stateBusinessId` | Washington UBI (the state business number) |
| `bond` | surety company, amount, effective and expiry dates (WA, OR) |
| `insurance` | liability insurer, amount, effective and expiry dates (WA, OR) |
| `compliance` | New York: `outstandingWageAssessments`, `debarred`, `debarmentEndsOn`, `laborOrTaxLawViolation`, `safetyViolation`, `workersCompInsurance`, `workersCompExempt`, `apprenticeshipProgram`, `mwbeOwned`, `publiclyTraded` |
| `matchedLookup` | the look-up line this license matched |
| `isNewSinceLastRun` | `true` for a license your last run did not return, dated no more than 7 days before the newest one it returned (`null` on the first run and in look-ups) |
| `source`, `licenseTerms`, `retrievedAt` | the agency and dataset, its licence, and when it was read |

**Not returned, on purpose**: people. Sole proprietors are left out completely (Washington "Individual", New York "Sole Proprietorship", Connecticut "Individual" and "Sole Proprietor", and Oregon and Texas licenses whose name carries no company marker such as LLC, Inc or Corp). The lists also hold principals' and officers' names, phone numbers and street addresses; the Actor never returns them — city, state and ZIP only.

### Sources and licences

- **Washington**: *L\&I Contractor License Data — General*, *— Bond* and *— Insurance* on data.wa.gov, Department of Labor & Industries, Open Data Commons Public Domain Dedication.
- **Oregon**: *CCB Active Licenses* on data.oregon.gov, Construction Contractors Board, public domain.
- **New York**: *Contractor Registry Certificate* on data.ny.gov, Department of Labor, under the Open NY terms of use (no attribution or re-use restrictions).
- **Connecticut**: *State Licenses and Credentials* on data.ct.gov, Department of Consumer Protection, public domain; only the contractor credentials above are read (electrical, plumbing and other trade licenses are held by individuals and are not read).
- **Texas**: *TDLR - All Licenses* on data.texas.gov, Texas Department of Licensing and Regulation; only the contractor license types above are read.

The Actor reads each state's official open-data API (Socrata), one request a second per portal as their robots.txt asks. Each list is refreshed daily by the state.

### Pricing

**$3 per 1,000 licenses**, plus $0.01 per run. Look-ups that find nothing, licenses left out as already returned, and error rows are free.

### Notes

- **This is each state's own list, not a national database.** A company licensed in Oregon and Washington comes back once per state.
- **Oregon lists active licenses only**: a lapsed Oregon license is not found by a look-up.
- **Texas lists each license with its current expiry only**: `status` is Active until that date and Expired after it; suspensions are not in the open data.
- **New York's registry is for public work** (contractors and subcontractors on public projects), not a general contractor license.
- **Washington renewals**: a renewed license comes back on the list with its new period start; use `licensedOnMeaning` and the license number to tell.

More company records from northbell: [New LLC & Business Registrations](https://apify.com/northbell/us-business-registrations), [Building Permits](https://apify.com/northbell/building-permits), [UK Companies House Scraper](https://apify.com/northbell/companies-house-search).

### For AI agents

`{"lookup": ["Example Builders"], "maxMatchesPerLookup": 5}` returns up to 5 licenses per state with `status`, `expiresOn`, `bond` and `insurance`. `{"states": ["OR"], "licensedWithinDays": 3}` returns Oregon contractors first registered in the last 3 days. Rows have `type`: `license` or `error`.

# Actor input Schema

## `lookup` (type: `array`):

One per line: part of a company name (`Skanska`), a license number (Washington `ALPHACC744P8`, Oregon CCB `264089`, New York `26-635GA-CR`, Connecticut `HIC.0707510`, Texas TDLR `21388`) or a Washington UBI. When filled, the run looks these up in every chosen state, current and past licenses alike (expired, suspended, out of business), instead of listing new contractors. Leave empty to list newly licensed contractors.

## `states` (type: `array`):

Leave empty for all five. Texas publishes no license dates, so it is used for look-ups only and skipped in the list of new contractors.

## `licensedWithinDays` (type: `integer`):

For the list of new contractors: licenses dated at most this many days ago. Oregon and Connecticut: first registration or first issue (new contractors only). Washington: start of the current license period (new and renewed licenses). New York: certificate issue date (new and renewed).

## `tradeContains` (type: `array`):

Keep only licenses whose type or trade contains one of these words (e.g. `electric`, `plumb`, `roof`, `residential`, `commercial`). Leave empty for all.

## `cityContains` (type: `array`):

Keep only contractors whose city contains one of these words (e.g. `Seattle`, `Portland`). Leave empty for all.

## `activeOnly` (type: `boolean`):

On by default for the list of new contractors, off by default for look-ups (so expired, suspended and out-of-business licenses show up when you check a company). Oregon publishes active licenses only.

## `output` (type: `string`):

For the list of new contractors on a schedule: with "only since my last run", a run returns just the licenses dated after the newest one your last run with the same settings returned. Licenses left out by Max per state are not returned later.

## `maxItemsPerState` (type: `integer`):

For the list of new contractors, newest first. In the 30 days to 29 Oct 2026 the lists held 882 active company licenses in Washington (new and renewed), 436 newly registered companies in Oregon, 265 newly licensed companies in Connecticut and 1,017 New York certificates.

## `maxMatchesPerLookup` (type: `integer`):

For look-ups by name, per state.

## Actor input object example

```json
{
  "states": [
    "WA",
    "OR",
    "NY",
    "CT"
  ],
  "licensedWithinDays": 7,
  "output": "all",
  "maxItemsPerState": 20,
  "maxMatchesPerLookup": 20
}
```

# Actor output Schema

## `licenses` (type: `string`):

Company, license number, status, type, dates, city, bond, insurance and compliance for each license.

# 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 = {
    "states": [
        "WA",
        "OR",
        "NY",
        "CT"
    ],
    "licensedWithinDays": 7,
    "maxItemsPerState": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("northbell/contractor-licenses").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 = {
    "states": [
        "WA",
        "OR",
        "NY",
        "CT",
    ],
    "licensedWithinDays": 7,
    "maxItemsPerState": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("northbell/contractor-licenses").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "states": [
    "WA",
    "OR",
    "NY",
    "CT"
  ],
  "licensedWithinDays": 7,
  "maxItemsPerState": 20
}' |
apify call northbell/contractor-licenses --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,northbell/contractor-licenses"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/41TBdJB7FwUTFDwgO/builds/YTgyejUbIVy1o1Qdh/openapi.json
