How-to
How to run Missouri Professional License Lookup & Leads Scraper (DPR)
Step-by-step: the exact input, what each field does, and the rows that come back from MO DPR license downloads.
You want a list of licensed Missouri professionals with mailing addresses: electrical contractors, engineers, dentists, real estate brokers, or any of the other licence types the Division of Professional Registration covers. Or you have a few names or licence numbers to check. The Division gives the list away, but as 170 separate ZIP files, one per licence type, each picked from a board menu and each holding a tab-delimited text file with database column names. One licence type is a few minutes of work. The whole state, or a weekly refresh, is an afternoon of downloading and joining.
What you’ll need
Nothing but an Apify account. The actor downloads the Division’s own files in the run itself, so there is no API key, proxy or CAPTCHA solver to set up, and nothing extra to pay for.
Step 1 — Open the actor
Open Missouri Professional License Lookup & Leads Scraper (DPR) 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 |
|---|---|---|---|
mode | string | no | export: no names, just filters; returns the whole matching list. lookup / verify: put licensee names (matched if contained in the licensee name) or licence numbers (exact) in… (default auto) |
query | string | no | A licensee’s name (or listing number) to look up live. Kept alongside ‘queries’ for saved tasks. |
queries | array | no | A licensee’s name (or listing number) to look up live. Several values in one run; combined with ‘query’. (default []) |
county | string | no | Only listings in this county. Kept alongside ‘counties’ for saved tasks. |
counties | array | no | Only listings in this county. Several values in one run; combined with ‘county’. (default []) |
city | string | no | Only listings in this city. Kept alongside ‘cities’ for saved tasks. |
cities | array | no | Only listings in this city. Several values in one run; combined with ‘city’. (default []) |
categories | array | no | Only rows from this licence type (one or more). Available: Acupuncturist, Advanced Macro Social Worker, Agency Investigator Employee, Anesthesiologist Assistant,… (default []) |
maxResults | integer | no | Per query in lookup mode; per run in export mode. (default 500) |
categories decides almost everything. It takes licence types in the Division’s own words
(Electrical Contractor, Professional Engineer, Dentist); the form lists the first 25 of the
170, and a name it does not know returns the full list as a free row. Leave it empty and you get every
licence type, in alphabetical order, up to maxResults. That is rarely what you want: the
Cosmetology & Barber board alone holds more than 75,000 licences and publishes no address for any of
them. The second field is county, which takes a Missouri county (Jackson, St. Louis). The
files include out-of-state licensees, and most of their rows carry no county, so a Missouri county
filter drops nearly all of them; a few list their own state’s county, so check region too.
A working input:
{
"categories": [
"Electrical Contractor"
],
"maxResults": 500
}
For a lookup instead, set mode to lookup, put names (Garnett) or licence numbers
(2019028878) in queries, and keep categories set to the licence types worth searching. A name
matches if it is contained in the holder’s name; a number matches exactly.
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.
Each licence type is one file download. The first customer run returned 3 electrical contractors in 13 seconds, and a local test read all 1,230 in under 7 seconds. Reading every licence type takes about a minute per 100,000 rows. A lookup reads the same files, so a lookup limited to one licence type answers in seconds, while one across all 170 takes a few minutes. An empty result almost always means a filter value is spelled differently from the Division’s words, a city with no licensees of that type, or a name the files do not hold; each of those returns a free notice, not a charge.
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:
{
"listing_id": "2019028878",
"name": "Justin A Garnett",
"street": "5950 Old State Rd",
"city": "Imperial",
"region": "Missouri",
"postal_code": "63052",
"country": "US",
"category": "Electrical Contractor",
"categories": [
"Electrical Contractor"
],
"source": "live",
"source_url": "https://mopro.mo.gov/license/s/license-search#ELC-2019028878",
"extras": {
"board": "Electrical Contractors",
"status": "Active",
"expiration_status": "Not Expired",
"expires": "2029-09-30",
"issued": "2019-07-25",
"county": "Jefferson",
"person_name": "Justin A Garnett",
"employer": "Mid-America Electric, Inc.",
"profession_code": "ELC"
}
}
| Field | Example value | Meaning |
|---|---|---|
name | Justin A Garnett | Licence holder: a person’s full name, or the firm’s name for a corporation, establishment or business licence |
listing_id | 2019028878 | Licence number exactly as the Division prints it |
category | Electrical Contractor | Licence type in the Division’s words, e.g. Electrical Contractor, Professional Engineer, Pharmacist |
street | 5950 Old State Rd | Mailing street address (both address lines); empty for the Cosmetology & Barber board |
city | Imperial | Mailing city |
region | Missouri | Mailing state, spelled out (Missouri, Kansas, …) |
postal_code | 63052 | Mailing ZIP code |
extras.county | — | County of the mailing address as the Division records it; usually empty for out-of-state addresses (a few carry their own state’s county) |
Most people come for the mailing address: street, city, region and postal_code. It is the
address the licensee gave the board, often a business address, sometimes a home or a PO box. About
74% of all rows carry a street; the Cosmetology & Barber board publishes none, and no board publishes
a phone or email. region is spelled out (Missouri, Kansas), not a two-letter code. For
electrical contractors, extras.employer names the firm the licence holder works for, which is
often the company you actually want. Keep listing_id exactly as printed: one person can hold
several licence types under the same number, and each comes back as its own row.
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; notices (no match, unknown licence type) are free. All 1,230 active electrical contractors cost $4.92. A 100,000-row export, the most one run returns, costs $400, so filter by licence type and county first. Apify bills platform usage separately under your own plan.
Where the data comes from
This reads MO DPR license downloads directly. The target is The Division of Professional Registration’s licensee download files: one guest Salesforce Apex call per board lists its files, and each licence type is a ZIP of tab-delimited text, regenerated nightly. Every run downloads the files for the licence types it needs; nothing is stored. Every night a canary runs this actor against that live source and diffs the result against a frozen fixture — what “verified” means.
The files are the state’s own export, so there is nothing to scrape and nothing to get past. The work is the menu and the join: each board offers its files separately, the columns differ from board to board (Healing Arts adds a discipline column, Pharmacy another), and the Division’s search page is no substitute, since one query returns at most 50,000 rows without saying so. The files list active licences only, and nursing is licensed elsewhere and is not in them.
See it used
Missouri Electrical Contractors (DPR) builds the list of 1,230 active electrical contractors with their employers and mailing addresses.
To check contractor licences in several states at once, including Missouri’s electrical contractors, the US contractor license lookup runs this actor for you alongside the other states’ boards.
Last updated 2026-11-03