North Dakota Contractor License Lookup & Leads Scraper (ND SOS)
Pricing
$0.004 / contractor licence
North Dakota Contractor License Lookup & Leads Scraper (ND SOS)
Every active North Dakota contractor licence from the Secretary of State: class, renewal and insurance dates, standing, phone and mailing address. Filter by city or class, or check a licence.
Pricing
$0.004 / contractor licence
Rating
0.0
(0)
Developer
ScrapeBench
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
5 hours ago
Last modified
Categories
Share
Pain points
- The Secretary of State's FirstStop contractor search returns at most 100 results per query and has no export button, so a statewide list means hundreds of searches copied by hand. The only bulk route is a Data List Request, which needs a North Dakota Login account (checked 2026-10-29).
- The results list shows only a name, class and status; the phone, mailing address, renewal date and insurance expiry sit behind a separate detail view, one contractor at a time.
- Standing with Workforce Safety & Insurance, Job Service and the Secretary of State is shown only in that detail view, so screening vendors for good standing means opening every record.
What we solve
- Returns every active contractor licence in North Dakota in one run: 10,458 licences read on October 28–29, 2026, filterable by city and licence class.
- Each row carries the detail view's fields: business phone (99.98% of licences), mailing address, renewal date, liability-insurance expiry and four standing flags.
- Checks one licence number or company name, or a batch of them, and returns its class, standing, renewal and insurance dates.
Summary
Active contractor licences from the North Dakota Secretary of State in one dataset. Each row has the company, licence number, licence class (A: over $500,000 per job; B: up to $500,000; C: up to $300,000; D: up to $100,000), Secretary of State control number, renewal date, certificate-of-liability-insurance expiry date, the state's overall standing plus its Business, WSI, Job Service and Other standing flags, business phone and mailing address. On October 28–29, 2026 the dataset held 10,458 active licences; 99.98% carry a phone and every one a mailing address. Data is served from a stored copy, so a run returns in seconds. Pay only per licence returned.
Who it's for
- Building-supply, insurance and software sales teams prospecting North Dakota contractors
- General contractors and project owners checking a subcontractor's class and insurance before awarding a job
- Compliance and procurement teams verifying vendor licences and standing in bulk
- Marketing agencies building contractor lists for Bismarck, Fargo, Minot and the oil-patch counties
How to use
This actor does two jobs. Run it, then collect results from the run's dataset (export to JSON/CSV/Excel, or pull via the Apify API).
Get a list (export): no names, just filters; returns the whole matching list.
{"status": "Active","city": "Bismarck","maxResults": 500}
Check specific firms (lookup): put company names or licence numbers in queries; Inputs below says how each is matched.
{"queries": ["A to Z Professional Services","55711"],"maxResults": 5}
See Inputs below for every available field.
What you get
One row per record:
| Field | Description |
|---|---|
listing_id | Contractor licence number exactly as the state prints it, leading zeros included (e.g. 000055711) |
name | Licensed company or contractor name |
extras.licence_class | A, B, C or D: the largest job the licence allows (A over $500,000; B up to $500,000; C up to $300,000; D up to $100,000) |
extras.status | Licence status (Active) |
extras.standing | Good Standing or Not Good Standing with the Secretary of State |
extras.standing_business | Standing flag: Business |
extras.standing_wsi | Standing flag: Workforce Safety & Insurance (workers' compensation) |
extras.standing_job_service | Standing flag: Job Service North Dakota |
extras.standing_other | Standing flag: Other |
extras.expires | Licence renewal date (licences renew by March 1 each year) |
extras.insurance_expires | Certificate of liability insurance expiry date on file |
extras.registered | Date the licence was registered |
extras.sos_control_id | Secretary of State control number |
extras.attention | Person the mailing address is addressed to, where the address names one |
phone | Business phone as the state lists it |
phone_e164 | The same number in +1 format |
street | Mailing street address |
city | Mailing city |
region | Mailing state (most are ND; out-of-state contractors keep their own) |
postal_code | ZIP code |
source_url | The FirstStop contractor search, keyed by control number |
Sample:
{"listing_id": "000055711","name": "A to Z Professional Services, LLC","phone": "(701) 220-7269","phone_e164": "+17012207269","street": "3730 W REGENT DR","city": "BISMARCK","region": "ND","postal_code": "58504-7516","country": "US","category": "contractor","categories": ["contractor"],"source": "snapshot","source_url": "https://firststop.sos.nd.gov/search/contractor#0007587022","extras": {"status": "Active","licence_class": "A","standing": "Good Standing","sos_control_id": "0007587022","registered": "2026-09-11","expires": "2027-03-01","insurance_expires": "2027-02-15","standing_business": "Good","standing_wsi": "Good","standing_job_service": "Good","standing_other": "Good"}}
Inputs
| Field | Required | Type | Default | Description |
|---|---|---|---|---|
mode | no | string | "auto" | export: no names, just filters; returns the whole matching list. lookup / verify: put company names (matched if contained in the company name) or licence numbers (exact) in 'queries'. auto picks the mode for you. |
query | no | string | — | A business name (or listing number) to look up in the stored copy of the directory. Kept alongside 'queries' for saved tasks. |
queries | no | array | [] | A business name (or listing number) to look up in the stored copy of the directory. Several values in one run; combined with 'query'. |
status | no | string | — | Only listings in this status. Kept alongside 'statuses' for saved tasks. |
statuses | no | array | [] | Only listings in this status. Several values in one run; combined with 'status'. |
city | no | string | — | Only listings in this city. Kept alongside 'cities' for saved tasks. |
cities | no | array | [] | Only listings in this city. Several values in one run; combined with 'city'. |
class | no | string | — | Only listings in this class. Kept alongside 'classes' for saved tasks. |
classes | no | array | [] | Only listings in this class. Several values in one run; combined with 'class'. |
categories | no | array | [] | Only rows from this name initial (one or more). Available: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z. |
maxResults | no | integer | 500 | Per query in lookup mode; per run in export mode. |
proxyConfiguration | no | object | {"useApifyProxy": false} | Used only for live lookups; exports read the stored snapshot. |
Pricing (Pay Per Event)
You pay per result (dataset-item) — no charge for empty runs. Example: 1000 contractor licences at $0.004/result ≈ $4.00.
Notices (unknown category, no match, stale data) are free. Apify platform usage is billed separately per your plan.
Use cases
- Lead lists: every active Class A contractor in Bismarck or Fargo with phone and mailing address.
- Subcontractor checks: confirm a firm's licence class covers the job size before signing (a Class D licence stops at $100,000).
- Insurance outreach: contractors whose certificate of liability insurance expires in the next 60 days.
- Risk screening: licences the state lists as Not Good Standing, or with a WSI standing other than Good.
Why this actor
- The whole active roster in one run, not 100 search results at a time.
- Every row carries the detail view: phone, mailing address, renewal and insurance dates, four standing flags.
- Licence class on every row, so a job-size check is a filter, not a phone call.
- Every filter takes a list; one licence number or a batch verifies in one run.
- Pay per licence; notices are free.
Limitations & updates
Covers active contractor licences with the North Dakota Secretary of State only; inactive and expired licences, and trade licences issued by other boards (electricians, plumbers), are not included. No email or website. The address is the mailing address on file, which can differ from where the contractor works. Lookups and verification answer from the stored copy, never a live search.
FAQ
Where does the data come from?
The North Dakota Secretary of State's FirstStop contractor search (firststop.sos.nd.gov): each active licence's search result joined to its detail record (phone, mailing address, renewal, insurance and standing).
Does it include inactive or expired licences?
No. It holds the licences FirstStop lists as active. A licence that lapses drops out at the next refresh.
What do the licence classes mean?
North Dakota licenses contractors for jobs over $4,000 by the largest job they may take: Class A over $500,000 per job, Class B up to $500,000, Class C up to $300,000, Class D up to $100,000. Filter with class (one letter, or several in classes).
How do I get one city?
Set city (or cities). It matches the mailing address on the licence, so an out-of-state contractor licensed in North Dakota appears under its home city.
What is the name-initial filter?
The stored copy is kept in 36 parts by the first letter or digit of the company name (a to z, 0 to 9). Leave it empty for everything; set it only to split a big export into smaller runs.
Can I verify a licence number?
Yes. Put one or more licence numbers (e.g. 55711) or company names in queries. Type a number as the state prints it, leading zeros included: 43881 and 000043881 are two different licences, and an exact match wins. A few numbers belong to two firms in different classes (Class A 2174 and Class B 2174 are two companies). A number alone then returns one free notice saying so; add class (e.g. B) to get the one you mean.
Is there an email address?
No. The Secretary of State publishes a business phone and mailing address, not an email.
How current is it?
The roster was read on October 28–29, 2026. The stored copy is refreshed when it is older than a month and the actor is in use. The run log states the date of the copy, and a run served from a copy older than 45 days returns one free notice saying so.
How am I charged?
One event per licence returned. Notices are free.
Guides & use cases
Written up on scrapebench.dev — the bench that runs and verifies this actor against the live source every night:
- How-to: How to run North Dakota Contractor License Lookup & Leads Scraper (ND SOS)
- Use case: Bismarck ND Licensed Contractors with Phone Numbers
More actors, coverage and nightly verification results: scrapebench.dev
Works with AI assistants (MCP)
Callable as an MCP tool, so Claude, Cursor, VS Code Copilot and other MCP clients can run it directly. Grab the config from the MCP tab on this page — Apify hosts the server and keeps that snippet current, and OAuth signs you in on first connect, so no API token goes in your config file.
Then just ask:
"List active Class A contractors in Bismarck, North Dakota, with their phone numbers and insurance expiry dates."
That is status Active, class A, city Bismarck: 306 licences on the October 28–29, 2026 data. Keep maxResults small on a first call. Runs started this way bill exactly like any other run.
Data & lawful use
This actor collects publicly available information that the North Dakota Secretary of State publishes for public lookup — licence records, business listings and the contact details professionals list there. Some of it identifies individuals (sole proprietors, licence holders, agents), so treat any names, phone numbers and emails in your results as personal data.
When you run this actor, you decide what is collected and what it is used for, so you are the controller of that data and we act only as your processor (Apify Standard Actor Contract). You need a lawful basis for your use, must honour opt-out and deletion requests, and must follow the marketing rules that apply to you (CAN-SPAM, TCPA, GDPR, CCPA and similar). Don't use the output for unsolicited bulk messaging, for screening covered by the FCRA, or for anything the source's own terms forbid.
Your results are stored in your own Apify account. We don't keep a copy of your results and don't sell or share them.
Disclaimer
This is an independent tool. It is not affiliated with, endorsed by or sponsored by the North Dakota Secretary of State. Names and marks are used only to describe the data source. Records are provided as published by the source and may be out of date or incomplete. For anything consequential (hiring, a permit, a legal decision), confirm the record with the issuing agency. You are responsible for making sure your use complies with applicable law and the source's terms.
Need help?
Open an issue on this actor's Issues tab and we'll respond there. Bug reports, missing fields and feature requests are all welcome. Guides and examples: scrapebench.dev.
If you are a person named in this data and want your record removed from our copy, email apify-help@scrapebench.dev; the source agency remains the official record.
Your run may be used to improve our services. If something looks off, or you want this actor to fit your use better, please share your run data with us: Apify Console → Settings → Security → Share run data with developers. It lets us see exactly what went wrong and keep improving the actor.