# Texas TBPELS Professional Engineer License Roster Scraper (`scrapers_lat/texas-pels-engineers-scraper`) Actor

Verify Texas professional engineers (PE) from the TBPELS roster: PE number, name, license status, disciplines, grant and expiry dates, employer and enforcement/disciplinary status. Filter by last name, PE number, discipline, employer or status. Export to JSON, CSV or Excel.

- **URL**: https://apify.com/scrapers\_lat/texas-pels-engineers-scraper.md
- **Developed by:** [Scrapers Lat](https://apify.com/scrapers_lat) (community)
- **Categories:** Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $12.75 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#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

## Texas TBPELS Professional Engineer License Roster Scraper

> Verify and enrich Texas Professional Engineers (PE) from the official Texas Board of Professional Engineers and Land Surveyors (TBPELS) license roster — by name, PE number, discipline, employer or status.

**📥 [Input](https://apify.com/scrapers_lat/texas-pels-engineers-scraper/input-schema) · 📤 [Output](https://apify.com/scrapers_lat/texas-pels-engineers-scraper/output-schema) · 💰 [Pricing](https://apify.com/scrapers_lat/texas-pels-engineers-scraper/pricing) · ▶️ [Examples](https://apify.com/scrapers_lat/texas-pels-engineers-scraper/examples)**

### What you get

For every matching Texas Professional Engineer, a clean, flat record:

- **PE license number** and full name (first, middle, last, suffix)
- **License status** — Active, Delinquent, Expired 90 Days, Expired 1 Year or Inactive
- **Disciplines** — primary discipline plus all branches the engineer is licensed in (Civil, Mechanical, Electrical, Structural, Chemical, and more)
- **License dates** — granted date and expiry date
- **Employer(s)** on record
- **Enforcement / disciplinary status** — whether the licensee has an active enforcement action and when it expires
- Source attribution and an `observedAt` timestamp

Ideal for KYB / vendor onboarding, credential verification, engineering firm due diligence, staffing and compliance workflows.

> Note: In line with Texas Senate Bill 510 (2023), the published roster no longer includes individual engineers' mailing addresses, phone numbers or e-mail addresses. This actor is a **license-verification / KYB** tool, not a contact-lead source.

### Who is it for

- Compliance, KYB and vendor-onboarding teams verifying an engineer's license before a contract
- Engineering and A/E/C firms confirming staff or subconsultant credentials
- Recruiters and staffing agencies validating PE status
- Insurers, legal and due-diligence professionals

### How to use it

1. Enter one or more **last names**, and/or exact **PE license numbers**.
2. Optionally narrow by **first name**, **discipline**, **employer** or **license status**.
3. Set **Max Engineers To Scrape** and run.
4. Export the results to JSON, CSV or Excel, or pull them via the API.

Each last name or PE number runs its own lookup, so one run can verify a whole list of engineers. Records are de-duplicated by PE number.

### FAQ

**Do I need an account or API key for the source?** No. The actor handles everything for you.

**Are phone numbers or e-mails included?** No — Texas law (SB510, 2023) removed personal contact details from the public roster.

**Will I be charged for empty or failed runs?** No. You are only charged for real engineer records returned.

**How current is the data?** The underlying roster is refreshed by the board on a regular (roughly daily) basis.

### Related actors

Browse more company, license and compliance data scrapers on the [scrapers.lat](https://apify.com/scrapers_lat) profile.

***

scrapers.lat — reliable public-data scrapers for KYB, compliance and market intelligence.

*This actor is an independent tool and is not affiliated with, endorsed by, or sponsored by the Texas Board of Professional Engineers and Land Surveyors.*

# Actor input Schema

## `lastNames` (type: `array`):

One or more engineer last names to look up. Each name runs a separate roster search. Accepts a single name too.

## `peNumbers` (type: `array`):

Optional. One or more exact PE (Professional Engineer) license numbers to verify. Each returns that single licensee.

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

Optional. Narrow the last-name search to a given first name.

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

Optional. Filter by engineering discipline, e.g. Civil, Mechanical, Electrical, Structural, Chemical.

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

Optional. Filter by employer name (partial match), e.g. HALFF, Kimley-Horn.

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

Optional. Filter by license status: Active, Delinquent, Expired 90 Days, Expired 1 Year, or INACTIVE.

## `maxEngineers` (type: `integer`):

Maximum number of engineer records to collect across all searches. Optional.

## Actor input object example

```json
{
  "lastNames": [
    "Smith"
  ],
  "maxEngineers": 30
}
```

# Actor output Schema

## `results` (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 = {
    "lastNames": [
        "Smith"
    ],
    "maxEngineers": 30
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapers_lat/texas-pels-engineers-scraper").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 = {
    "lastNames": ["Smith"],
    "maxEngineers": 30,
}

# Run the Actor and wait for it to finish
run = client.actor("scrapers_lat/texas-pels-engineers-scraper").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 '{
  "lastNames": [
    "Smith"
  ],
  "maxEngineers": 30
}' |
apify call scrapers_lat/texas-pels-engineers-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapers_lat/texas-pels-engineers-scraper"
        }
    }
}

```

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/GG0Ce51G2XwAbAHr1/builds/hbf8uKxawVDKaV1ly/openapi.json
