Credentialing & Verification

State License Verification Automation

Verify a provider’s license against the state board’s own register: license status, issue and expiration dates, and any disciplinary actions, with an evidence screenshot of the board’s record. Primary-source verification, built board by board.

Go-live in as little as 30 minBrowser agentPublic source

See it run on your systems.

We map your process, volume, and exception paths, then recommend a practical first scope.

Building internally? Read the docs →

Overview

What this workflow does

License verification is board-by-board work because the sources are board-by-board: roughly fifty state boards per profession, each with its own register, search flow, and status vocabulary. A browser agent runs the check a credentialing coordinator runs today: it opens the board’s own license search, finds the license, and reads the full record back, status normalized to active, expired, inactive, revoked, or suspended, plus the license number and type, issue and expiration dates, and the board’s disciplinary-action history.

The workflow is built per board and per license type, California RN today via the state’s DCA license search, and extended board by board the same way the state Medicaid exclusion coverage grows. A request for a board that isn’t built yet ends with a clear scoped error naming what’s supported, never a wrong answer.

How Asteroid runs this workflow

Fifty boards, one verified license record shape

A provider's identity, profession, and state enter the queue, Asteroid opens the right state board's own register, reads the full license record with its disciplinary history, and returns it normalized to your roster, with outages, ambiguous matches, and unexpected restrictions routed to your credentialing team.

State board license registersCA DCA License Search

How it actually runs

  1. 01The agent opens the state board’s own license register, the primary source, not an aggregator’s copy of it. Board sites often sit behind bot protection, so the agent runs with a residential-proxy and captcha-solving profile, and it never fabricates a challenge token: if verification genuinely can’t complete, the run errors rather than sneaking past.
  2. 02It confirms the request is in scope for the board and license type it’s built for; anything else returns the scoped error.
  3. 03It searches by license number when you have it, the most precise path, or by first and last name.
  4. 04It opens the license detail and reads the record: status, license number and type, issue and expiration dates, and every disciplinary action with its date, type, and description, or the register’s explicit statement that there are none.
  5. 05It screenshots the board’s record as audit evidence, timestamps the check, and returns one structured record.

Provider identity, profession, state, and available license details enter the queue

  1. Delivered to your credentialing roster

    License status, type, expiry, and the disciplinary history land in the roster with the evidence screenshot and timestamp, driving the renewal calendar instead of trailing it.

Board outage or ambiguous match: Unresolved matches, unexpected restrictions, and boards that won't respond return with the board's own record or an explicit error; a person resolves it once, or re-runs with the license number for an exact answer.

Closing the loop

What lands back in your system

Nobody on your team reads this JSON. Your system does. Each run delivers its record wherever the work already lives, and the loop closes on its own: requests in, records back, no one in the middle.

structured output · json
{
"source": "CA DCA License Search",
"status": "found",
"checked_at": "2026-07-16T14:02:11Z",
"result": {
"license_status": "Current",
"license_number": "RN •••482",
"license_type": "Registered Nurse",
"name": "SAMPLE, JANE",
"issue_date": "2014-06-12",
"expiration_date": "2027-06-30",
"disciplinary_actions": []
},
"evidence_screenshot_url": "https://…/evidence/run_51de….png"
}
Delivered toYour APIWebhooksGoogle SheetsSlackEmailAll integrations →

For many license types, the board’s website is the API

National aggregators like Nursys and the FSMB Physician Data Center cover nurses and physicians, and if your roster stops there, they’re a reasonable rail. It usually doesn’t. Psychologists, LCSWs, LPCs, LMFTs, and most of the behavioral-health license mix have no national aggregator at all, so verification for them is the board’s own register or nothing. And even where an aggregator exists, the board’s register is the primary source, which is the standard credentialing files are held to. This workflow runs against the primary source directly, and captures the disciplinary history most aggregate feeds flatten into a flag.

Pair it with the NPPES NPI lookup to pin the provider’s identity before a name-based board search.

At scale

One license, or the whole roster’s renewal calendar

A single run verifies one license on one board. As a program, verifications run on the roster’s renewal cycle, licenses expire on the board’s schedule, not yours, and the exceptions, expirations, disciplinary actions, unmatched licenses, land with your credentialing team with the board’s own record attached. License verification is part of the credentialing and verification workflow library. The same primary-source discipline covers DEA registration verification and, outside the US, AHPRA registration in Australia.

Human in the loop

What escalates to a human

License checks run on SOC 2 Type II, HIPAA-compliant infrastructure, each with a logged result per board, which is what a delegated-credentialing audit wants to see. See the security page.

A disciplinary action on the record.

Reported with its date, type, and description; what it means for the provider is a judgment, and it’s yours.

Multiple matches on a name.

Reported for a person to resolve, or re-run with the license number for an exact answer.

Bot protection that won’t clear.

The run errors honestly, never fabricates a token, and never records a check that didn’t happen.

A board that isn’t built yet.

A clear scoped error naming what’s supported.

Questions

Frequently asked questions

The board search is fixed; everything around it bends to your file standard. Asteroid configures which inputs you send (license number for the most precise path, or first and last name), which record fields you need (status normalized to active, expired, inactive, revoked, or suspended, plus issue and expiration dates and the disciplinary history), the output format, delivery destination, and which findings pause for your credentialing team. Verifications arrive in the queue your coordinators already work; nothing new to learn on their side.

License verification is one workflow in the credentialing and verification workflow library. A license that expired on the board’s schedule, not yours, is a finding you want first, not one you want explained to you.

Disclaimer

Third-party names, including government agencies and registries, are used only to identify systems commonly involved in healthcare operations workflows. Asteroid is not affiliated with, endorsed by, sponsored by, or certified by those third parties unless expressly stated. Workflow availability depends on customer authorization, account permissions, configuration, and applicable system terms.