# TX Nursing Licenses - RN, LVN & APRN Register (`j0401/tx-bon-licenses`) Actor

Texas Board of Nursing licenses (public open data): live RN directory (~436k, deep employment/specialty/degree fields), every RN ever issued (~794k), LVN/VN (~318k), advanced practice (~81k). Verify licenses, screen board action, or profile the workforce.

- **URL**: https://apify.com/j0401/tx-bon-licenses.md
- **Developed by:** [Wenhao Yang](https://apify.com/j0401) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.00 / 1,000 texas nursing license records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## TX Nursing Licenses - Texas Board of Nursing RN, LVN & APRN Register

The Texas Board of Nursing publishes its **entire nursing register** as open data - every RN the board has on file, the currently-registered RN directory with deep workforce profile fields, every LVN/VN license, and the advanced-practice recognition register. This actor turns those datasets into a **charged-per-record lookup and screening tool**.

**Built for:** healthcare credentialing & workforce verification - confirming that a nurse actually holds a current Texas license, screening for board action (disciplinary flags), background checks on nurse hires / locum / travel staff, healthcare-staffing and EHR onboarding checks, nursing-school verification, and state / county workforce & shortage analysis.

### What it covers

Four public BON datasets (one actor, switch with `type`):

| `type` | What it is | Rows |
|---|---|---|
| `rn` | **currently-registered RN directory** - live RNs with deep profile fields | 436,477 |
| `rn-history` | every RN license number ever issued (delinquent / inactive / deceased / revoked) | 793,555 |
| `vn` | every LVN / VN license ever issued | 318,084 |
| `aprn` | advanced-practice recognitions - NP / CRNA / CNM / CNS | 81,374 |

#### `rn` - the live RN register (default)

The live register - the **436,477 rows of the BON's current RN directory**, of which **435,917** hold CURRENT status (the rest are volunteer-retired or renewal-denied edge cases that the board still carries). Each row carries the RN's name, gender, license status **and status date**, expiration & original-issuance dates, county of residence, **employment status** (employed in nursing full/part-time, employed elsewhere, unemployed / retired / inactive), **primary practice setting** (inpatient hospital, outpatient, home care, school health, ...), **practice position** (staff nurse, charge, management, educator, ...), **primary specialty** (obstetrics, pediatrics, ER, ICU, ...), highest degree and basic nursing education, nursing school + graduation date, place of employment, state of original licensure, last renewal date, whether they hold **advanced-practice recognition**, and a **current-board-action flag** - plus when it was updated.

#### The full histories (`rn-history` / `vn`)

The complete record behind each license number, covering every status a license can hold: **CURRENT (C)**, DELINQUENT (D), INACTIVE (I), DECEASED (E), REVOKED (R), SUSPENDED (S), VOL. SURRENDER (V), VOLUNTEER RETIRED (W), RETIRED - INACTIVE (Z), CURRENT RENEWAL DENIED (K), NLC LICENSE - TX INVALID (Y), NOT CURRENT - SEE ENF (X). These tables are where you answer "is this number still good / was it ever revoked / how many RNs has Texas ever licensed."

#### `aprn` - advanced practice

Nurse practitioners, nurse anesthetists, clinical nurse specialists and nurse midwives with their recognition category + sub-category, approval & expiration dates, and **prescriptive-authority** details (number, status: Active / Inactive / Limited Prescribing - No Controlled Substances, expiry).

### Typical questions

- "Is this RN's license **current** in Texas?"
- "**Look up a license number** and get the nurse's profile + status."
- "Show every RN with a **board action** on record (disciplinary screening)."
- "How many active RNs work in **inpatient hospital** settings vs home care vs school health?"
- "What's the **specialty mix** - how many ER / ICU / OB nurses in Texas?"
- "**RNs per county** - where's the workforce concentration?"
- "How many RN licenses have been **revoked or are delinquent** (the `rn-history` register)?"
- "Nurses who graduated from **this nursing school**."

### Inputs

| Input | What it does |
|---|---|
| `type` | rn (default) / rn-history / vn / aprn |
| `licenseNumber` | exact number -> that nurse's record |
| `name` / `lastName` / `firstName` | holder name substring, case-insensitive |
| `status` | matches the official status vocabulary exactly (CURRENT / DELINQUENT / INACTIVE / DECEASED / REVOKED / SUSPENDED / ...). Default CURRENT on the `rn` register |
| `county` | county of residence (substring) |
| `stateOfOriginalLicensure` | two-letter state, e.g. TX |
| `boardAction` | Yes = disciplinary flag only |
| `aggregate` / `groupBy` | one summary row per group with a count - employment status / practice setting / specialty / highest degree / county / status / apn category / rx status |
| `maxResults` | cap records (default 200) |

**Default run = up to 200 current-RN directory records** - a representative live slice, fast for the daily auto-test. For a targeted query add a `licenseNumber` / `name` / `county` / `boardAction` filter; for a broad state view use `aggregate` (a handful of summary rows, not a full dump).

### Low cost

**From $0.001 per record** - billed only for the rows you use, with a per-run charge cap so a broad query can't surprise-bill.

Texas doesn't publish the nursing register as one table - it's **four differently-shaped datasets** (the live RN directory, the full RN history, the LVN history, the advanced-practice register) with different columns and different status vocabularies, plus date columns that read as raw `YYYYMMDD`. Unifying them into one queryable register is the work here: license numbers that only resolve by exact match, an official status set where "current" and "current-renewal-denied" are two letters apart and must never blur, and a coverage guarantee on every pull. You query a clean register where every filter means exactly what it says; the archaeology stays on our side.

### Source

- [Texas Board of Nursing - license data](https://www.bon.texas.gov/) - data.texas.gov open-data datasets `beaa-5hsm` (RN directory), `tgb2-j935` (RN history), `yjie-tuwv` (LVN), `rmdp-89uf` (advanced practice).
- Reflects the board's published record on the refresh date; not an endorsement of any nurse.

# Actor input Schema

## `type` (type: `string`):

Which BON dataset to query. rn = the currently-registered RN directory (~436k) with the deep employment / practice / specialty / degree fields. rn-history = every RN license number ever issued (~794k, shallow fields). vn = every LVN/VN license (~318k). aprn = advanced-practice recognitions (~81k, NP/CRNA/CNM/CNS incl. prescriptive authority).

## `licenseNumber` (type: `string`):

Exact license number, e.g. 1000005. Returns that nurse's record (all of their rows in the chosen register).

## `name` (type: `string`):

Nurse's last or first name (substring, case-insensitive). E.g. 'Johnson' or 'Allen'.

## `lastName` (type: `string`):

Nurse's last name (substring).

## `firstName` (type: `string`):

Nurse's first name (substring).

## `status` (type: `string`):

License status. Blank on the rn register = CURRENT (the ~436k live RN directory). Blank on the other registers = the full register. Accepted values: CURRENT / ACTIVE, DELINQUENT, INACTIVE, DECEASED, REVOKED, SUSPENDED, VOL SURRENDER, VOLUNTEER RETIRED, RETIRED. For aprn the statuses are bare words (CURRENT / DELINQUENT / INACTIVE ...). Matches the official value exactly.

## `county` (type: `string`):

County of residence (substring). Available on rn / vn / aprn registers, e.g. 'HARRIS', 'Bexar'. Populated on ~90% of rn rows.

## `stateOfOriginalLicensure` (type: `string`):

Two-letter state where the nurse first licensed (e.g. 'TX', 'CA', 'FL').

## `gender` (type: `string`):

Gender: F or M (blank = both).

## `boardAction` (type: `string`):

Only licenses with (or without) a current board action against them. Yes = disciplinary action on record. Screening flag for verification.

## `aggregate` (type: `boolean`):

When on, returns one summary record per group (see groupBy) with license count and share - instead of individual nurses.

## `groupBy` (type: `string`):

Which dimension to aggregate over. Blank = employmentStatus for rn, status otherwise. For rn: employmentStatus (full-time/part-time/...), practiceSetting, specialty, highestDegree, county, status. For vn / rn-history: status, county, gender. For aprn: apnCategory (NP/CRNA/CNM/CNS), rxStatus (prescriptive authority), county, status.

## `maxResults` (type: `integer`):

Cap the number of records pushed (0 = up to ~10k per run; each record is metered individually, so there is no per-run charge cap). An aggregate over a register has at most a few hundred groups.

## Actor input object example

```json
{
  "type": "rn",
  "status": "",
  "gender": "",
  "boardAction": "",
  "aggregate": false,
  "groupBy": "",
  "maxResults": 50
}
```

# Actor output Schema

## `recordsUrl` (type: `string`):

Texas nursing license records or aggregates - as JSON

## `datasetUrl` (type: `string`):

No description

## `runUrl` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("j0401/tx-bon-licenses").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("j0401/tx-bon-licenses").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call j0401/tx-bon-licenses --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,j0401/tx-bon-licenses"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/iIzdpfvNU1Aoqrg7g/builds/cqIOdIRgpqIZphXGA/openapi.json
