license-verifier
Verify US professional licenses by name or number against official state boards; check status, expiration, discipline, NPI cross-walk, and HHS-OIG exclusions.
Instructions
License Verification API — Nurses, MDs & OIG Exclusions. Primary source verification for US professional licenses. Search 19 state boards by name or license number: status, expiration, disciplinary actions. Cross-checks the NPPES NPI registry and screens the HHS-OIG exclusion list. Bulk roster screening. Newly licensed clinicians feed (roster-delta). Reads live from the official government source. COST AND SIDE EFFECTS: read-only with respect to the government source — it never writes to any external system — but each call starts a metered run on YOUR Apify account, billed $0.01 per result ($10 per 1,000). Lower on paid Apify plans, down to $3.00 per 1,000. Nothing is charged when a run fails. Store page: https://apify.com/malonestar/license-verifier
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | City to filter licensees by. Not every board publishes a city column. | |
| mode | No | Leave empty for the classic lookup/roster behaviour. Set "roster-delta" for the newly-credentialed feed: every credential ORIGINALLY ISSUED in the last sinceDays on the selected boards, one row each, with NPI cross-walk and OIG screen. The first run seeds a named baseline and emits the window as event_type "inventory"; later runs emit only event_type "newly_licensed" (a credential absent from the baseline AND issued on/after the previous run minus 7 days). A run against unchanged data emits 0 rows and bills nothing. Boards with an original-issue date: WA (DOH), TX-BON, TX-LVN, TX-APRN, IL, CO, CT, DE, OR (CCB), WA-CPA, WA-CONTRACTOR, NY-NOTARY, NY-COS, NY-APPRAISER. In this mode maxResults is the TOTAL row cap for the run (newest credentials first). | |
| name | No | Full-name search that works across every board (handles combined name fields). Use this if lastName/firstName return nothing. | |
| roster | No | Batch mode: verify a whole roster of professionals in one run. Each item: {firstName, lastName, state (optional — omit to search every board), profession (optional), middleName (optional, improves scoring)}. Emits one verdict row per entry with verdict, match_score, match_tier, NPI cross-walk, OIG exclusion screen and board-action status. Capped at 200 entries per run. Every verdict row is billable, including NOT_FOUND and INCONCLUSIVE_SOURCE_ERROR — a verified negative is the deliverable. | |
| states | No | State codes or explicit board IDs. A bare state code searches EVERY board in that state - e.g. "TX" covers TDLR trades AND the Board of Nursing (RN, LVN, APRN). Use a hyphenated ID to target ONE board: IL-IDFPR, CT-DCP, CO-DORA, TX-TDLR, TX-BON (RN), TX-LVN, TX-APRN, OR-CCB, OR-BCD, NY-RACING (horse racing only), NY-RE, NY-COS, NY-NOTARY, NY-APPRAISER, WA-DOH (health professions), WA-CPA, WA-CONTRACTOR, DE-DPR, VT-DFS. States: CO, CT, DE, IL, NY, OR, TX, VT, WA. Example: ["WA"]. | |
| lastName | No | Licensee last name (partial match). Example: "Threlkeld". Applied by default if omitted: "". | |
| firstName | No | Licensee first name (partial match). Supplying it raises match confidence sharply — first + last name exact is the threshold for a confident verdict. Example: "Judson". Applied by default if omitted: "". | |
| npiLookup | No | For each roster entry, look the person up in the federal NPI registry and use their self-reported state license number to pin down the exact board record. This is what turns 125 same-name candidates into one verified match, and it returns NPI, taxonomy and practice address. Applied by default if omitted: true. | |
| sinceDays | No | roster-delta only. How many days back the original-issue-date window reaches (1-400). The seeding run emits this whole window as inventory; later runs emit only credentials issued since the previous run (minus a 7-day publication slack). A non-integer or out-of-range value fails the run before any request is made. Example: 30. | |
| maxResults | No | Maximum number of license records to return per board. Each returned row is billable, so start small. Example: 10. Applied by default if omitted: 200. | |
| statusOnly | No | Return only license number, type, status, expiration, provenance and the OIG exclusion flags. Handy for recurring renewal monitoring. NOTE: this is the SAME price per row as a full record — it returns less data, not cheaper data. Applied by default if omitted: false. | |
| licenseType | No | e.g. "Registered Nurse", "Real Estate", "Cosmetology", "Professional Engineer". Boards without a license-type column skip this filter and say so in the log and in unsupported_filters. | |
| professions | No | roster-delta only. Restrict to these professions, matched case-insensitively on the normalised profession (e.g. "Registered Nurse") or as a prefix of the board's raw credential type ("Registered Nurse" reaches "Registered Nurse License" and "Registered Nurse Temporary Practice Permit" but NOT "Advanced Registered Nurse Practitioner"). Examples: "Registered Nurse", "Licensed Practical Nurse", "Physician And Surgeon", "Dentist", "Pharmacist", "Physical Therapist". Omit for every profession the board publishes. Changing this filter starts a NEW delta baseline (the baseline is scoped by boards + professions). Example: ["Registered Nurse"]. | |
| businessName | No | Business or DBA name to search (partial match). | |
| licenseNumber | No | Exact license number to verify. The most precise search available — use it when you have it. | |
| checkDiscipline | No | Join the best-matching licensee against secondary board-action datasets: Delaware DPR disciplinary actions and the NYS Office of Professional Medical Conduct. A failed lookup is reported as unknown, never as 'no action on file'. Applied by default if omitted: true. | |
| onlyDisciplined | No | Return only licensees with a disciplinary history. Honoured by IL-IDFPR, CO-DORA, DE-DPR, WA-DOH, TX-BON and TX-LVN. Target those board IDs directly rather than a bare state code, or sibling boards that publish no disciplinary column will also return rows (they are reported in unsupported_filters). Applied by default if omitted: false. | |
| socrataAppToken | No | Optional free Socrata app token to raise rate limits. | |
| screenExclusions | No | Check every result against the federal HHS-OIG List of Excluded Individuals/Entities (83,000+ records, refreshed monthly). Matched on NPI first, then last+first+state. A surname-only hit is NEVER reported as an exclusion — it is flagged for review instead. Adds no per-row cost. Applied by default if omitted: true. | |
| rosterLimitPerBoard | No | How many candidate records to pull per board for each roster entry before scoring. Higher values reduce the chance of missing the right person for a common surname; candidates_truncated tells you when the cap was hit. Applied by default if omitted: 100. |