How-to
How to run Nebraska Contractor Registration Lookup & Leads Scraper (NDOL)
Step-by-step: the exact input, what each field does, and the rows that come back from the Nebraska Department of Labor's contractor registration search.
Every contractor and subcontractor working in Nebraska has to register with the Nebraska Department of Labor (NDOL), so its registry is the closest thing the state has to a full list of who is doing construction work there. You might want it as a lead list for one county and one trade, or to check that a sub’s registration has not lapsed. NDOL’s public search answers both, 25 firms to a page and with no export button: the 20,301 registrations we pulled on 2026-10-07 would be 813 pages by hand. The phone number is not on those pages at all; it sits on each firm’s own details page, one click per contractor. This actor runs the same search, reads every page, and can fetch the details pages for you.
What you’ll need
Nothing but an Apify account. The actor talks to NDOL directly.
No API key, no proxy and no CAPTCHA. NDOL’s search answers plain requests and the proxy setting ships switched off. The only charge is $0.004 per registration returned, plus Apify’s own platform usage. The optional phone lookup costs nothing extra, only time.
Step 1: Open the actor
Open Nebraska Contractor Registration Lookup & Leads Scraper (NDOL) 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 |
|---|---|---|---|
service | string | no | One of NDOL’s 58 service categories (NAICS-based), by name or number: e.g. ‘Roofing Contractors’ or 19, ‘electrical’ (22), ‘plumbing’ (23, plumbing, heating and… |
services | array | no | Several service categories in ONE run, e.g. 19 and 22. Combined with ‘Service’ if you fill both. (default []) |
county | string | no | Nebraska county as NDOL records it for the registration, e.g. ‘Douglas’ or ‘Lancaster County’. Matches Nebraska firms only. NDOL’s county is the firm’s own record and does not… |
counties | array | no | Several Nebraska counties in ONE run. Combined with ‘County’ if you fill both. (default []) |
city | string | no | Mailing-address city, exact match ignoring case and punctuation, e.g. ‘Lincoln’ (does not also match ‘Lincolnville’). |
cities | array | no | Several cities in ONE run. Combined with ‘City’ if you fill both. (default []) |
zip | string | no | Mailing-address ZIP, 5 digits (a ZIP+4 is accepted and matched on its first 5). |
zips | array | no | Several ZIPs in ONE run. Combined with ‘ZIP code’ if you fill both. (default []) |
state | string | no | 2-letter state of the firm’s mailing address, e.g. ‘IA’ for Iowa firms registered to work in Nebraska, or ‘NE’. Leave empty for every state. Ignored when a county is given (a… |
states | array | no | Several 2-letter states in ONE run. Combined with ‘Mailing-address state’ if you fill both. (default []) |
name | string | no | Text the firm’s name contains (case-insensitive), e.g. ‘ROOFING’ or ‘SMITH’. Both NDOL name indexes are searched (the listed DBA name and the corporation name), and… |
names | array | no | Several name fragments in ONE run; a firm matching any of them is returned once. The run log says how many registrations each search returned. (default []) |
registrationNumber | string | no | Look up one registration by its full number, e.g. ‘33053-26’ (the dash is optional). |
registrationNumbers | array | no | Several full registration numbers in ONE run. (default []) |
maxResults | integer | no | Cap on registrations returned for the whole run (a spend control). The full statewide registry is about 20,300 firms, so 100000 returns everything that matches. With several… (default 500) |
includePhone | boolean | no | Off by default. NDOL publishes phone, email, corporation name, entity type, employee count and workers’ comp status only on each firm’s own page, so this fetches one extra page… |
Two fields decide most runs. includePhone is off by default because it fetches one extra page per row: switch it on if you plan to call anyone, and expect the run to take longer (Step 3 has the numbers). county is NDOL’s own county field for the registration, not something derived from the address, and it only ever matches Nebraska firms. That matters because NDOL’s list never shows the county, so the county column on a row is filled only when you searched by county, with the county you searched.
maxResults is one cap for the whole run, and the default of 500 is a spend control. With no filters at all the actor exports the state, so set it to 100000 deliberately when that is what you want, and leave a filter in when it is not.
A working input:
{
"service": "Roofing Contractors",
"county": "Douglas",
"maxResults": 500
}
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.
That input returned 252 registered roofing contractors in Douglas County when we ran it locally on 2026-10-07. With includePhone on it took 21.1 seconds, of which 18 went on fetching the 252 details pages; the log line reads “Phone enrichment: 252 of 252 rows enriched in 18s (252 with a phone)”. The statewide export with phone off, maxResults at 100000 and no filters, returned 20,301 registrations in 163.5 seconds. Enriching all of those at the same rate of about 14 pages a second would add roughly 24 minutes, so for a statewide pull it is usually better to export first and enrich only the county or trade you will actually call. Rows are never held back for the phone lookup: if the run’s time budget runs out, the remaining rows arrive anyway, without the details-page fields.
An empty or one-row run usually means a filter was not recognised. A county or service the actor does not know is dropped with a log line, and if nothing you gave is recognised you get one free row saying so instead of 20,301 billed ones.
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:
{
"registration_number": "33053-26",
"business_name": "Allset Kitchens and Baths",
"corporation_name": "Allset Kitchens and Baths",
"status": "Registered",
"expiration_date": "2027-07-01",
"sales_tax_option": "2",
"address": "1501 Schropp Circle",
"city": "Ashland",
"address_state": "NE",
"zip_code": "68003",
"county": null,
"service": null,
"matched_by": null,
"phone": "(402) 598-7147",
"email": null,
"business_entity": "Corporation",
"employees": 0,
"workers_comp_status": "Exempt",
"state": "NE",
"source_url": "https://dol.nebraska.gov/conreg/Contractor/Details/3305326"
}
| Field | Example value | Meaning |
|---|---|---|
registration_number | 33053-26 | NDOL registration number, e.g. 33053-26, one row per registration |
business_name | Allset Kitchens and Baths | The name NDOL lists for the contractor (usually the DBA) |
status | Registered | Always ‘Registered’: NDOL’s search lists only current registrations |
expiration_date | 2027-07-01 | Registration expiry date |
sales_tax_option | 2 | Nebraska contractor sales-tax option elected (1, 2 or 3) |
address | 1501 Schropp Circle | Mailing street address |
city | Ashland | Mailing city |
address_state | NE | Mailing state (out-of-state firms included) |
Most people come for the phone number, and with enrichment on it was there on all 252 Douglas County roofers. Email is much thinner: 26 of the 252 had one on file. The enriched rows also carry workers_comp_status, which read Exempt on 195 of them, and employees, which was above zero on only 53, so a lot of these registrations are owner-operators.
This is a registration, not a licence. NDOL does not test anyone, so the data says nothing about trade qualifications, and Nebraska’s electrical and plumbing licences come from other bodies. Every status is Registered because the public search lists only current registrations; in the statewide pull every expiry date fell between 2026-10-08 and 2027-12-31. Addresses are as each firm typed them: the Douglas run has OMAHA, Omaha and omaha as three spellings of one city, and 7 of its 252 addresses are PO boxes. And 4,391 of the 20,301 statewide registrations have a mailing address outside Nebraska, 970 of them in Iowa; filter state to NE if you only want local firms.
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 registration returned, plus Apify’s own platform usage. The Douglas County roofing run is 252 rows, so $1.01, with the phone lookup included at no extra charge. The full statewide export of 20,301 registrations comes to $81.20. Rows explaining an outage, an unrecognised filter, a time-budget cut or an empty result are free.
Where the data comes from
This reads NDOL’s contractor-registration search directly: one POST opens a session, then the actor pages through the results on that session at up to 5,000 rows a page, and the phone sits on each firm’s details page. Every night a canary runs this actor against that live source and checks that a Douglas County roofing search still returns at least 150 registrations with a number, expiry, address, city, ZIP, county and service: what “verified” means.
If you need one firm, use NDOL’s own search at dol.nebraska.gov/conreg; it is free and it is the authority. What makes the bulk job awkward is that the search page ignores its own page-number field, so paging only works on the session the first search created, and the site has two name boxes (DBA name and corporation name) that match different firms. Its city box also matches partial names and ignores the state, so the actor re-checks city and ZIP exactly and searches both name indexes, saying which one hit in matched_by.
See it used
List Douglas County, Nebraska Roofing Contractors builds an Omaha-area call list for a roofing supplier: 252 registered roofers, every one with a phone.
For a state where the trade licence itself is the record, with status and city, Delaware Contractor License Lookup & List Scraper exports both of Delaware’s contractor rosters. If you want the same contractor checked across several states at once, use Multi-State Contractor & Trade License Lookup.
Last updated 2026-10-07