← Guides

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.

The Missouri Professional License Lookup & Leads Scraper (DPR) listing on the Apify Store
The listing on the Apify Store. Pricing and the nightly health record are both public.

Step 2 — Fill in the input

The input form for Missouri Professional License Lookup & Leads Scraper (DPR) in the Apify Console
The input form, as it appears in the Apify Console.
FieldTypeRequiredWhat it does
modestringnoexport: 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)
querystringnoA licensee’s name (or listing number) to look up live. Kept alongside ‘queries’ for saved tasks.
queriesarraynoA licensee’s name (or listing number) to look up live. Several values in one run; combined with ‘query’. (default [])
countystringnoOnly listings in this county. Kept alongside ‘counties’ for saved tasks.
countiesarraynoOnly listings in this county. Several values in one run; combined with ‘county’. (default [])
citystringnoOnly listings in this city. Kept alongside ‘cities’ for saved tasks.
citiesarraynoOnly listings in this city. Several values in one run; combined with ‘city’. (default [])
categoriesarraynoOnly rows from this licence type (one or more). Available: Acupuncturist, Advanced Macro Social Worker, Agency Investigator Employee, Anesthesiologist Assistant,… (default [])
maxResultsintegernoPer 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:

The output fields returned by Missouri Professional License Lookup & Leads Scraper (DPR)
The output view — every field the actor returns, named and typed.

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"
  }
}
FieldExample valueMeaning
nameJustin A GarnettLicence holder: a person’s full name, or the firm’s name for a corporation, establishment or business licence
listing_id2019028878Licence number exactly as the Division prints it
categoryElectrical ContractorLicence type in the Division’s words, e.g. Electrical Contractor, Professional Engineer, Pharmacist
street5950 Old State RdMailing street address (both address lines); empty for the Cosmetology & Barber board
cityImperialMailing city
regionMissouriMailing state, spelled out (Missouri, Kansas, …)
postal_code63052Mailing 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