Texas Pharmacy License Lookup Scraper avatar

Texas Pharmacy License Lookup Scraper

Pricing

Pay per event

Go to Apify Store
Texas Pharmacy License Lookup Scraper

Texas Pharmacy License Lookup Scraper

Search official Texas pharmacist, pharmacy, intern, and technician license records and export status, dates, public location, and disciplinary indicators.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Search and export official Texas State Board of Pharmacy (TSBP) records for pharmacists, pharmacy facilities, pharmacist interns, pharmacy technicians, and technician trainees.

The Actor turns the four public daily TSBP license tables into consistent JSON records for credential verification, compliance review, recruiting, and scheduled status checks. A texas pharmacy license lookup can target an exact license number, a city, a name, a status, an expiration cutoff, or the public disciplinary-action indicator.

What does this Texas pharmacy license lookup extract?

Each run downloads only the official license categories you select, processes records as a stream, applies your filters, and saves matching records to the default Apify dataset.

You can use it to:

  • verify one pharmacy or individual license;
  • find active pharmacy facilities in a city;
  • review licenses approaching an expiration cutoff;
  • identify records whose TSBP disposition field indicates action;
  • build scheduled credential refreshes in Apify;
  • export current public records to JSON, CSV, Excel, or an API client.

The source files are updated by TSBP on business days. This Actor reports the Last-Modified value returned by each file, so consumers can see the source snapshot timestamp.

Who is this Actor for?

  • Credentialing teams checking staff or facility authorization.
  • Pharmacy operators reviewing license status and expiry dates.
  • Recruiters finding active pharmacists or technicians in a Texas market.
  • Compliance teams screening public status and disposition indicators.
  • Insurers and auditors refreshing public license evidence.
  • Data engineers loading normalized TSBP records into a warehouse or CRM.

Why use this Actor?

TSBP publishes separate CSV layouts for pharmacists, pharmacies, interns, and technicians. Their column names and category-specific fields differ.

This Actor provides:

  • one normalized output shape across all four categories;
  • streaming parsing instead of loading all large files into memory;
  • exact and combined filters before records are saved;
  • ISO-formatted issue and expiration dates;
  • explicit active/inactive normalization while preserving the source status;
  • public-address privacy handling for values marked PRIVATE;
  • bounded retries for transient download failures;
  • direct HTTPS access with no browser, proxy, login, or API key.

Official data sources

License typeOfficial TSBP fileTypical contents
pharmacistphtdsk.csvPharmacist identity, license status, dates, location, education, and disposition indicator
pharmacyphydsk.csvFacility identity, status, dates, address, phone, class, type, ownership, and responsible pharmacist
internintdsk.csvIntern identity, rank, status, hours, dates, location, and disposition indicator
techniciantechdsk.csvTechnician or trainee identity, rank, status, dates, location, and disposition indicator

The Actor uses the public downloads linked by the TSBP “Download Tables for License Verifications” page. It does not bypass authentication or access private Board systems.

Getting started

  1. Open the Actor input page.
  2. Select one or more license types.
  3. Add an exact license number, city, state, name keyword, or compliance filter.
  4. Set maxItems to the maximum number of matching records you need.
  5. Click Start.
  6. Open the License records dataset view.
  7. Export the results or connect through the Apify API.

A useful first run is:

{
"licenseTypes": ["pharmacy"],
"cities": ["Austin"],
"status": "active",
"maxItems": 25
}

Input parameters

FieldTypeDefaultDescription
licenseTypesarrayall fourCategories to search: pharmacist, pharmacy, intern, technician
searchstringemptyWords matched against name, license number, city, and county
licenseNumbersarrayemptyExact TSBP license numbers or intern file numbers
citiesarrayemptyExact city names, case-insensitive
statesarrayemptyExact state abbreviations; useful for non-resident facilities
statusstringallall, active, or inactive
disciplinarystringallall, clean, or disciplined based on the public disposition field
expiringBeforestringemptyInclusive expiration cutoff in YYYY-MM-DD format
maxItemsinteger100Maximum records saved across selected categories, from 1 to 10,000

All supplied filters are combined with AND logic. Values within cities, states, or licenseNumbers are alternatives.

Search examples

Verify one pharmacy license

{
"licenseTypes": ["pharmacy"],
"licenseNumbers": ["33239"],
"maxItems": 1
}

Find active technicians in Houston

{
"licenseTypes": ["technician"],
"cities": ["Houston"],
"status": "active",
"maxItems": 100
}

Review pharmacist discipline and expiry indicators

{
"licenseTypes": ["pharmacist"],
"disciplinary": "disciplined",
"expiringBefore": "2027-12-31",
"maxItems": 25
}

Output fields

FieldMeaning
licenseNumberTSBP license number or intern file number
entityNumberPublic TSBP entity identifier
licenseTypeNormalized category
rankIntern, technician, or trainee rank when supplied
fullNameCombined person name or pharmacy name
firstName, middleName, lastName, suffixPerson-name components
formerLastNameFormer name when the source publishes it
pharmacyNameFacility name for pharmacy records
statusStatus exactly as TSBP publishes it
statusCategoryNormalized active or inactive category
issueDate, expirationDateISO date values
disciplinaryActionBoolean derived from the public disposition-action indicator
address1, address2, city, state, zipPublic location fields
county, country, phoneAdditional public location/contact fields
pharmacyClass, ownership, pharmacyTypePharmacy facility classifications
pharmacistInChargePublished responsible-pharmacist name
pharmacistInChargeLicenseNumberPublished responsible pharmacist's license number
sourceFile, sourceUrlOfficial file provenance
sourceUpdatedAtOfficial source Last-Modified timestamp
retrievedAtActor retrieval timestamp

Fields that do not apply to a category are null.

Example output

This abbreviated record reflects the current output shape:

{
"licenseNumber": "33239",
"entityNumber": "1098834",
"licenseType": "pharmacy",
"fullName": "CHRISTUS MOTHER FRANCES HOSPITAL - CANTON",
"pharmacyName": "CHRISTUS MOTHER FRANCES HOSPITAL - CANTON",
"status": "Active",
"statusCategory": "active",
"issueDate": "2020-05-12",
"expirationDate": "2028-05-31",
"disciplinaryAction": false,
"city": "CANTON",
"state": "TX",
"zip": "75103",
"sourceFile": "phydsk.csv",
"sourceUrl": "https://www.pharmacy.texas.gov/downloads/phydsk.csv"
}

How much does it cost to look up Texas pharmacy licenses?

The Actor uses pay-per-event pricing:

  • the one-time start event is $0.00005 per run;
  • at the BRONZE tier, the item event is $0.002 per matching license record;
  • item rates decrease at higher usage tiers, from $0.0023 at FREE through $0.00056 at DIAMOND.

A one-record verification emits one start event and one item event. A 25-record compliance review emits one start event and 25 item events. A 100-record market export emits one start event and 100 item events. No item event is emitted for source rows rejected by filters, duplicate output, failed downloads, or empty results.

For cost control, set maxItems to the records you actually need and select only relevant license categories. The Apify pricing panel applies your current usage tier and is the source of truth.

Scheduled credential verification

Create an Apify schedule with the same exact-license input to refresh credential evidence daily, weekly, or monthly.

A downstream automation can:

  1. fetch the newest dataset;
  2. match on licenseType plus licenseNumber;
  3. compare status, expirationDate, and disciplinaryAction with the prior snapshot;
  4. notify a reviewer when those values change;
  5. retain run and source timestamps for an audit trail.

The Actor returns current snapshots. It does not itself store historical comparisons or send alerts.

Data pipeline integration

Use Apify integrations to send results to Google Sheets, Zapier, Make, webhooks, or cloud storage.

Recommended stable key:

licenseType + ":" + licenseNumber

Do not key only on entityNumber unless your own testing confirms that it fits your retention model.

Run with the Apify API using cURL

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~texas-pharmacy-license-lookup/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"licenseTypes": ["pharmacy"],
"cities": ["Austin"],
"status": "active",
"maxItems": 25
}'

For a synchronous response, use the run-sync-get-dataset-items endpoint when the requested timeout fits your client.

Run with JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/texas-pharmacy-license-lookup').call({
licenseTypes: ['pharmacy'],
licenseNumbers: ['33239'],
maxItems: 1,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);

Run with Python

from apify_client import ApifyClient
client = ApifyClient(token="YOUR_APIFY_TOKEN")
run = client.actor("automation-lab/texas-pharmacy-license-lookup").call(run_input={
"licenseTypes": ["pharmacist"],
"status": "active",
"cities": ["Dallas"],
"maxItems": 50,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["licenseNumber"], item["status"])

Use with MCP and AI agents

Add this Actor to Claude Code through Apify MCP:

claude mcp add --transport http apify \
"https://mcp.apify.com?tools=automation-lab/texas-pharmacy-license-lookup"

Claude Desktop, Cursor, and VS Code setup

Use this equivalent JSON configuration in Claude Desktop, Cursor, or VS Code:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=automation-lab/texas-pharmacy-license-lookup"
}
}
}

Example prompts:

  • “Verify Texas pharmacy license 33239 and summarize its current status and expiration.”
  • “Find up to 50 active pharmacy facilities in Austin from the official TSBP data.”
  • “Return pharmacist records with a public disciplinary indicator expiring through 2027.”

Performance and limits

  • TSBP files are large; a narrow filter may still require scanning an entire selected file.
  • The Actor downloads selected files sequentially to stay within its conservative memory allocation.
  • maxItems stops output once enough matching records are found.
  • TSBP controls source availability, layout, content, and update timing.
  • A no-result run is successful when no current source row matches all filters.
  • A malformed input or unavailable/invalid source response fails the run rather than returning misleading empty data.
  • Direct downloads are used; proxy configuration is neither needed nor exposed.

Troubleshooting

Why did my run return no records?

Check that all filters can be true at the same time. City and state matches are exact except for letter case. Try removing one filter or using status: "all".

Why does a record have null address fields?

Some categories omit a field, and TSBP marks some individual addresses as PRIVATE. The Actor converts that marker to null instead of publishing it as an address.

Why did a run fail during download?

The Actor retries transient network errors, HTTP 429, and temporary server errors. A persistent source failure is surfaced as a failed run so scheduled workflows can retry or alert correctly.

Does the disciplinary flag describe the order?

No. It reflects only the disposition-action indicator in the public table. Consult official TSBP records for order details and legal interpretation.

The Actor processes public licensing tables supplied by the Texas State Board of Pharmacy. Use the data for lawful verification, compliance, research, and operational purposes.

  • Follow TSBP terms, notices, and applicable law.
  • Verify material decisions against the current official record.
  • Do not treat the disposition indicator as a complete disciplinary history.
  • Do not infer protected characteristics or use public personal data for harassment.
  • Apply appropriate access controls and retention rules to exported datasets.

This Actor is an independent automation tool and is not affiliated with or endorsed by TSBP.

FAQ

Does the Actor cover all four TSBP license tables?

Yes: pharmacists, pharmacy facilities, pharmacist interns, and pharmacy technicians/trainees.

Can it look up one license number?

Yes. Set licenseNumbers and select the relevant licenseTypes value.

Can it search several categories in one run?

Yes. Results share one normalized schema in the default dataset.

Is a browser or proxy required?

No. The official public CSV files are downloaded directly over HTTPS.

Are source records real-time?

No. TSBP controls publication and says its verification databases are updated on business days. Inspect sourceUpdatedAt for the file timestamp returned during your run.

Does the Actor monitor changes automatically?

Use an Apify schedule and compare successive datasets in your workflow. The Actor produces the current snapshot but does not retain or compare prior runs.

Can I export to CSV or Excel?

Yes. Apify datasets support JSON, CSV, Excel, XML, and other export formats.

Use separate Actors when the regulator, record type, or required compliance fields differ. This Actor is intentionally specific to official Texas pharmacy licensing data.