Virginia Physician License Verification Scraper avatar

Virginia Physician License Verification Scraper

Pricing

from $3.00 / 1,000 results

Go to Apify Store
Virginia Physician License Verification Scraper

Virginia Physician License Verification Scraper

Verify physician, osteopathic physician, physician assistant, podiatrist, and chiropractor licenses issued by the Virginia Department of Health Professions (DHP) Board of Medicine. Search by name or look up an exact license number.

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

Crawler Bros

Crawler Bros

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

Verify physician, osteopathic physician, physician assistant, podiatrist, and chiropractor licenses issued by the Virginia Department of Health Professions (DHP), Board of Medicine. Search by name and/or ZIP code, or look up an exact license number — straight from the DHP's own public License Lookup tool (dhp.virginiainteractive.org). No login, no API key, no proxy required.

What this actor does

  • Two modes: search (name / ZIP / occupation / status) and byLicenseNumber (exact license-number lookup, one or many)
  • Ten Board of Medicine occupation types: Medicine (MD), Osteopathic Medicine (DO), Podiatry, Chiropractor, Physician Assistant, Interns & Residents, University Limited License, Permitted Physician, Physician Selling Controlled Substances (and its facility permit) — search one, search a custom subset (e.g. MD + DO only) via occupations, or search across all of them at once
  • License status: filter to current or expired licensees, or filter client-side by the exact status text on file (e.g. "Active", "Suspended", "Revoked", "Probation", "Expired-Compact")
  • Full record: license number, occupation, name, city/state/ZIP, initial license date, expiration date, current status, and whether DHP has additional public disciplinary information on file (with a link when available)
  • Empty fields are omitted — a field only appears when DHP actually published that data for the licensee

Output per license

  • licenseNumber — 10-digit Virginia DHP license number
  • occupation — e.g. Medicine, Osteopathic Medicine, Physician Assistant
  • fullName
  • address — raw mailing address line as published by DHP (e.g. Richmond, VA 23219)
  • city, state, zipCode — parsed from address (licensee's mailing address on file, may be outside Virginia)
  • initialLicenseDate, expireDate — ISO dates
  • licenseStatus — raw status text as published by DHP
  • hasAdditionalPublicInformationtrue when DHP must make additional disciplinary/administrative records available under Virginia Code §54.1-2400.2.H
  • additionalPublicInformationUrl — link to that additional information, when provided
  • profileUrl / sourceUrl — canonical DHP License Lookup detail page
  • recordType: "physicianLicense", scrapedAt

Input

FieldTypeDefaultDescription
modestringsearchsearch / byLicenseNumber
lastNamestringSmithLicensee last name (mode=search; required unless zipCode given)
firstNamestringLicensee first name (mode=search)
zipCodestringLicensee mailing ZIP (mode=search; required unless lastName given)
occupationstringMedicineOne Board of Medicine occupation, or "Any" (mode=search)
occupationsarrayCustom subset of two or more occupation types; overrides occupation when set (mode=search)
addressStatestringFilter by licensee's mailing-address US state (mode=search)
licenseStatusstringanyany / current / expired (mode=search)
statusContainsFilterstringOnly emit records whose status text contains this (case-insensitive)
licenseNumbersarray["0101058086"]License numbers to verify (mode=byLicenseNumber)
maxItemsint20Hard cap on emitted records (1–300)

Examples

Example: search by last name (default occupation = Medicine)

{
"mode": "search",
"lastName": "Smith",
"maxItems": 20
}

Example: search across all physician occupation types

{
"mode": "search",
"lastName": "Patel",
"occupation": "any",
"maxItems": 50
}

Example: exact license number lookup

{
"mode": "byLicenseNumber",
"licenseNumbers": ["0101058086", "0102012345"]
}

Example: custom occupation subset (MD + DO only)

{
"mode": "search",
"lastName": "Lee",
"firstName": "David",
"occupations": ["101", "102"],
"maxItems": 20
}

Example: active osteopathic physicians in a ZIP code

{
"mode": "search",
"zipCode": "23451",
"occupation": "102",
"licenseStatus": "current",
"maxItems": 50
}

Use cases

  • Credentialing & primary source verification — confirm a physician's license is current before onboarding, matching Joint Commission primary-source verification requirements
  • Healthcare compliance & KYC — screen providers for disciplinary flags before contracting
  • Telehealth & staffing platforms — bulk-verify provider licenses across a roster
  • Patient safety research & journalism — check license status and public disciplinary history for accountability reporting
  • Insurance & credentialing vendors — automate license re-verification cycles

FAQ

What is the data source? The Virginia Department of Health Professions' public License Lookup tool (dhp.virginiainteractive.org/Lookup/Index). This actor is not affiliated with or endorsed by DHP or the Commonwealth of Virginia.

Is a login or API key required? No. DHP's License Lookup is fully public and free to use.

Why did filtering statusContainsFilter: "active" also return an "Inactive" record? The filter is a plain case-insensitive substring match against the exact status text DHP publishes, and "Inactive" contains the substring "active". Use a more specific phrase (e.g. "Current Active") if you need to exclude Inactive records. Note this filter also triggers a detail-page fetch per candidate (to read the real status text), so searches using it take a little longer than the default summary search.

Why does this only cover Virginia? DHP licenses physicians who practice in Virginia (some of whom live out of state). It is a single-state authoritative source, the same scope as this repository's other state-licensing-board actors (e.g. contractor and real estate license scrapers). It does not aggregate other states' medical boards.

What does "Your search returned too many records" mean? DHP's own search caps very broad queries (e.g. a common surname with no other filters). Add a first name, ZIP code, or narrow the occupation to get results under that cap — this actor reports the condition via a clean status message rather than guessing at a partial result set.

Why do some license numbers in byLicenseNumber return nothing? DHP's lookup only returns unexpired records back to January 1, 2000, plus all currently active records. A license expired before that date, or a mistyped number, will return no match.

How fresh is the data? Every run fetches live pages directly from dhp.virginiainteractive.org — DHP itself refreshes the underlying data continuously ("Current as of" timestamp is shown on every page). There is no caching in this actor.

Data Source / Limitations

  • For complete, reliable results, include a first name. DHP's own backend applies stricter rate-limiting to broad "last name only" searches (no first name) from automated/cloud clients, which can return noticeably fewer records than the true total. Combining first name + last name (or an exact license number) — the natural way to verify one specific physician — is not affected and returns complete, accurate results every time. If you need a broad roster of everyone with a given surname, run the search from a residential connection instead.
  • Single-state scope (Virginia DHP, Board of Medicine occupations only).
  • licenseStatus is free text exactly as published by DHP — it is not a fixed enum, since DHP does not publish an exhaustive list of every possible status.
  • Looking up by license number returns whatever license is on file for that number, even if it belongs to an occupation outside this actor's physician scope (DHP license numbers are shared across all professions it regulates).
  • Addresses are mailing addresses only (city/state/ZIP) — DHP does not publish street addresses in the public lookup.
  • DHP's site also offers a third search form (last 4 digits of SSN + last name). This actor does not expose it — the two modes above already cover every reliable name/ZIP/occupation/status and exact-license-number lookup path, and we intentionally avoid asking users to submit even partial SSN data.
  • No city or county search field exists upstream. The License Lookup form only offers State (dropdown) and ZIP code as geographic filters — there is no separate city/county input on the live form to expose. city in the output is parsed from the licensee's mailing address, not searchable as an input.
  • No sort options exist on the results listing. DHP's search-results table has plain (non-sortable) column headers; results come back in whatever order the database returns them, so this actor does not offer a sortBy input.
  • Board disciplinary case decisions (notices/orders) are not fetched as structured data. When DHP has additional public information on a licensee, the "Yes" link on the detail page (additionalPublicInformationUrl) points to a separate legacy system at dhp.virginia.gov/enforcement/cdecision/ (classic ASP, not the dhp.virginiainteractive.org site this actor scrapes). Verified live: the initial disclaimer page loads (200), but submitting it consistently returns 500 Internal Server Error from DHP's own server — the endpoint itself is broken, not merely gated. This actor still surfaces the link exactly as DHP publishes it so users can try it manually; it does not attempt to scrape structured case content from it.
  • DHP's homepage also advertises three paid, subscription/login-gated services — bulk "License Verification" ($95/user/year), a "License Database Download" (per-record fee), and "Case Decision Notification" emails ($200–500/user/year). None of these are exposed here; they require an account and payment, which conflicts with this actor's zero-cost, no-login design.