Oregon Contractor License Lookup Scraper
Pricing
Pay per event
Oregon Contractor License Lookup Scraper
🔎 Search public Oregon CCB contractor records and export license numbers, business names, statuses, and addresses for verification, compliance, or leads.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Search the Oregon Construction Contractors Board (CCB) public license register and export structured contractor records in minutes.
Use this Actor to verify license status, discover Oregon contractors, monitor compliance lists, or enrich a CRM with official public CCB identifiers.
The scraper handles the CCB form session and pagination automatically. No Oregon account, GitHub token, or private credential is required.
What does Oregon Contractor License Lookup Scraper do?
The Actor searches Oregon's public contractor license lookup using one or more terms.
It returns:
- CCB license number
- registered business name
- public license status
- public mailing address
- search term and result page
- source URL and extraction timestamp
Search by a company name, license number, trade keyword, city, ZIP code, or address fragment supported by the public search.
Who is it for?
Contractor lead generation teams
Build targeted contractor lists for insurance, equipment, financing, software, and professional services outreach.
Compliance and procurement teams
Check whether vendors appear in the Oregon CCB register and retain timestamped verification evidence.
Property managers and homeowners
Look up contractors before procurement or renovation work.
Researchers and public-interest teams
Study contractor market coverage and license-status patterns using exportable records.
Developers and data teams
Feed official public contractor data into internal databases, dashboards, alerts, or enrichment pipelines.
Why use this Actor?
Oregon CCB publishes active licenses through the state's official Open Data API and all-status searches through a stateful ASP.NET flow. This Actor selects the appropriate official route automatically.
This Actor:
- queries the official Open Data API for active-license searches
- preserves the anonymous website session for all-status searches
- submits required hidden form fields when using the website
- follows result redirects
- navigates API or website result pages
- normalizes table values
- applies an exact output limit
- charges only for records saved
You receive clean JSON, CSV, Excel, XML, RSS, or Parquet through Apify Dataset exports.
What data can I extract?
| Field | Type | Description |
|---|---|---|
licenseNumber | string | Oregon CCB license identifier |
businessName | string | Public registered contractor name |
licenseStatus | string | Status shown by Oregon CCB |
address | string | Public address shown in search results |
searchTerm | string | Input that produced the record |
resultPage | number | Result page where it appeared |
sourceUrl | URL | Oregon CCB public result source |
scrapedAt | datetime | UTC extraction timestamp |
Optional or unavailable values are not invented.
How to scrape Oregon contractor licenses
- Open the Actor input page.
- Enter one or more search terms.
- Choose whether to request active licenses only.
- Set the maximum number of records.
- Click Start.
- Preview the dataset.
- Export it in your preferred format.
Start with a precise company name or license number when verifying one contractor.
Use broader terms such as a trade or city when building a prospect list.
Input
{"searchTerms": ["construction", "plumbing"],"activeOnly": true,"maxItems": 100,"maxPagesPerSearch": 25}
searchTerms
A list of business names, CCB numbers, trade terms, cities, ZIP codes, or address fragments.
Duplicate and blank terms are removed.
activeOnly
Set to true to request active records from the source. Set to false to include all statuses returned by CCB.
maxItems
Maximum records saved across all search terms. Allowed range: 1 to 10,000.
maxPagesPerSearch
A safety limit for broad terms. Oregon CCB normally displays about 20 records per page.
Output example
{"licenseNumber": "257762","businessName": "MT HOOD CONSTRUCTION & HANDYMAN SERVICES","licenseStatus": "Active","address": "PO BOX 534 BRIGHTWOOD OR 97011","searchTerm": "construction","resultPage": 1,"sourceUrl": "https://search.ccb.state.or.us/search/list_results.aspx","scrapedAt": "2026-07-12T04:30:00.000Z"}
Records from overlapping searches can describe the same license. Deduplicate downstream by licenseNumber when combining broad searches.
How much does it cost to look up Oregon contractor licenses?
The Actor uses pay-per-event pricing:
- a small charge when the run starts
- a per-item charge for each dataset record saved
Apify plan tiers receive volume-adjusted item prices. The Console shows the exact run estimate before execution.
HTTP-only extraction keeps compute use low. Set a conservative maxItems during evaluation.
Search strategies
Verify one contractor
Search an exact CCB number and set maxItems to 5.
Build a trade list
Search terms such as roofing, plumbing, or excavation and request active records.
Build a local list
Search a city or ZIP fragment, then filter and deduplicate the exported dataset.
Monitor status
Schedule exact license-number searches and compare licenseStatus between datasets.
Tips for accurate results
- Use exact CCB numbers for verification.
- Try legal and trading business names separately.
- Keep multiple terms in one run for efficient batching.
- Deduplicate overlapping broad queries by
licenseNumber. - Store
scrapedAtwhen creating audit evidence. - Confirm critical decisions on the official source page.
Scheduling and monitoring
Apify schedules can run this Actor hourly, daily, weekly, or monthly.
A monitoring workflow can:
- search a fixed list of license numbers
- save a dated dataset
- compare status with the prior run
- send changed rows to a webhook
- notify procurement or compliance staff
Use Apify webhooks with Slack, email automation, or your own API endpoint.
Integrations
Use licenseNumber as the stable key in these end-to-end workflows:
- Dataset → Google Sheets compliance queue: schedule a daily active-license search, export the dataset to a Sheet, and let reviewers add approval and follow-up columns without re-keying contractor details.
- Scheduled run → webhook status alert: search a fixed list of CCB numbers, compare each run with the previous dataset, and send changed or missing licenses through an Apify webhook to Slack, Zapier, Make, or an incident endpoint.
- Dataset → CRM lead pipeline: sync active rows to Airtable, HubSpot, or Salesforce by
licenseNumber, then route newly found contractors to territory owners while preserving the Oregon CCB source link.
For warehouse analysis, load dated datasets into Snowflake, BigQuery, or PostgreSQL and track status changes over time.
API usage with JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/oregon-contractor-license-lookup-scraper').call({searchTerms: ['roofing'],activeOnly: true,maxItems: 100,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
API usage with Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_APIFY_TOKEN')run = client.actor('automation-lab/oregon-contractor-license-lookup-scraper').call(run_input={'searchTerms': ['257762'],'activeOnly': False,'maxItems': 5,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
API usage with cURL
curl -X POST \'https://api.apify.com/v2/acts/automation-lab~oregon-contractor-license-lookup-scraper/runs?token=YOUR_APIFY_TOKEN' \-H 'Content-Type: application/json' \-d '{"searchTerms":["construction"],"activeOnly":true,"maxItems":100}'
Fetch run results from the dataset endpoint returned by the run API.
Use with Apify MCP
The scoped MCP endpoint is:
https://mcp.apify.com/?tools=automation-lab/oregon-contractor-license-lookup-scraper
Add it to Claude Code:
claude mcp add --transport http apify-oregon-ccb \'https://mcp.apify.com/?tools=automation-lab/oregon-contractor-license-lookup-scraper'
For Claude Desktop, Cursor, or VS Code, add this HTTP server to the client's MCP JSON configuration (set APIFY_TOKEN in the client environment or complete the prompted Apify authentication):
{"mcpServers": {"apify-oregon-ccb": {"type": "http","url": "https://mcp.apify.com/?tools=automation-lab/oregon-contractor-license-lookup-scraper"}}}
Example prompts to ask Claude through MCP:
- “Find 50 active Oregon roofing contractors and group them by city.”
- “Check Oregon CCB license 257762 and summarize the record with its source URL.”
- “Export active contractors matching plumbing to CSV and flag duplicate license numbers.”
Reliability
The scraper uses official public HTTP sources rather than a browser.
Active-only searches use Oregon's Open Data API, avoiding dependence on the slower interactive search form. All-status searches validate the website response, preserve cookies, submit ASP.NET hidden fields, follow the result redirect, and post pagination events.
If a broad term has no rows, the Actor moves to the next term without failing the whole run.
Limitations
- Data is limited to what Oregon CCB publicly displays.
- Source labels and page structure may change.
- Search is controlled by the state website's matching behavior.
- Broad terms can return thousands of records.
- One contractor may match several input terms.
- Result rows do not represent private complaint or payment data.
- Temporary state-site maintenance can interrupt a run.
Use maxPagesPerSearch to bound unusually broad queries.
Troubleshooting
Why did my search return zero records?
Check spelling, try part of the legal business name, remove punctuation, or search the CCB number.
Why do I see duplicate licenses?
Overlapping search terms can return the same contractor. Deduplicate by licenseNumber.
Why did the run stop before all source results?
Increase maxItems or maxPagesPerSearch. Either limit may intentionally stop pagination.
Why did a normally working run fail?
The Oregon state site may be under maintenance. Review the Actor log and retry later.
Data freshness
Each run queries the live public Oregon CCB search application.
scrapedAt records when the row was extracted, not when the agency last updated the underlying license.
For recurring compliance checks, schedule fresh runs rather than relying on an old export.
Responsible use and legality
This Actor accesses public government license records without bypassing authentication.
Users are responsible for complying with applicable laws, source terms, marketing rules, privacy requirements, and internal policies.
Do not treat automated output as legal advice. Confirm high-impact licensing or procurement decisions with Oregon CCB.
Related scrapers
Explore other Automation Labs actors for complementary public-business workflows:
- Washington Contractor License Lookup Scraper
- Florida DBPR License Verification
- Michigan Professional License Lookup
Combine state-specific exports using stable license and source fields.
FAQ
Does the Actor require an Oregon account?
No. It uses the public CCB search surface.
Can I search inactive licenses?
Yes. Set activeOnly to false to request all source statuses.
Can I search multiple businesses at once?
Yes. Add multiple values to searchTerms; the global maxItems applies across them.
Can I export to Excel or CSV?
Yes. Use the Dataset export controls or API.
Does this replace official verification?
No. It automates collection of public records. Confirm critical decisions with the official agency.
Can I run it on a schedule?
Yes. Use Apify schedules and webhooks to build recurring monitoring workflows.
Support
For reproducible support, include:
- the run URL
- non-sensitive input
- the search term involved
- the relevant log excerpt
- expected and actual result counts
Do not include private credentials or unrelated personal data.