Oregon CCB Contractor License Scraper — Leads & Lookup
Pricing
from $1.60 / 1,000 ccb contractor license records
Oregon CCB Contractor License Scraper — Leads & Lookup
Export active Oregon CCB contractor licenses by type, city, county or ZIP: license number, phone, address, bond and insurance details. USD 2 per 1,000 records.
Pricing
from $1.60 / 1,000 ccb contractor license records
Rating
0.0
(0)
Developer
Muhammad Afzal
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
16 days ago
Last modified
Categories
Features
Share
Oregon CCB Contractor License Scraper exports active Oregon Construction Contractors Board (CCB) licenses from the State of Oregon's official open dataset: license number and type, holder name, endorsement, mailing address, county, phone, responsible managing individual, workers' compensation exemption, and bond and insurance details. It is built for contractor prospecting, supplier and insurance sales, and license research, and it costs USD 2.00 per 1,000 records on the FREE tier (USD 1.60 per 1,000 on GOLD).
What data does the Oregon CCB scraper return?
Each dataset row is one active license record:
| Field | What it contains |
|---|---|
licenseNumber | CCB license number |
licenseTypeCode, licenseType | Code and name, for example RGC / Residential General Contractor |
licenseHolderName | Legal name of the holder, a business or an individual |
endorsement | Official endorsement description |
relatedLicenseNumber, relatedLicenseType | Linked license, when the source lists one |
licenseStatus | Always ACTIVE, because the source is CCB's active-license dataset |
licenseExpirationDate, originalRegistrationDate | Dates as published, for example 12/09/2026 |
address, city, state, zipCode, county | Public mailing address and CCB county |
phoneNumber, faxNumber | Work phone and fax as published, digits only |
responsibleManagingIndividual | The person CCB lists as responsible managing individual |
workersCompensationExempt | Source text, for example Exempt or Nonexempt |
bondCompany, bondAmount, bondExpirationDate | Surety bond details |
insuranceCompany, insuranceAmount, insuranceExpirationDate | Liability insurance details |
recordKey, sourceDatasetId, sourceUpdatedAt, sourceUrl, scrapedAt | Deduplication key, source dataset, its last update time and collection time |
Missing values are null. The run summary is saved as SUMMARY: outcome (DATA, EMPTY, LIMITED, BLOCKED, REJECTED or FAILED), records scanned and delivered, charged events, the source update time and warnings.
How do I get a list of licensed Oregon contractors by type, city, county or ZIP?
Set any combination of filters and a Maximum results value. All filters are combined; leave them empty to export the whole active-license dataset.
| Input | Example | How it matches |
|---|---|---|
licenseTypes | ["RGC", "CGC1"] | One or more CCB license type codes (list below) |
name | construction | Partial match in the holder's legal name |
licenseNumber | 100369 | Exact license number |
city | PORTLAND | Exact mailing city, any capitalization |
county | Multnomah | Exact CCB county |
state | WA | Two-letter mailing state |
zipCodePrefix | 972 | First 3 to 5 digits of the ZIP code |
endorsementKeyword | paint | Partial match in the endorsement description |
workersCompensationExempt | EXEMPT | EXEMPT or NOT_EXEMPT |
maxResults | 1000 | 1 to 60,000 (default 100) |
License type codes: CD Commercial Developer, CF Construction Flagging Contractor, CGC1 and CGC2 Commercial General Contractor Level 1 and 2, CSC1 and CSC2 Commercial Specialty Contractor Level 1 and 2, LBPR Lead Based Paint Renovation Contractor, OCHI Oregon Certified Home Inspector, OCLS Oregon Certified Locksmith, RD Residential Developer, RGC Residential General Contractor, RHEPSC Home Energy Performance Score Contractor, RHISC Home Inspector Services Contractor, RHSC Home Services Contractor, RLC Residential Limited Contractor, RLSC Residential Locksmith Services Contractor, RRC Residential Restoration Contractor, RSC Residential Specialty Contractor.
Residential general contractors with a Portland mailing address:
{"licenseTypes": ["RGC"],"city": "PORTLAND","maxResults": 25}
Contractors in the 972 ZIP area with a paint endorsement:
{"zipCodePrefix": "972","endorsementKeyword": "paint","maxResults": 250}
Can I look up a single CCB license number?
Yes. Set licenseNumber to the number and maxResults to 1 or a few (a holder can have more than one license record). The result shows license type, expiration date, bond and insurance as of the dataset's last update, given in sourceUpdatedAt.
Does it include emails, websites or complaint history?
No. The CCB dataset does not publish email addresses, websites or complaint histories, and the Actor does not add or guess them. For complaint history, check the CCB search website.
When should I use it, and when not?
Use it when you need a bulk list of active Oregon contractors, for example every residential specialty contractor in a county with phone, bond and insurance details, or a nightly export to keep a CRM current.
Use another Actor when:
- Your market is Washington: Washington Contractor Directory & Leads Scraper. For Texas use TDLR License Scraper; for California use California CSLB Scraper.
- You need Oregon business entity registrations rather than contractor licenses: Multi-State Corporate & Business Entity Registry.
- You need emails and websites: Contractor Leads Scraper returns contractor leads with emails.
- You need expired or inactive licenses: the source lists active licenses only.
How do I run it from code?
JavaScript with apify-client:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('muhammadafzal/oregon-ccb-contractor-directory-leads-scraper').call({licenseTypes: ['RGC'],county: 'Multnomah',maxResults: 1000,});const { items } = await client.dataset(run.defaultDatasetId).listItems();for (const item of items) console.log(item.licenseNumber, item.licenseHolderName, item.phoneNumber);
Python with apify-client:
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("muhammadafzal/oregon-ccb-contractor-directory-leads-scraper").call(run_input={"zipCodePrefix": "974","endorsementKeyword": "residential","maxResults": 500,})for item in client.dataset(run.default_dataset_id).iterate_items():print(item["licenseNumber"], item["licenseType"], item.get("insuranceExpirationDate"))
Use it from an AI assistant
Oregon CCB Contractor License Scraper works from Claude, ChatGPT, Cursor or any MCP client through Apify's MCP server. Add the single-tool URL https://mcp.apify.com/?tools=muhammadafzal/oregon-ccb-contractor-directory-leads-scraper to your client and ask, for example: "List 100 active residential general contractors in Multnomah County, Oregon with phone numbers and insurance expiration dates." Each record is charged at the prices below, so include a result limit in your request.
What does the output look like?
Two records from a cloud run on 2026-10-26 (shortened; the responsible managing individual is omitted here):
[{"recordKey": "100369|RSC|surface masters inc","licenseNumber": "100369","licenseTypeCode": "RSC","licenseType": "Residential Specialty Contractor","licenseHolderName": "SURFACE MASTERS INC","endorsement": "Residential Specialty Contractor","licenseStatus": "ACTIVE","licenseExpirationDate": "12/09/2026","originalRegistrationDate": "12/09/1994","address": "PO BOX 80515","city": "PORTLAND","state": "OR","zipCode": "97208","county": "Multnomah","phoneNumber": "5032821169","workersCompensationExempt": "Nonexempt","bondCompany": "CBIC","bondAmount": "20000","insuranceCompany": "OHIO SECURITY INSURANCE COMPANY","insuranceAmount": "1000000","insuranceExpirationDate": "05/28/2027","sourceUpdatedAt": "2026-10-25T17:07:01.000Z","sourceUrl": "https://data.oregon.gov/d/g77e-6bhs"},{"recordKey": "100362|RGC|gary epping construction co inc","licenseNumber": "100362","licenseTypeCode": "RGC","licenseHolderName": "GARY EPPING CONSTRUCTION CO INC","licenseExpirationDate": "06/23/2027","city": "WILSONVILLE","county": "Clackamas","workersCompensationExempt": "Exempt","bondAmount": "25000","insuranceAmount": "1000000"}]
How much does the Oregon CCB contractor list cost?
The Actor uses pay-per-event pricing, and platform usage is included in the event prices. Each record saved to the default dataset is charged automatically, so there is no double charging.
| Event | FREE | BRONZE | SILVER | GOLD | PLATINUM / DIAMOND |
|---|---|---|---|---|---|
| CCB contractor license record (one dataset row) | USD 0.002 | USD 0.00195 | USD 0.0019 | USD 0.0016 | USD 0.0016 |
| Actor start (per started GB of allocated memory) | USD 0.005 | USD 0.005 | USD 0.005 | USD 0.005 | USD 0.005 |
Worked totals on the FREE tier at the default 256 MB memory (one start event):
- 25 records: 25 × USD 0.002 + USD 0.005 = USD 0.055
- 1,000 records: 1,000 × USD 0.002 + USD 0.005 = USD 2.005
A search with no matches charges only the start event. If you set a maximum cost per run, the Actor checks the remaining budget before each write and stops before saving a record it cannot charge.
Limits and reliability
- Speed: 100 records took about 3 seconds in a cloud run on 2026-10-26; the Actor reads up to 1,000 rows per request.
- Scale: up to 60,000 records per run, in stable license-number order, with duplicates removed.
- Freshness: every record carries
sourceUpdatedAt, the dataset's last update time (2026-10-25 in the latest run). - Errors: rate limits are retried with backoff; an access denial ends the run as
BLOCKEDwithout bypass attempts, and records already saved are kept.
FAQ
Is there a free Oregon CCB license lookup?
CCB's own search website is free for single lookups. This Actor charges USD 0.002 per record on the FREE tier for bulk exports.
Does it include inactive or expired licenses?
No. The source is CCB's active-license dataset, so every record has licenseStatus: "ACTIVE".
Why does one contractor appear more than once?
A holder can have several active license records, for example two license types. Each unique combination of license number, type and holder name is one record.
Can I get every active contractor in Oregon?
Yes. Leave the filters empty and set maxResults up to 60,000.
What does the workers' compensation filter mean?
It filters the source's exemption text: EXEMPT keeps records marked Exempt, and NOT_EXEMPT keeps all others. The field is not a workforce-size measure.
Are phone numbers formatted?
They are returned as published by the State, usually 10 digits without punctuation.
Related Actors
- TDLR License Scraper: Texas license records for electricians, A/C contractors and other trades
- Washington Contractor Directory & Leads Scraper: Washington L&I contractor registrations
- Sunbiz Scraper and New York Business Entity Search Scraper: company registry records
- KRS Financial Statements Scraper: Polish company filings
Legal and compliance
The Actor reads the State of Oregon's public CCB Active Licenses dataset (data.oregon.gov, dataset g77e-6bhs). It does not log in or bypass access controls. Holder names, responsible managing individuals and phone numbers can be personal data: use them lawfully and follow CAN-SPAM, TCPA, Do Not Call and anti-spam rules for outreach. Verify licenses and complaint history with CCB before hiring or compliance decisions. This tool is not affiliated with the Oregon CCB, and this is not legal advice.
Last verified: 2026-10-26