How-to
How to run Idaho Contractor License Lookup & List Scraper (DOPL)
Step-by-step: the exact input, what each field does, and the rows that come back from the source portal.
You sell to Idaho builders, or you check subcontractor registrations before anyone sets foot on a site, and you want the state’s own list rather than a directory site’s guess at it. The Idaho Division of Occupational and Professional Licenses (DOPL) gives it away at edopl.idaho.gov in two forms: a search that shows one record at a time, and a “Search for a Bulk List of Licenses” page that exports a whole licence type as an .ods spreadsheet. That bulk file is free and it is the real alternative to this actor. The cost is the handling: one click-through per licence type, an OpenDocument file to open, and a filter to apply yourself, because the General Contractor file holds 52,966 rows in every status and only 25,863 of them were active on 2026-10-14.
What you’ll need
Nothing but an Apify account. The actor talks to the source portal directly.
No API key, no CAPTCHA solve, no login. DOPL’s bulk list needs none of them, and the proxy input is
off by default because DOPL answered plain requests in testing. Switch a proxy on only if a run hands
you a free notice row marked blocked.
Step 1 — Open the actor
Open Idaho Contractor License Lookup & List Scraper (DOPL) on the Apify Store and press Try for free. The actor’s own page on this site lists its live health and pricing.
Step 2 — Fill in the input
| Field | Type | Required | What it does |
|---|---|---|---|
licenseType | string | no | Which DOPL licences: general_contractor (General Contractor Registration, the default), electrical_contractor, limited_electrical_contractor, plumbing_contractor,… |
licenseTypes | array | no | Several licence types or groups in ONE run, e.g. electrical_contractor and plumbing_contractor. Combined with ‘Licence type’ if you fill both. An unrecognised value is dropped… (default []) |
status | string | no | Active (default), or ‘all’ for every status. Lookups always search every status. (default Active) |
statuses | array | no | Several statuses in ONE export, e.g. Lapsed and Expired (a win-back list). When filled, it replaces ‘Licence status’ (so its Active default does not sneak in). (default []) |
county | string | no | An Idaho county on the licence’s mailing address (‘Ada’, ‘Kootenai County’). A value that is not one of Idaho’s 44 counties is dropped and logged. |
counties | array | no | Several Idaho counties in ONE export. (default []) |
city | string | no | Mailing-address city, exact match ignoring case and punctuation (‘Boise’, ‘Coeur d’Alene’). |
cities | array | no | Several cities in ONE export. (default []) |
idahoAddressesOnly | boolean | no | Out-of-state firms register in Idaho: 5,981 of the 25,863 active General Contractor Registrations (23%, 2026-10-14) have a mailing address outside Idaho, mostly Washington and… |
query | string | no | A DOPL licence number (‘RCE-52165’, ‘ELE-C-12345’, ‘065933’ — case, spaces and dashes are ignored), or at least 3 letters of a business, DBA or licensee name, matched anywhere… |
queries | array | no | Several lookups in ONE run, one per line. Combined with the field above if you fill both. The run log says how many licences each one matched. (default []) |
maxResults | integer | no | EXPORT: cap on licences for the WHOLE run — your spend control (25,863 active General Contractor Registrations on 2026-10-14; set 100000 to take everything that matches).… |
The field that decides which mode you are in is query. Leave it and queries empty and the run is
an export: the filters pick licences out of the whole state, and maxResults caps the entire run
(the Console prefills 500). Type a licence number such as RCE-52165 or three letters of a name and
the run becomes a lookup instead. The county and city filters then stop applying, every status is
searched, and maxResults becomes a cap per name, 50 by default.
The second field people get wrong is licenseType. Left empty, an export means General Contractor
Registrations only. The seven trade contractor types (electrical, limited electrical, plumbing,
plumbing specialty, HVAC, HVAC specialty, HVAC limited heating specialty) come only when you ask
for them by name or with the group trades, which held 5,183 active licences on 2026-10-14.
Journeymen and apprentices are never included. And if you want a mailing list of Idaho firms, tick
idahoAddressesOnly: 5,981 active registrations mail from another state, 2,008 of them from
Washington.
A working input:
{
"county": "Ada",
"city": "Boise",
"maxResults": 5000
}
That input returned 2,209 active Boise registrations on 2026-10-14, well under its 5,000 cap.
Step 3 — Run it
Press Start. Rows are pushed to the dataset as they’re found, so the run log fills in as it works.
Expect a pause before the first row. Each run downloads the whole licence type from DOPL and filters it afterwards, so even a small General Contractor export took about 35 seconds when we timed it from our workstation on 2026-10-14. A trade contractor type is a smaller file and takes a few seconds. The Boise input above comes back with 2,209 rows.
An empty result usually means the filter was too narrow, and the run says so in a free notice row
rather than handing you a blank dataset. city is an exact match on the mailing city (case and
punctuation ignored, so “Coeur dAlene” finds Coeur d’Alene), which means a neighbourhood or a
misspelt town matches nothing. A county outside Idaho’s 44, or a licence type the actor does not
know, is dropped with a line in the log. If none of the values you gave is recognised, the run
downloads nothing and returns a free notice instead of falling back to the whole state.
Step 4 — Read the output
Each run returns a labelled table, not raw JSON:
Every row looks like this — a real row from a real run:
{
"license_number": "RCE-54671",
"license_type": "General Contractor Registration",
"business_name": "SNAKE RIVER SPLICING LLC",
"dba_name": "SNAKE RIVER SPLICING LLC",
"status": "Active",
"issue_date": "2020-05-21",
"expiration_date": "2028-05-21",
"address": "4530 W IRVING ST",
"city": "BOISE",
"county": "ADA",
"address_state": "IDAHO",
"zip_code": "83706-2342",
"country": "USA",
"phone": "(208) 994-4748",
"email": "SNAKERIVERSPLICING@GMAIL.COM",
"person_name": null,
"has_discipline": false,
"trade": "general",
"matched_by": "export",
"state": "ID",
"source_url": "https://edopl.idaho.gov/onlineservices/_/"
}
| Field | Example value | Meaning |
|---|---|---|
license_number | RCE-54671 | DOPL licence or registration number, e.g. RCE-54671 |
license_type | General Contractor Registration | General Contractor Registration, Electrical Contractor License, … |
business_name | SNAKE RIVER SPLICING LLC | Registered business (a sole proprietor’s own name when there is none) |
dba_name | SNAKE RIVER SPLICING LLC | Doing-business-as name, when filed |
status | Active | Active, Lapsed, Expired, Canceled, Inactive, Revoked, … |
issue_date | 2020-05-21 | Original issue date (YYYY-MM-DD) |
expiration_date | 2028-05-21 | Expiry date (YYYY-MM-DD) |
address | 4530 W IRVING ST | Mailing street address, with street 2 and unit |
The column most people came for is the mailing address. On 2026-10-14 it was filled on 25,859 of
the 25,863 active registrations, with county on 24,358 and a dba_name on 19,611. The sample row
above is the exception, not the rule: most rows have no phone and no email. DOPL had a phone for
10.9% of active registrations and an email for 10.6%, so plan on postcards rather than cold calls.
Three things to watch. The address is where DOPL sends mail, not where the firm works, which is why
1,505 active registrations have no county and 5,981 sit in another state. Trade contractor licences
carry an address less often: 99% of Electrical Contractors, but 61% of Plumbing Contractors and 59%
of HVAC Contractors. And issue_date is the original issue date in ISO form, so sorting on it finds
new firms: 3,596 active registrations were first issued in 2026.
Step 5 — Export it
Open the Dataset tab and export to CSV, JSON, or Excel — or pull the same rows from the API, which is what you want if this is going to run on a schedule.
What it costs
$0.004 per licence returned, and nothing for the notice rows that explain an outage, an unrecognised
filter, a lookup with no match or a reached budget. The Console’s prefilled export of 500 licences
costs $2.00. The Boise input above, 2,209 rows, costs $8.84. Every active General Contractor
Registration in the state, 25,863 rows at maxResults 100000, costs $103.45. Apify platform usage
is billed separately on your plan.
If you need the statewide list once and you are comfortable with a spreadsheet, DOPL’s own .ods download is free and holds the same rows. The actor earns its price when the list has to be filtered, repeated or fed to something else.
Where the data comes from
This reads the source portal directly. Every night a canary runs this actor against that live source and diffs the result against a frozen fixture — what “verified” means.
The source is DOPL’s public bulk list at edopl.idaho.gov, which DOPL publishes under the Idaho Public Records Law and says it updates on weekday mornings and evenings. Behind the page sits a JavaScript app that tracks a version token across requests. A request that does not echo the previous token back gets HTTP 422, which reads like a block and is not one. The download itself is an OpenDocument spreadsheet, not CSV or Excel, and picking a trade board instead of one licence type pulls in journeymen and apprentices: the Electrical board exports 47,289 rows, of which 3,327 are Electrical Contractor Licenses.
See it used
Export Ada County, Idaho Registered General Contractors turns one county into a mailing list of 4,676 active firms. Download Every Active Idaho Contractor Registration Statewide takes the whole state at once, with the out-of-state firms dropped.
If the contractor you are checking works across the border, reach for Washington Contractor License Lookup & Verify (L&I): 2,008 of Idaho’s active registrations have a Washington mailing address, and their Washington licence lives in a different registry.
Last updated 2026-10-14