Oregon CCB Contractor License Scraper | Leads, Bond & Insurance avatar

Oregon CCB Contractor License Scraper | Leads, Bond & Insurance

Pricing

from $17.00 / 1,000 results

Go to Apify Store
Oregon CCB Contractor License Scraper | Leads, Bond & Insurance

Oregon CCB Contractor License Scraper | Leads, Bond & Insurance

Scrape Oregon Construction Contractors Board (CCB) licenses: business name, RMI owner, address, phone, license #, status, endorsement, expiration, bond & insurance. Export JSON, CSV or Excel.

Pricing

from $17.00 / 1,000 results

Rating

0.0

(0)

Developer

Scrapers Lat

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Oregon CCB Contractor License Scraper - Leads, Bond & Insurance

Oregon CCB Contractor License Scraper - Leads, Bond & Insurance

Here is one real result, with every field the actor returns:

{
"businessName": "1-800-BOARDUP OF PORTLAND METRO",
"licenseNumber": "146973",
"status": "Active",
"address": "185",
"city": "OAKLAND AVENUE BIRMINGHAM",
"state": "MI",
"zip": "48009",
"searchQuery": "Portland",
"detailBusinessName": "BELFOR USA GROUP INC",
"detailAddress": "185 OAKLAND AVENUE BIRMINGHAM MI 48009",
"expirationDate": "2027-02-16",
"entityType": "Corporation",
"phone": "(503) 341-2780",
"endorsementType": "Commercial General Contractor Level 1Residential General Contractor",
"workersCompStatus": "Nonexempt",
"leadPaintCertified": true,
"leadPaintExpiration": "2026-08-29",
"wcInsuranceCarrier": "ACE AMERICAN INS CO",
"wcInsurancePolicyNo": "WLRC72644347",
"liabilityInsuranceCompany": "ACE AMERICAN INSURANCE CO",
"liabilityInsuranceAmount": 5000000,
"liabilityInsuranceExpiration": "2027-07-01",
"resBondCompany": "HARTFORD FIRE INS CO",
"resBondAmount": 25000,
"resBondExpiration": "Continuous until cancelled",
"commBondCompany": "HARTFORD FIRE INS CO",
"commBondAmount": 80000,
"commBondExpiration": "Continuous until cancelled",
"rmiOwner": null,
"officers": ["JONES, CHRISTOPHER MICHAEL", "KAY, SCOTT ALAN", "YELLEN, MICHAEL NEIL", "YELLEN, SHELDON"],
"officerCount": 4,
"assumedBusinessNames": ["1-800-BOARDUP OF CLARK COUNTY", "1-800-BOARDUP OF PORTLAND METRO", "1-800-BOARDUP OF SOUTHERN OREGON", "1-800-BOARDUP OF SPRINGFIELD METRO", "1-800-BOARDUP OF WILLAMETTE VALLEY METRO", "BELFOR PROPERTY RESTORATION"],
"source": "Oregon Construction Contractors Board",
"observedAt": "2026-08-10T14:37:12.815Z"
}

The most complete Oregon CCB contractor scraper available. It returns every field the Oregon Construction Contractors Board exposes for each licensed contractor, including phone, RMI owner and officers, endorsement type, entity type, expiration, workers' comp carrier and policy, liability insurance company and amount, residential and commercial surety bonds, lead-paint certification and assumed business names, and gives you status, endorsement, city and name filters to target exactly the contractor leads you need.

📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples

Apify Coverage Output Billing

Table of contents

What it does

The actor searches the Oregon Construction Contractors Board (CCB) license database for each of your search terms (business name, 8-digit license number, or city), optionally enriches every match with full license details, applies the status, endorsement, city and name filters you pass, and writes one normalized record per contractor to the run's dataset. With details on, each record carries phone, RMI owner and officers, endorsement and entity type, expiration date, workers' comp carrier and policy, liability insurance company and amount, residential and commercial surety bonds, lead-paint certification and assumed business names. With details off, you get listing-only rows (name, license number, status, address). Missing source values are returned as null.

Quickstart

Open the actor, paste this into the input, and press Run. It returns up to 50 Portland-area contractors with full details.

{
"searchQueries": ["Portland"],
"withDetails": true,
"activeOnly": false,
"maxContractors": 50
}

Search by business name or an 8-digit license number too, for example ["146973"]. Turn withDetails off for a faster listing-only pull. Every input field is optional.

Input reference

FieldTypeRequiredDefaultDescription
searchQueriesstring[]no["Portland"]One or more search terms. Each can be a business name, an 8-digit CCB license number, or a city. All are searched in one run.
withDetailsbooleannotrueEnrich each contractor with phone, RMI owner/officers, endorsement, expiration, entity type, insurance and bonds. Off returns listing-only rows.
activeOnlybooleannofalseLimit results to currently Active licenses.
statusesstring[]no(any)Keep only contractors whose status contains one of these, for example Active, Expired, Suspended.
endorsementsstring[]no(any)Keep only contractors whose endorsement contains one of these, for example Residential General Contractor, Commercial.
filterCitiesstring[]no(any)Keep only contractors in these cities.
nameContainsstring[]no(any)Keep only contractors whose business name contains one of these terms.
maxContractorsintegerno50Maximum contractor records to return across all searches.

Filters combine: a contractor must pass every filter you set.

Output reference

One dataset item per contractor. Detail fields are populated only when withDetails is on. Types: string, integer, boolean, string[], or null when the source value is absent.

FieldTypeDescription
businessNamestringBusiness name as listed in the search results.
licenseNumberstringCCB license number (unique).
statusstringLicense status, for example Active, Expired, Suspended.
addressstringStreet address from the listing.
citystringCity from the listing.
statestringTwo-letter state code.
zipstringPostal code.
searchQuerystringThe search term that surfaced this contractor.
detailBusinessNamestringLegal business name from the detail page.
detailAddressstringFull single-line address from the detail page.
expirationDatestringLicense expiration date (YYYY-MM-DD).
entityTypestringLegal entity type, for example Corporation, LLC, Sole Proprietor.
phonestringBusiness phone.
endorsementTypestringLicense endorsement(s), for example residential / commercial general contractor.
workersCompStatusstringWorkers' comp status, for example Nonexempt, Exempt.
leadPaintCertifiedbooleantrue if lead-paint (RRP) certified.
leadPaintExpirationstringLead-paint certification expiration (YYYY-MM-DD), or null.
wcInsuranceCarrierstringWorkers' comp insurance carrier.
wcInsurancePolicyNostringWorkers' comp policy number.
liabilityInsuranceCompanystringGeneral liability insurer.
liabilityInsuranceAmountintegerLiability coverage amount in USD.
liabilityInsuranceExpirationstringLiability policy expiration (YYYY-MM-DD).
resBondCompanystringResidential surety bond company.
resBondAmountintegerResidential bond amount in USD.
resBondExpirationstringResidential bond expiration, or text like Continuous until cancelled.
commBondCompanystringCommercial surety bond company.
commBondAmountintegerCommercial bond amount in USD.
commBondExpirationstringCommercial bond expiration, or text.
rmiOwnerstringResponsible Managing Individual (RMI) owner, or null.
officersstring[]Corporate officers / owners.
officerCountintegerNumber of officers.
assumedBusinessNamesstring[]Assumed / DBA names registered under this license.
sourcestringAlways Oregon Construction Contractors Board.
observedAtstringISO 8601 timestamp of when the record was collected.

Example output record

See the hero record at the top of this page. It is a real Active Oregon contractor (license 146973) pulled from a live run (input {"searchQueries":["Portland"],"withDetails":true,"maxContractors":50}); every value shown is real.

Run via API and CLI

Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.

Run synchronously and get dataset items in one call:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~oregon-ccb-contractors-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"searchQueries":["Bend"],"activeOnly":true,"endorsements":["Residential General Contractor"],"maxContractors":50}'

Look up one license number:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~oregon-ccb-contractors-scraper/runs?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"searchQueries":["146973"],"withDetails":true}'

Apify CLI:

apify call scrapers_lat/oregon-ccb-contractors-scraper \
--input '{"searchQueries":["Portland"],"maxContractors":50}'

Fetch results

Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:

# JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
# CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"
# Paginate large datasets
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"

<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.

Billing and limits

  • Pay per result. You are charged per contractor returned (result event). See the pricing tab for the current per-result price.
  • No charge on failure. If a run errors, the actor writes a single item with a populated error field and does not charge for it. Empty runs cost nothing.
  • Spend cap respected. Set maxTotalChargeUsd on the run; once reached, the actor stops emitting and charging further billable results.
  • Free Apify plans are capped at 10 contractors per run. Upgrade for higher maxContractors.

FAQ and troubleshooting

A run returned 0 records. Why? The search term matched no contractors, or the filters excluded everyone. Try a city, business name, or 8-digit license number, and loosen the status / endorsement / city filters. Zero-result runs are not charged.

Do I get bond and insurance details? Yes, when withDetails is on (the default). Each record carries the liability insurer and amount, workers' comp carrier and policy, and residential and commercial surety bond company and amount.

Why do some listing address fields look split? The CCB search results split some out-of-state addresses across columns. The detail fields (detailBusinessName, detailAddress) give the clean legal name and full address when withDetails is on.

How do I get only active contractors? Set activeOnly to true, or add Active to statuses.

Is this an official Oregon CCB tool? No. This actor is independent and has no affiliation with the Oregon Construction Contractors Board. It reads only data that is publicly available on the CCB license lookup.

More scrapers at scrapers.lat

Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.


Independent tool, not affiliated with the Oregon Construction Contractors Board. Accesses only publicly available CCB license data.