Oregon CCB Contractor License Scraper | Leads, Bond & Insurance
Pricing
from $17.00 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
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
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
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
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
searchQueries | string[] | 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. |
withDetails | boolean | no | true | Enrich each contractor with phone, RMI owner/officers, endorsement, expiration, entity type, insurance and bonds. Off returns listing-only rows. |
activeOnly | boolean | no | false | Limit results to currently Active licenses. |
statuses | string[] | no | (any) | Keep only contractors whose status contains one of these, for example Active, Expired, Suspended. |
endorsements | string[] | no | (any) | Keep only contractors whose endorsement contains one of these, for example Residential General Contractor, Commercial. |
filterCities | string[] | no | (any) | Keep only contractors in these cities. |
nameContains | string[] | no | (any) | Keep only contractors whose business name contains one of these terms. |
maxContractors | integer | no | 50 | Maximum 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.
| Field | Type | Description |
|---|---|---|
businessName | string | Business name as listed in the search results. |
licenseNumber | string | CCB license number (unique). |
status | string | License status, for example Active, Expired, Suspended. |
address | string | Street address from the listing. |
city | string | City from the listing. |
state | string | Two-letter state code. |
zip | string | Postal code. |
searchQuery | string | The search term that surfaced this contractor. |
detailBusinessName | string | Legal business name from the detail page. |
detailAddress | string | Full single-line address from the detail page. |
expirationDate | string | License expiration date (YYYY-MM-DD). |
entityType | string | Legal entity type, for example Corporation, LLC, Sole Proprietor. |
phone | string | Business phone. |
endorsementType | string | License endorsement(s), for example residential / commercial general contractor. |
workersCompStatus | string | Workers' comp status, for example Nonexempt, Exempt. |
leadPaintCertified | boolean | true if lead-paint (RRP) certified. |
leadPaintExpiration | string | Lead-paint certification expiration (YYYY-MM-DD), or null. |
wcInsuranceCarrier | string | Workers' comp insurance carrier. |
wcInsurancePolicyNo | string | Workers' comp policy number. |
liabilityInsuranceCompany | string | General liability insurer. |
liabilityInsuranceAmount | integer | Liability coverage amount in USD. |
liabilityInsuranceExpiration | string | Liability policy expiration (YYYY-MM-DD). |
resBondCompany | string | Residential surety bond company. |
resBondAmount | integer | Residential bond amount in USD. |
resBondExpiration | string | Residential bond expiration, or text like Continuous until cancelled. |
commBondCompany | string | Commercial surety bond company. |
commBondAmount | integer | Commercial bond amount in USD. |
commBondExpiration | string | Commercial bond expiration, or text. |
rmiOwner | string | Responsible Managing Individual (RMI) owner, or null. |
officers | string[] | Corporate officers / owners. |
officerCount | integer | Number of officers. |
assumedBusinessNames | string[] | Assumed / DBA names registered under this license. |
source | string | Always Oregon Construction Contractors Board. |
observedAt | string | ISO 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:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "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 (
resultevent). 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
errorfield and does not charge for it. Empty runs cost nothing. - Spend cap respected. Set
maxTotalChargeUsdon 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.
Related scrapers
- California CSLB Contractor Scraper: California licensed contractors.
- Alabama LBGC Contractors Scraper: Alabama general contractors.
- Arizona ADRE Real Estate Scraper: Arizona real estate licensees.
- Chicago Building Permits Scraper: Chicago building permits and contractors.
- Google Maps Business Leads Scraper: business contact leads from Google Maps.
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.
