Professional License Lookup Scraper — DE + CO Roster Export
Pricing
from $5.00 / 1,000 results
Professional License Lookup Scraper — DE + CO Roster Export
Bulk-export professional and occupational license rosters from Delaware and Colorado state licensing-board open-data portals — nursing, real estate, contractors, medical, accountancy and more, one call per state, with disciplinary flags where published. No API key, no login.
Pricing
from $5.00 / 1,000 results
Rating
0.0
(0)
Developer
DevilScrapes
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
🎯 What this scrapes
This Actor bulk-exports professional and occupational license rosters from official state licensing-board open-data portals — Delaware and Colorado in v1 (more states coming) — and returns one structured row per licensee per state. Each row carries the licensee's name, license number, profession, license type, current status, issue and expiration dates, and a disciplinary-action flag with detail where the state publishes one.
We built this as a self-serve alternative to paying for a dozen near-identical single-state, single-profession scrapers. One call per state buys you coverage across nursing, real estate, contractors and trades, medical practice, accountancy, and dozens of other regulated professions — not one narrow niche. It queries each state's own free, keyless Socrata open-data API directly, not a paywalled search UI.
🔥 What we handle for you
- 🛡️ Browser fingerprint rotation —
curl-cffiimpersonates real Chrome / Firefox / Safari TLS handshakes so every request looks like a browser, not Python. - 🔁 Retries with exponential backoff on
408 / 429 / 5xx— up to 5 attempts per request,Retry-Afterhonoured. - 🧱 Graceful degradation per state — if one state's dataset hiccups, that state is skipped with a warning; your batch keeps running.
- 🧊 Clean, typed dataset rows — Pydantic-validated, ISO-8601 timestamps, a shared cross-state schema despite each state publishing wildly different raw field names.
- 🧩 Disciplinary-signal resolution done right — Delaware's inline flag is a dead column (always
"N"); we join the state's companion disciplinary dataset instead of trusting it. - 💰 Pay-Per-Event pricing — you only pay for licensee rows that land in your dataset. No data, no charge (beyond the small warm-up fee).
💡 Use cases
- Background-check / HR / compliance vendors — verify a candidate or contractor's professional license is current before a hire or engagement.
- Staffing agencies — bulk-pull active licensees in a profession/region for a candidate pipeline.
- Lead-gen / sales prospecting — build a contact list of licensed professionals in a target trade or profession.
- Insurance underwriting — confirm license status and disciplinary history before binding a policy.
- List hygiene — drop licensees whose
status_normalizedcomes backinactive, or filter todisciplinary_onlybefore outreach.
⚙️ How to use it
- Click Try for free at the top of the page.
- Leave Jurisdictions at its default (
DE,CO) for both states, or narrow to one. - Optionally set Profession query (e.g.
"nursing"), Name query, or License number to narrow the pull — leave all three blank for a full roster export. - Toggle Active licenses only / Disciplinary actions only as needed, and set Max results.
- Click Start. Rows stream into the run's dataset as each jurisdiction is paginated.
- Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.
📥 Input
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
jurisdictions | array | no | ["DE","CO"] | Which state licensing rosters to query (more states coming). |
professionQuery | string | no | — | Substring filter against the profession/license-type field (e.g. "nursing", "real estate", "roofing"). Omit for a full multi-profession roster pull. |
nameQuery | string | no | — | Substring filter on licensee last/combined name. |
licenseNumber | string | no | — | Exact license-number lookup — narrows to (at most) one licensee per jurisdiction. |
activeOnly | boolean | no | true | Restrict to active/current license status per jurisdiction's own status vocabulary. |
disciplinaryOnly | boolean | no | false | Restrict to licensees with a disciplinary action on file. |
maxResults | integer | no | 500 | Cap total rows across all requested jurisdictions (1-500,000). |
proxyConfiguration | object | no | {"useApifyProxy": false} | Optional — these are public open-data APIs, not known to fingerprint clients. |
Example input
{"jurisdictions": ["DE", "CO"],"professionQuery": "nursing","activeOnly": true,"disciplinaryOnly": false,"maxResults": 500,"proxyConfiguration": {"useApifyProxy": false}}
📤 Output
Every row is one matched licensee for one jurisdiction.
| Field | Type | Notes |
|---|---|---|
jurisdiction | string | DE or CO. |
licensee_name | string | Combined/individual or business name on file. |
license_number | string | State's on-file license number. |
profession | string | Normalized profession/category label. |
license_type | string | null | Specific license-type/subtype label. |
status | string | null | Raw state status label. |
status_normalized | string | active, inactive, or unknown — derived per-state. |
issue_date | string | null | ISO YYYY-MM-DD. |
expiration_date | string | null | ISO YYYY-MM-DD. |
disciplinary_flag | boolean | Derived per per-jurisdiction disciplinary signal. |
disciplinary_detail | string | null | Disposition text/action, only populated when disciplinary_flag is true. |
city | string | null | Mailing city on file. |
mailing_state | string | null | Mailing-address state on file (may differ from jurisdiction). |
source_record_url | string | Direct SODA resource query, or CO's linktoverifylicense when present. |
registry_url | string | The state's open-data dataset landing page. |
scraped_at | string | ISO 8601 UTC timestamp this row was written. |
Example output
{"jurisdiction": "DE","licensee_name": "SHAHAN,BRIAN","license_number": "RS-0037427","profession": "Real Estate","license_type": "Salesperson","status": "Active","status_normalized": "active","issue_date": "2021-09-14","expiration_date": "2028-04-30","disciplinary_flag": false,"disciplinary_detail": null,"city": "WILMINGTON","mailing_state": "DE","source_record_url": "https://data.delaware.gov/resource/pjnv-eaih.json?license_no=RS-0037427","registry_url": "https://data.delaware.gov/d/pjnv-eaih","scraped_at": "2026-07-18T12:00:00+00:00"}
💰 Pricing
Pay-Per-Event — you pay only when these events fire:
| Event | USD | What it is |
|---|---|---|
actor-start | $0.005 | One-off warm-up charge per run |
result-row | $0.005 | Per matched licensee row written to the dataset |
Example: 1 000 matched rows ≈ $5.00. No subscription, no minimum, no card to start — Apify gives every new account $5 of free credit.
🚧 Limitations
This is a v1 with 2 confirmed states (DE, CO) — more states are on
the roadmap. Illinois' broad multi-profession dataset was evaluated but
excluded: its host (illinois-edp.data.socrata.com) publishes a
blanket Disallow: / in robots.txt, so we don't scrape it, even
though the JSON endpoint itself is technically public. Delaware's
inline disciplinary_action column is a dead field (always "N"
across the full roster) — the real signal only exists in Delaware's
companion disciplinary dataset, which we join automatically; don't
rely on any third-party mirror that reads DE's inline column directly.
Colorado license numbers are not globally unique across profession
prefixes, so an exact licenseNumber lookup on CO can return more than
one licensee. Dataset freshness is whatever each state's open-data
snapshot publishes — not a real-time transactional lookup.
❓ FAQ
Why only 2 states in v1?
Delaware and Colorado are the states we've confirmed publish a
genuinely free, keyless, multi-profession Socrata dataset sourced from
the licensing board itself — and whose robots.txt doesn't block the
JSON endpoint. Adding a 3rd state is a contained per-state adapter, not
a rewrite; more are on the roadmap.
Does this cover attorneys / bar licenses?
No. Neither state's licensing-board portal includes attorneys — bar admission is handled by a separate body and isn't open data in v1.
How current is the data?
It's exactly as current as each state's own open-data snapshot. Neither
state's dataset is a real-time transactional lookup — treat
status/disciplinary_flag as "as published in the state's snapshot."
Can I get every profession in one run?
Yes — leave professionQuery blank for a full multi-profession roster
pull across whichever jurisdictions you select.
What does disciplinaryOnly change?
It restricts the pull server-side to licensees with a disciplinary action on file, instead of the full roster — useful for compliance and risk-screening workflows.
💬 Your feedback
Spotted a bug, hit a weird edge case, or need a 3rd state added? Open an issue on the Actor's Issues tab on Apify Console — we ship fixes weekly and we read every report.