Delaware Professional Licenses & Discipline avatar

Delaware Professional Licenses & Discipline

Pricing

from $0.03 / 1,000 de license or disciplinary records

Go to Apify Store
Delaware Professional Licenses & Discipline

Delaware Professional Licenses & Discipline

Delaware professional and occupational licences (public data, 353,905 licences across 38 professions) plus the state's disciplinary actions against licensees (8,483 sanctions) - searchable by name, profession, licence type, status or action taken.

Pricing

from $0.03 / 1,000 de license or disciplinary records

Rating

0.0

(0)

Developer

Wenhao Yang

Wenhao Yang

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

16 hours ago

Last modified

Categories

Share

Low cost

From $0.00005 per record, down to $0.00003 at Gold - pay per record delivered, and nothing for the query. Each record costs a fraction of a cent.

Delaware's professional and occupational licensing register, and the disciplinary actions the state has taken against the people on it.

What you get

Two corpora over the same licensee universe, linked by licence number.

CorpusRowsWhat it holds
licenses (default)353,905one row per licence: licensee name, profession, licence type, status, city / state / ZIP, issue and expiration dates
disciplinary8,483one row per sanction: the action taken, its start and end dates, with the licensee's name, profession and licence type

38 professions - Nursing (~90k), Medical Practice (~38k), Charitable Gaming (~33k), Real Estate (~31k), Electrical Examiners (~27k) and more. 297 licence types. 21 disciplinary action types, from Letter of Reprimand and Fine through Suspension, Probation and Revocation.

Discipline is the real record, not a column

The register carries a disciplinary_action field. It reads N on all 353,905 rows - every single one. It looks like a screening flag and is in fact a constant, so it is not exposed here at all.

The state's actual disciplinary record lives in a separate dataset: 8,483 sanctions with the action taken and its dates. Both carry the licence number, and that link resolves 4,320 of 4,322 licences (99.95%). One run returns one corpus, so a licensee's licence record and their sanction history take two queries against that shared number - about a fifth of a cent.

This is worth stating plainly because the column being 100% populated makes it look like a feature. It is the opposite.

Modes

  • licenses (default) - the register, newest licence first
  • disciplinary - the sanction record, newest action first
  • aggregate - one count row per group: by profession, licence type, status or state (licences), or by action type (disciplinary)

Filter the register by name, profession, licence type, status, city, ZIP, or issue / expiration window. Filter the sanction record by name, profession, licence type, action, or action-date window. Using a filter the chosen corpus does not have is rejected outright rather than quietly returning unfiltered rows.

Example inputs

One licence by number - licenseNumber works in both corpora.

{ "licenseNumber": "L1-0077557" }

Active nurses in one ZIP - profession and zip are both substring matches.

{
"profession": "Nursing",
"status": "Active",
"zip": "199",
"maxResults": 25
}

The sanctions the state has issued - switch corpus; action is a substring match.

{ "corpus": "disciplinary", "action": "Revocation", "maxResults": 25 }

The register by profession - aggregate=true returns one count row per group, every group of the dimension.

{ "aggregate": true, "groupBy": "profession" }

Why this is hard

The status vocabulary is 17 values and several overlap. Suspended is a substring of Non-Disciplinary Suspension; Expired and Expired Inactive are different states; Terminated, Deactivated, Annulled and Withdrawn each mean a licence ended in a different way, and Denied means one was never granted. A filter that matches loosely returns the wrong licensees - for a licence-verification product that is the whole ballgame, so statuses match exactly.

The dates are not all plausible. Issue dates run back to 1900 and expiry dates out to 2206. But a licence legitimately expiring in 2030 is normal - 8,645 of them sit more than two years out - so clearing junk on a tight window would delete real licences instead. Only the impossible outliers are cleared.

And the sanctions are rows, not a flag. One licensee can carry several actions, sometimes on the same day - a Letter of Reprimand and a Fine are two rows for one person. Counting rows counts sanctions, not people, and the register's own flag cannot tell you either.

Output

One schema across both corpora: every record carries the full field set, empty where that corpus has nothing to say, so the same downstream code reads either. Dates arrive as YYYY-MM-DD, and each record carries sourceUpdatedAt, the register's own last-refresh timestamp.

Example output

One licence - licenseNumber=L1-0077557 returns the licence record:

{
"action": "",
"actionEndDate": "",
"actionStartDate": "",
"city": "BETHEL",
"corpus": "licenses",
"country": "United States",
"expirationDate": "2027-09-30",
"firstName": "SEAN",
"fullName": "COLLINS,SEAN",
"issueDate": "2026-09-23",
"lastName": "COLLINS",
"licenseNumber": "L1-0077557",
"licenseType": "Registered Nurse",
"profession": "Nursing",
"sourceUpdatedAt": "2026-09-24T10:33:51Z",
"state": "DE",
"status": "Active",
"zip": "19931",
"platform": "de-professional-licenses",
"source": "de-delaware-professional-licensing",
"groupKey": "",
"groupCount": "",
"groupBy": ""
}

aggregate=true, groupBy=profession - one count row per profession:

Nursing 89,973
Medical Practice 37,726
Charitable Gaming 32,565
Real Estate 31,000
Electrical Examiners 27,035
Cosmetology and Barbering 24,948

Notes

  • Public open data from the State of Delaware. No login, no scraping.
  • Charges are metered per record delivered, so one licensee's licence and full sanction history costs a fraction of a cent.