Delaware Professional Licenses & Discipline
Pricing
from $0.03 / 1,000 de license or disciplinary records
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
Maintained by CommunityActor 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.
| Corpus | Rows | What it holds |
|---|---|---|
| licenses (default) | 353,905 | one row per licence: licensee name, profession, licence type, status, city / state / ZIP, issue and expiration dates |
| disciplinary | 8,483 | one 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,973Medical Practice 37,726Charitable Gaming 32,565Real Estate 31,000Electrical Examiners 27,035Cosmetology 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.