# Pennsylvania Attorney Records Scraper (`automation-lab/pennsylvania-attorney-registry-lookup`) Actor

Search official Pennsylvania attorney records and export registration, status, admission, public contact, location, pending-proceeding, and discipline indicators.

- **URL**: https://apify.com/automation-lab/pennsylvania-attorney-registry-lookup.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.80 / 1,000 attorney records

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/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

## Pennsylvania Attorney Records Scraper

Search official **Pennsylvania attorney records** from the Disciplinary Board of the Supreme Court of Pennsylvania. Export attorney registration IDs, current status, admission dates, public contact and location fields, pending-proceeding indicators, and available public discipline history as structured JSON.

Use the Actor for credential due diligence, legal-directory verification, vendor onboarding, compliance research, and scheduled registry checks. It queries the public registry anonymously; no Pennsylvania attorney account is required.

### What does this Pennsylvania attorney lookup do?

The Actor accepts one or more official registry filters and retrieves complete public detail pages for matching attorneys. Unlike a list-only export, every saved item includes detail-level admission, contact, insurance-statement, pending-proceeding, and discipline fields when the source publishes them.

Supported searches include:

- first or last name;
- one or more Pennsylvania attorney registration IDs;
- city or county;
- exact license status, such as `Active`, `Inactive`, `Suspended`, or `Disbarred`;
- combinations such as active attorneys in Philadelphia.

### Who is this Actor for?

- **Compliance teams** checking whether counsel remains registered and active.
- **Legal operations teams** maintaining outside-counsel or referral directories.
- **Investigators and researchers** reviewing public discipline indicators.
- **Recruiting and staffing teams** validating attorney credentials.
- **Data engineers** feeding public registry records into spreadsheets, databases, or review queues.

### Why use it?

The Actor combines official search results with each attorney's public detail page. It paginates the source, deduplicates by official attorney ID, respects `maxItems`, and fails visibly if the source returns an unexpected page instead of silently saving empty or challenge content.

A US residential route is used because the official site was not reliably reachable through direct or datacenter access during implementation testing. The Actor uses lightweight HTTP requests, not a browser, to control runtime and transfer.

### What data can I extract?

| Field | Meaning |
| --- | --- |
| `attorneyId` | Official Pennsylvania registration ID |
| `name` | Registry display name |
| `status` | Current registration/license status |
| `admissionDate` | Published date of admission |
| `employer` | Public employer or firm |
| `address`, `city`, `county`, `district`, `country` | Public location fields |
| `phone`, `fax` | Public contact numbers |
| `professionalLiabilityInsurance` | Source insurance statement, when present |
| `hasDiscipline` | Whether public history entries are listed |
| `disciplineHistory` | History entries using the source's labels |
| `hasPendingProceedings` | Whether pending public proceedings are listed |
| `pendingProceedings` | Pending entries using the source's labels |
| `sourceUrl` | Official detail-page URL |
| `retrievedAt` | UTC retrieval timestamp |

Source fields may be `null` when the Board does not publish a value. Older discipline documents may not be electronically available.

### How to run a Pennsylvania attorney search

1. Open the Actor input page.
2. Enter a last name, first name, city, county, status, or attorney ID.
3. Set the maximum number of records.
4. Click **Start**.
5. Open the Dataset tab to preview or export JSON, CSV, Excel, XML, or RSS.

Example search:

```json
{
  "lastName": "Smith",
  "status": "Active",
  "maxItems": 25
}
```

### Input parameters

| Input | Type | Description |
| --- | --- | --- |
| `lastName` | string | Attorney last name |
| `firstName` | string | Attorney first name |
| `attorneyIds` | string\[] | Exact official registration IDs |
| `city` | string | Public city filter |
| `county` | string | County filter |
| `status` | string | Exact official status label |
| `maxItems` | integer | Maximum records, from 1 to 1,000; default 25 |

At least one search filter or attorney ID is required. Multiple filters are sent together to the official registry.

### Output example

A current record has this shape (example identity and contact values are anonymized):

```json
{
  "attorneyId": 12345,
  "name": "Sample, Alex J.",
  "status": "Active",
  "admissionDate": "01/15/2005",
  "employer": "Sample Legal Group",
  "address": "SAMPLE LEGAL GROUP, 100 MARKET ST, PHILADELPHIA, PENNSYLVANIA 19103",
  "city": "PHILADELPHIA",
  "county": "PHILADELPHIA",
  "district": "District 1",
  "country": "UNITED STATES",
  "phone": "(215) 555-0100",
  "fax": null,
  "professionalLiabilityInsurance": "Professional liability insurance is maintained.",
  "hasDiscipline": false,
  "hasPendingProceedings": false,
  "disciplineHistory": [],
  "pendingProceedings": [],
  "sourceUrl": "https://www.padisciplinaryboard.org/for-the-public/find-attorney/attorney-detail/12345",
  "retrievedAt": "2026-01-15T12:00:00.000Z"
}
```

### How much does it cost to look up Pennsylvania attorneys?

Pay-per-event pricing includes a **$0.05 start fee** plus one attorney-record event for each complete record saved. The FREE-tier record price is **$0.0092**; higher Apify tiers receive lower per-record prices.

Examples at the FREE tier:

- 1 attorney: about **$0.0592**
- 25 attorneys: about **$0.28**
- 100 attorneys: about **$0.97**

Only successfully parsed and saved attorney records are charged as record events. Actual account-tier pricing is displayed before each run.

### Credential due-diligence workflow

Run exact attorney IDs from an onboarding list, export the dataset, and compare `status`, `admissionDate`, and discipline indicators with your internal records. Schedule the same input in Apify for recurring checks. The Actor produces timestamped snapshots; it does not itself calculate changes or send alerts.

### Directory and spreadsheet export

Search by city, county, or status, then export the default dataset as CSV or Excel. Use `attorneyId` as the stable join key. Keep `sourceUrl` and `retrievedAt` so reviewers can trace each row to its public source and retrieval time.

### API access with cURL

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/automation-lab~pennsylvania-attorney-registry-lookup/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"attorneyIds":["28662"],"maxItems":1}'
```

Add `waitForFinish=120` when a synchronous workflow is appropriate, then retrieve items from the run's default dataset.

### API access with JavaScript

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/pennsylvania-attorney-registry-lookup').call({
  city: 'Philadelphia',
  status: 'Active',
  maxItems: 25,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### API access with Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("automation-lab/pennsylvania-attorney-registry-lookup").call(
    run_input={"lastName": "Smith", "status": "Active", "maxItems": 25}
)
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)
```

### Use with Apify MCP

#### Claude Code setup

Add the Actor to Claude Code:

```bash
claude mcp add --transport http apify \
  "https://mcp.apify.com?tools=automation-lab/pennsylvania-attorney-registry-lookup"
```

#### Claude Desktop, Cursor, and VS Code setup

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

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=automation-lab/pennsylvania-attorney-registry-lookup"
    }
  }
}
```

Example prompts:

- “Look up Pennsylvania attorney ID 28662 and summarize the public status and discipline indicators.”
- “Export up to 25 active Philadelphia attorney records with registration and contact fields.”

### Reliability and troubleshooting

The Actor retries transient network, rate-limit, and server failures up to three times with residential identity rotation. It rejects malformed source responses.

**Why did my run return no records?** The source found no matches for the combined filters. Remove one filter or verify the exact status spelling.

**Why did my run fail instead of returning an empty dataset?** A source outage or unexpected page shape is treated as an error so an empty result cannot be mistaken for a clean credential check.

**Why is a contact field null?** The Disciplinary Board does not publish every field for every attorney.

### Legality and responsible use

- Maximum output is 1,000 records per run.
- This Actor accesses public records only and does not bypass login controls.
- Some discipline history before 2003 may not be electronically available.
- Public status and discipline data can change; use `retrievedAt` and follow `sourceUrl` for review.
- Output is informational and is not legal advice or a substitute for direct verification with the regulator.
- Follow applicable privacy, employment, consumer-reporting, and professional-responsibility rules. Do not use the data for harassment, spam, or unlawful discrimination.

### Related Actors

For broader US credential workflows, explore other official-registry Actors from [automation-lab on Apify](https://apify.com/automation-lab), including state bar and professional-license lookup tools. Related products are not automatically joined to this dataset.

### FAQ

**Does it require a Pennsylvania Bar account?** No. It uses the public Disciplinary Board search and detail pages.

**Can I search two fields at once?** Yes. For example, combine `city` with `status`, or first and last name.

**Does it download discipline documents?** No. It exports the public history labels and indicators shown on the attorney detail page. Linked or offline documents are outside this Actor's scope.

**Can I schedule it?** Yes. Use an Apify schedule with the same input to create timestamped snapshots for recurring verification.

**What is the stable identifier?** `attorneyId`, the official registration ID published by the source.

# Actor input Schema

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

Attorney last name, such as Smith.

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

Optional attorney first name.

## `attorneyIds` (type: `array`):

Official Pennsylvania attorney registration IDs to retrieve directly.

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

Filter records by public city, such as Philadelphia.

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

Filter records by Pennsylvania county name.

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

Exact registry status, such as Active, Inactive, Suspended, or Disbarred.

## `maxItems` (type: `integer`):

Maximum number of matching attorney records to save.

## Actor input object example

```json
{
  "lastName": "Smith",
  "maxItems": 20
}
```

# Actor output Schema

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

Default dataset view containing every complete attorney record saved by the run.

# 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 = {
    "lastName": "Smith",
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/pennsylvania-attorney-registry-lookup").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 = {
    "lastName": "Smith",
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/pennsylvania-attorney-registry-lookup").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 '{
  "lastName": "Smith",
  "maxItems": 20
}' |
apify call automation-lab/pennsylvania-attorney-registry-lookup --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,automation-lab/pennsylvania-attorney-registry-lookup"
        }
    }
}

```

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/2X9PDZpPwEnGipoqv/builds/t3h5lKarRVAeigBjF/openapi.json
