# US Lawyers Directory Scraper (`nice_dev/us-lawyers-directory-scraper`) Actor

Attorneys from the official New York, California and Florida state bar registers: name, bar number, license status, admission, law firm, address, phone and email. Search by name, firm, city, county or bar number. Export to JSON, CSV or Excel.

- **URL**: https://apify.com/nice_dev/us-lawyers-directory-scraper.md
- **Developed by:** [Nice Dev](https://apify.com/nice_dev) (community)
- **Categories:** Lead generation, Business, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.78 / 1,000 attorneys

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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### ⚖️ What is US Lawyers Directory Scraper?

**US Lawyers Directory Scraper** extracts **attorneys from the official state bar registers of [New York](https://data.ny.gov/Transparency/NYS-Attorney-Registrations/eqw2-r5nb), [California](https://apps.calbar.ca.gov/attorney/LicenseeSearch/QuickSearch), [Florida](https://www.floridabar.org/directories/find-mbr/), [Washington](https://www.mywsba.org/PersonifyEbusiness/LegalDirectory.aspx), [North Carolina](https://portal.ncbar.gov/Verification/search.aspx), [Nevada](https://nvbar.org/for-the-public/find-a-lawyer/), [Oregon](https://www.osbar.org/members/membersearch_start.asp), [Ohio](https://www.supremecourt.ohio.gov/AttorneySearch/), [Massachusetts](https://www.massbbo.org/s/attorney-lookup), [Pennsylvania](https://www.padisciplinaryboard.org/for-the-public/find-attorney), [Wisconsin](https://lawyerhistory.wicourts.gov/), [Virginia](https://vsb.org/Shared_Content/Directory/va-lawyer-directory.aspx), [Colorado](https://www.coloradolegalregulation.com/attorney-search/), [Missouri](https://mobar.org/site/content/For-the-Public/Lawyer_Directory.aspx), [Georgia](https://www.gabar.org/member-directory/), [Illinois](https://www.iardc.org/Lawyer/Search), [Arizona](https://azbar.org/for-legal-professionals/practice-tools-management/member-directory/), [Texas](https://www.texasbar.com/AM/Template.cfm?Section=Find_A_Lawyer\&Template=/CustomSource/MemberDirectory/Search_Form_Client_Main.cfm), [Tennessee](https://www.tbpr.org/for-the-public/online-attorney-directory), [Michigan](https://dir.michbar.org/ClassicDir/Results), [Indiana](https://courtapps.in.gov/rollofattorneys/) and [Connecticut](https://lookup.jud.ct.gov/AttorneyFirm), and the federal [USPTO roster of patent attorneys and agents](https://www.uspto.gov/learning-and-resources/patent-and-trademark-practitioners/historical-rosters)**: **name, bar number, license status, admission date, law firm, address, phone and — for California, Florida, Washington, North Carolina, Nevada, Oregon, Georgia, Illinois, Arizona, Tennessee, Michigan and Indiana — the email the attorney gave the bar**. For legal marketing, recruiting, legal-tech sales, license verification and compliance.

Type a **last name**, a **law firm**, a **city** or a **county** — or list a whole state — click **Start**, and download the attorneys in JSON, CSV or Excel. No login, nothing to set up. Every attorney comes from the bar's own register: a real bar number (for Missouri, with the full profile) and a real license status, not a business listing.

### 📋 What data can you extract from the state bars?

One item per attorney and state bar, 56 fields:

| Category | What you get |
| --- | --- |
| ⚖️ **License** | state bar, bar number, license status (the bar's words + a common category), eligible to practice, admission date and year, years licensed |
| 👤 **Attorney** | full name, first / middle / last name, suffix, nickname |
| 🏢 **Law firm** | firm name, firm size (New York: counted on the register; Florida: the bar's bracket; Washington: the bar's office type and size), position in the firm |
| 📍 **Address** | mailing address (street, city, state, ZIP, county, country), physical office address (Florida) |
| 📞 **Contact** | office phone, cell phone, fax, **email** (California, Florida, Washington, North Carolina, Nevada, Oregon, Georgia, Illinois, Arizona, Tennessee, Michigan and Indiana; any bar with the email option), website (the bar's, or the firm's found by its name with the email option), the firm's social network pages (with the email option) |
| 🎓 **Background** | law school, practice areas, languages spoken, certifications, bar sections, courts admitted to |
| 🚩 **Discipline** | discipline on record, discipline summary, dated license history with case numbers (California) |
| ⭐ **Lead score** | a 0-100 note of how good a contact the attorney is, on every row, free |
| 🔔 **Monitoring** | in a monitoring run, whether the attorney is new or its license status changed since the last run, and what the status was |
| 🔗 **Links** | profile page on the bar's site, photo, vCard |

Every field, with an example, is listed in the **Output** section below.

With **Full profile** ticked (off by default), each California, Florida, Washington, North Carolina, Oregon, Ohio, Pennsylvania, Wisconsin, Colorado, Missouri, Illinois, Arizona, Texas, Tennessee, Michigan, Indiana and Connecticut attorney's profile page is read too, and sold as its own line (`attorney-details`): that is where California gives the email, phone, fax, website, full address, exact admission date, law school, practice areas, languages, certifications and license history, and Florida the county, circuit, exact admission date, discipline, law school, languages, courts, practice areas, board certifications, firm name, size and position, office address and website, and Washington the email, phone, fax, address, firm and its size, practice areas, languages, exact admission date and disciplinary actions, and North Carolina the address, work phone, email, exact admission date, board certified specialty and disciplinary actions, and Oregon the status, exact admission date and — when the member made them public — the email, company, mailing address, county, phone, fax and website, and Ohio the employer, job title, address, county, work phone, law school, languages and disciplines, and Pennsylvania the exact admission date, employer, address, phone, fax, county, district and disciplinary history, and Wisconsin the firm, the address and phone (published for about 2 % of the attorneys only) and the final orders of the discipline history, and Colorado the exact admission date, firm, business address, phone, fax and the discipline history (dated orders with their case numbers and documents), and Missouri the bar number, the exact date admitted and the state, and Illinois the status, the registered address with its firm, the phone and the email (retired and inactive lawyers publish none) and the public discipline record, and Arizona the phones, the exact admission date, law school, languages, sections, areas of practice, other jurisdictions and the discipline table, and Texas the bar number, the date licensed, the status in words, the firm size, occupation, courts of admittance, foreign language assistance, law school and the public disciplinary history, and Tennessee the address, phone and email (each only when the attorney made it public), the county, the year licensed in Tennessee, the law school and the public discipline (dated entries with their documents), and Michigan the bar number (`P41875`), the status in words, the firm and job title, address, phone, fax, email, website, the exact date licensed, law school, sections and areas of practice, and — for the few under a disciplinary status — where the details are, and Indiana the firm, address, phone and email (each only when the attorney gave it) and the public disciplinary cases (number, kind, result and date), and Connecticut the phone and the court history (dated actions with their comments, reinstatements). Without it, the attorney's line keeps what the results list gives: in New York the whole register row (there is no profile page), in California the name, status, bar number, city and admission month, in Florida the name, status, eligibility, mailing address, phones, email, photo, vCard and certifications, in Washington the name, license number, status, city and phone (the email is on the profile only), in North Carolina the name, bar number, status, city and judicial district (the contact is on the profile only), in Oregon the name, bar number and city (the status and the contact are on the profile only), in Ohio the name, bar number, status and admission date (the address, phone and employer are on the profile only), in Pennsylvania the name, attorney ID, status, city, county and whether a discipline is on record (the admission date, address and phone are on the profile only), in Wisconsin the name, bar number, firm, status, other name and the city and state of the few attorneys who gave them (the address, phone and discipline history are on the profile only), in Colorado the name, registration number and status (everything else is on the profile only), in Missouri the name, city, ZIP code and standing (the bar number and the date admitted are on the profile only), in Illinois the name, city, date admitted and whether the lawyer may practise (the status, address, phone and email are on the profile only), in Arizona the name, bar number, firm, address, email and status (the phones, admission date, law school, languages and areas of practice are on the profile only), in Texas the name, firm, address, practice areas, website, phone and status (the bar number, the date licensed, the school and the discipline are on the profile only), in Tennessee the name, bar number, city, county and status (the address, phone, email, year licensed, school and discipline are on the profile only), in Michigan the name, city and state (the bar number, status, address, phone, email, date licensed and law school are on the profile only; the status is on the row when you pick ONE **Status**), in Indiana the number, name, status, date admitted (none for a temporary admission), city and state (the firm, address, phone, email and discipline are on the profile only), in Connecticut the Juris number, name, status, date admitted, firm and address (the phone and the court history are on the profile only). Nevada has no profile page: its list already gives the whole record (name, bar number, status, admission date, firm, address, phone, fax, email, law school and discipline), so **Full profile** adds nothing there and costs nothing. Massachusetts is the same: its list gives the name, bar number, status, admission date, firm, address, phone and discipline. The USPTO roster too: its list gives the name, registration number, type of registration, firm, address and phone. Virginia as well: its list gives the name, bar ID, standing, class, city, state and ZIP code, date of license and whether the lawyer was publicly disciplined (no phone, email nor firm). And Georgia: its list gives the name, bar number, status, admission date, law school, sections and whether the lawyer has a public discipline record, and — only for the lawyers who let the directory show them — the firm, street address, ZIP code, phone, fax and email.

### ✅ Why use US Lawyers Directory Scraper?

- ⚖️ **Official registers, twenty-two states and the federal patent roster**: New York (about 434,000 registrations), California (about 290,000 licensees), Florida (about 110,000 members), Washington (about 65,000 lawyers), North Carolina (about 60,000 members), Nevada (about 17,000 bar numbers), Oregon (about 25,000 licensees), Ohio (about 107,000 attorneys), Massachusetts (over 100,000 attorneys), Pennsylvania (about 134,000 attorneys), Wisconsin (about 50,000 attorneys, former members and the deceased included), Virginia (about 76,000 lawyers, former members included), Colorado (about 60,000 attorneys, former members and the deceased included), Missouri (about 45,000 lawyers, inactive ones included) Georgia (about 74,500 lawyers, former members and the deceased included) Illinois (about 200,000 lawyers, retired and deceased included) Arizona (about 36,000 members, former members included), Texas (about 190,000 lawyers, inactive and deceased ones included), Tennessee (about 43,000 attorneys, deceased and former ones included), Michigan (about 70,800 attorneys, deceased and former ones included) and Indiana (an estimated 40,000 to 60,000 attorneys, temporary admissions included) and Connecticut (about 65,000 entries, retired and deceased attorneys included, firms left out), plus the USPTO roster of registered patent attorneys and agents (about 54,000 practitioners, from every state and abroad), in one Actor and one schema — a verified license status for every row, and the bar number (Missouri's, Illinois', Texas' and Michigan's lists give the bar's own id of the lawyer; the bar number comes with the full profile in Missouri, Texas and Michigan, in Illinois only for a lawyer with a public discipline record).
- 📧 **Emails from the bars**: California's profile email (hidden among decoys on the page, with **Full profile**), Washington's, North Carolina's and Oregon's profile emails (with **Full profile**), Illinois' profile email (with **Full profile**), and Florida's, Nevada's, Georgia's and Arizona's directory emails, read for you.
- 🧩 **No 500-row wall**: California shows 500 results per search at most; the Actor narrows a bigger search by itself (one letter more of the name at a time) until every licensee is read.
- 🎯 **Filters**: license status, admission years, practice area, language, certification, firm size (solo and small firms), with email or phone only — a filtered-out attorney is not saved and never counts in **Max attorneys**.
- ⭐ **A lead score on every row**: 0-100, from the right to practise and the contact data the row gives (email, phone, website…) — sort by it and call the best contacts first, at no extra charge.
- 🔔 **Monitoring built in**: tick **Only new attorneys**, schedule the Actor, and each run returns (and charges) only the attorneys it has never delivered before — new admissions, new members.
- 🚨 **License status changes**: add **Also return status changes** and an attorney you already have comes back when its status category changes — suspended, disbarred, resigned, deceased, reinstated — with the status it had before.
- 🔌 API, scheduling, integrations (Make, Zapier, n8n, Google Sheets…) and JSON/CSV/Excel export via the Apify platform.

### 🚀 How to scrape the state bars

1. Create a free Apify account.
2. Open **US Lawyers Directory Scraper** and pick the **State bars** (New York, California, Florida, Washington, North Carolina, Nevada, Oregon, Ohio, Massachusetts, Pennsylvania, Wisconsin, Virginia, Colorado, Missouri, Georgia, Illinois, Arizona, Texas, Tennessee, Michigan, Indiana, Connecticut, USPTO for the federal patent roster; the first three are picked by default).
3. Type a **Last name**, a **Law firm**, a **City** or a **County** — or leave them empty for the whole state. Or paste **Bar numbers** (`CA:231838`, `NY:6366066`, `FL:175684`, `WA:12333`, `NC:65222`, `NV:13493`, `OR:32769`, `OH:76691`, `MA:660511`, `PA:29441`, `WI:1140542`, `VA:82142`, `CO:15013`, `MO:36982`, `GA:890116`, `TX:24013527`, `TN:39206`, `MI:41875`, `CT:407041`, `USPTO:40478`). Tick **Full profile** to read each California, Florida, Washington, North Carolina, Oregon, Ohio, Pennsylvania, Wisconsin, Colorado, Missouri, Illinois, Arizona, Texas, Tennessee, Michigan, Indiana and Connecticut profile page (email, phone, practice areas…).
4. Set **Max attorneys** (100 by default, 0 = no limit) — and **Max attorneys per search** when you run several searches — then click **Start**.
5. Download the dataset in JSON, CSV, Excel or via API.

### 💰 How much does it cost to scrape the state bars?

This Actor uses **pay per event** pricing: **$0.89 per 1,000 attorneys** ($0.78 on the Gold plan), plus **$0.01 per run start**. The California, Florida, Washington, North Carolina, Oregon, Ohio, Pennsylvania, Wisconsin, Colorado, Missouri, Illinois, Arizona, Texas, Tennessee, Michigan, Indiana and Connecticut full profile is its own line, charged only for an attorney delivered with it:

| You pay for | No subscription | Bronze | Silver | Gold |
| --- | --- | --- | --- | --- |
| Attorney (`apify-default-dataset-item`) | $0.89 per 1,000 | $0.86 | $0.81 | $0.78 |
| Full profile read and delivered, California, Florida, Washington, North Carolina, Oregon, Ohio, Pennsylvania, Wisconsin, Colorado, Missouri, Illinois, Arizona, Texas, Tennessee, Michigan, Indiana and Connecticut (`attorney-details`, option off by default) | $0.77 per 1,000 | $0.76 | $0.75 | $0.74 |
| Email found on the firm's website (`email-enriched`, option) | $1.00 per 1,000 | $0.99 | $0.98 | $0.69 |
| Attorney dropped by a filter, profile not read (`filter-check`) | $0.04 per 1,000 | $0.03 | $0.02 | $0.019 |
| Attorney dropped by a filter after reading the profile (`detail-filter-check`) | $0.17 per 1,000 | $0.16 | $0.15 | $0.14 |
| Run start (`apify-actor-start`, one per GB of memory: one at the default) | $0.01 | $0.01 | $0.01 | $0.01 |

The firm's website found by its name, and its social network pages, are free: only an email found and delivered is charged. Platinum and Diamond pay the Gold price. Two examples at the Gold price:

- 1,000 New York attorneys: $0.78 + $0.01 = **$0.79** ($0.90 without a subscription).
- 1,000 California attorneys with their full profile and **Find the firm's email on its website**, 200 of them getting an email that way: $0.78 + $0.74 + $0.14 + $0.01 = **$1.67** ($1.87 without a subscription).

Filters the bars do not apply themselves are checked by the Actor on the attorneys it reads: an attorney you keep costs its normal price, an attorney a filter drops costs only the filter fee — filtering never costs more than taking everything. A bar that cannot give what a filter asks is not searched at all, so nothing is charged for it: New York with **With email only** or a practice area, language or certification filter. The email option is charged only for an email found, the full profile only for an attorney delivered with it — never for a New York row, an attorney a filter drops or one the run's maximum cost leaves out; a California bar number you type is always read on its profile. Platform usage (compute, proxy) is included in the price.

### ⚙️ Input

```json
{
    "states": ["NY", "CA", "FL"],
    "lastName": "Goldberg",
    "maxItems": 200
}
```

Several names and cities, active attorneys with an email only, a cap per search, only the ones not delivered before:

```json
{
    "states": ["CA", "FL"],
    "lastNames": ["Garcia", "Nguyen"],
    "cities": ["Los Angeles", "Miami"],
    "statuses": ["active"],
    "requireEmail": true,
    "maxItemsPerQuery": 50,
    "onlyNew": true,
    "trackStatusChanges": true,
    "stateKey": "la-miami"
}
```

By bar number (a California range reads every licensee of the range):

```json
{
    "barNumbers": ["CA:231838", "NY:6366066", "FL:175684", "CA:300000-300099"]
}
```

| Field | Notes |
| --- | --- |
| `states` | `NY`, `CA`, `FL`, `WA`, `NC`, `NV`, `OR`, `OH`, `MA`, `PA`, `WI`, `VA`, `CO`, `MO`, `GA`, `IL`, `AZ`, `TX`, `TN`, `MI`, `IN`, `CT`, `USPTO`: the bars searched (New York, California and Florida by default). |
| `lastName`, `lastNames` | Last name, or its first letters (`Goldb`); `lastNames` adds more names (one search each). Empty = every name. |
| `firstName` | First name, or its first letters. |
| `nameMatch` | `beginsWith` (default), `exact`, or `soundsLike` (phonetic search in California and Florida). |
| `firmName` | A word of the law firm's name (`Latham`). |
| `city`, `cities` | City of the attorney's address (`New York`, `Los Angeles`, `Miami`); every name is searched in every city. |
| `counties` | County by name (`Kings`, `Los Angeles`, `Miami-Dade`), searched in the bars that have it (Washington's counties when Washington is picked). |
| `zipCodes` | 5-digit ZIP codes (`10017`) — New York, California and Washington (Florida's directory has no ZIP search). |
| `barNumbers` | `STATE:number` (`CA:231838`), a California range (`CA:300000-300099`, up to 10,000 numbers per range) or a California / Florida / Washington profile URL (`WA:12333`: a Washington lawyer's license number; `NC:65222`: a North Carolina bar number; `OR:32769`: an Oregon bar number; `OH:76691`: an Ohio attorney number; `PA:29441`: a Pennsylvania attorney ID; `CO:15013`: a Colorado registration number; `CT:407041`: a Connecticut Juris number (the attorney page itself: charged as a profile); `NV:13493`: a Nevada bar number, `MA:660511`: a Massachusetts BBO number, `USPTO:40478`: a USPTO registration number, `WI:1140542`: a Wisconsin bar number, `VA:82142`: a Virginia bar ID and `MO:36982`: a Missouri bar number and `GA:890116`: a Georgia bar number and `TX:24013527`: a Texas bar number `TN:39206`: a Tennessee bar number and `MI:41875`: a Michigan bar number (the digits, without the letter P), all ten looked up as a search; Nevada, Massachusetts, USPTO, Virginia and Georgia have no profile page; Illinois, Arizona and Indiana have no search by bar number). Replaces the searches above. |
| `maxItems` | Stop after this many attorneys for the whole run (`0` = unlimited). |
| `maxItemsPerQuery` | Cap for EACH search (bar × name × place). `0` = no per-search cap. |
| `extractDetails` | Full profile: read each California, Florida, Washington, North Carolina, Oregon, Ohio, Pennsylvania, Wisconsin, Colorado, Missouri, Illinois, Arizona, Texas, Tennessee, Michigan, Indiana and Connecticut profile page (default off; charged per attorney delivered with it, see the pricing). |
| `enrichEmails` | Look for the firm's email on its website when the bar gives no email. The website is the bar's — or, when the bar gives none (New York never does), the firm's own site, looked for by the firm's name and city: it is then delivered too (output column websiteSource = search), with or without an email on it. The email is the **firm's** address (often a general mailbox such as info@ or contact@), never guaranteed to be the attorney's. Only an address of the firm is kept: on the website's own domain, or one that carries the firm's name — never a web designer's or a font's credit. The firm's social network pages found on those pages come with it, at no extra charge. Needs **Full profile** ticked (in New York, which has no profile page, it costs nothing). |
| `statuses` | `active`, `inactive`, `suspended`, `disbarred`, `resigned`, `deceased`, `other`. |
| `practiceAreas`, `languages`, `certifications` | By name (`Immigration`, `Spanish`, `Family Law`): California, Florida and Washington (no certifications there); Arizona (from the profile, all three: areas of practice, languages, board certified specialties); Texas (practice areas, and languages from the profile; no certifications); Michigan (practice areas, from the profile of the attorneys who gave them; no languages nor certifications); in North Carolina only `certifications` (board certified specialties); Ohio only `languages` (Spanish, Russian, Arabic, Mandarin, French, from the profile); Nevada, Oregon, Massachusetts, Pennsylvania, Wisconsin, Virginia, Colorado, Missouri, Georgia, Illinois, Tennessee, Indiana and Connecticut have none of them; the USPTO roster has only `certifications` (the registration: `Registered patent attorney`, `Registered patent agent`, `Limited recognition`, `Registered design agent`). |
| `admittedFromYear`, `admittedToYear` | Admission years (`2020`). |
| `maxFirmSize` | Solo practitioners and small firms: at most this many attorneys in the firm (`5`). |
| `requireEmail`, `requirePhone` | Only attorneys with an email / a phone. |
| `excludeKeywords` | Drop attorneys whose name or firm contains one of these words (`Legal Aid`). |
| `onlyNew`, `stateKey`, `resetState` | Monitoring: only the attorneys never delivered under this memory key; `resetState` forgets the memory. |
| `trackStatusChanges` | With `onlyNew`: an attorney already delivered under this memory key also comes back when the category of its status changed (see Monitoring below). |
| Advanced | `proxyConfiguration` (Apify proxy by default, included in the price; the residential proxy is not available), `maxConcurrency` (when `enrichEmails` has to look up firm websites, the run raises it to at least 12 pages at once, unless you set it below its default of 4), `maxRequestsPerMinute`, `minRequestIntervalMs`, `maxRequestRetries`, `debugLog`. |

### 📦 Output

One attorney of the Florida Bar with its full profile (name, contact and numbers replaced by look-alike values):

```json
{
    "id": "FL-1234567",
    "url": "https://www.floridabar.org/mybarprofile/1234567",
    "state": "FL",
    "barNumber": "1234567",
    "name": "Jane Quinn Doe",
    "firstName": "Jane",
    "middleName": "Quinn",
    "lastName": "Doe",
    "suffix": null,
    "nickname": null,
    "status": "Member in Good Standing",
    "statusCategory": "active",
    "eligibleToPractice": true,
    "admissionDate": "1999-09-14",
    "admissionYear": 1999,
    "yearsLicensed": 27,
    "firmName": "Doe Law, P.A.",
    "firmSize": "2-5",
    "firmPosition": "Managing Partner",
    "address": "100 Main St Ste 205, Orlando, FL 32801-1234",
    "street": "100 Main St Ste 205",
    "city": "Orlando",
    "addressState": "FL",
    "zip": "32801-1234",
    "county": "Orange",
    "country": "United States",
    "physicalAddress": "100 Main St Ste 205, Orlando, FL 32801-1234",
    "phone": "407-555-0100",
    "cellPhone": null,
    "fax": "407-555-0101",
    "email": "jdoe@doelaw.com",
    "emailSource": "bar",
    "website": null,
    "websiteSource": null,
    "socialLinks": [],
    "lawSchool": "University of Florida, Fredric G. Levin College of Law, 1999",
    "practiceAreas": [],
    "languages": ["English", "Portuguese", "Spanish"],
    "certifications": [],
    "sections": [],
    "courts": ["U.S. District Court, Middle District of Florida", "Florida"],
    "hasDiscipline": false,
    "disciplineSummary": "None",
    "licenseHistory": [],
    "judicialDepartment": null,
    "circuit": "09",
    "nextRegistration": null,
    "photoUrl": null,
    "vcardUrl": "https://www.floridabar.org/app/plugins/tfb/public/vcard.php?mid=1234567",
    "leadScore": 90,
    "sourceName": "The Florida Bar",
    "changeType": null,
    "previousStatus": null,
    "previousStatusCategory": null,
    "searchUrl": "https://www.floridabar.org/directories/find-mbr/?lName=doe&pageNumber=1&pageSize=50",
    "scrapedAt": "2026-09-26T03:00:00.000Z"
}
```

You can download the dataset in various formats such as JSON, HTML, CSV or Excel.

#### All 56 fields

| Fields | What you get |
| --- | --- |
| `id`, `url`, `state`, `barNumber` | `FL-1234567`, the profile page, `FL`, `1234567` |
| `name`, `firstName`, `middleName`, `lastName`, `suffix`, `nickname` | the attorney's name as the bar writes it |
| `status`, `statusCategory`, `eligibleToPractice` | `Member in Good Standing`, `active`, `true` |
| `admissionDate`, `admissionYear`, `yearsLicensed` | `1999-09-14` (New York: the year only), `1999`, `27` |
| `firmName`, `firmSize`, `firmPosition` | `Doe Law, P.A.`, `2-5`, `Managing Partner` |
| `address`, `street`, `city`, `addressState`, `zip`, `county`, `country`, `physicalAddress` | the mailing address, split, and the office address (Florida) |
| `phone`, `cellPhone`, `fax`, `email`, `emailSource`, `website`, `websiteSource`, `socialLinks` | contact; `emailSource` = `bar` or `website`; `websiteSource` = `bar`, or `search` (the firm's website found by its name and city with the email option); `socialLinks` = the firm's LinkedIn, Facebook, Instagram, X, YouTube, TikTok pages found on its website (up to 10, empty without the email option) |
| `lawSchool`, `practiceAreas`, `languages`, `certifications`, `sections`, `courts` | background (California and Florida) |
| `hasDiscipline`, `disciplineSummary`, `licenseHistory` | discipline; dated license history with case numbers (California) |
| `judicialDepartment`, `circuit`, `nextRegistration` | New York department, Florida circuit, New York renewal month |
| `leadScore` | 0-100 contact score, free (see below) |
| `changeType`, `previousStatus`, `previousStatusCategory` | monitoring with `trackStatusChanges`: `new` or `statusChanged`, the bar's words for the status at the previous delivery (`Currently registered`), its category (`active`); `null` in any other run |
| `photoUrl`, `vcardUrl`, `sourceName`, `searchUrl`, `scrapedAt` | links, register, the search it was found by, ISO timestamp |

#### Lead score

`leadScore` is a note from 0 to 100 on every attorney, with no extra charge: **able to practise now 30** (an attorney who cannot practise never scores above 40), **email 25**, **phone 15**, **website 10**, mailing address 5, law firm 5, licensed 5 years or more 5, no discipline on record 5. Sort or filter on it to call the best contacts first. New York publishes no email, website or discipline record, so its rows score 60 at most (70 with the firm's website, 95 with its email too, found by the email option); a California row read without **Full profile** has no contact data and scores low. An email found on the firm's website (`enrichEmails`) counts in the note.

### 💡 Tips

#### How to get more results

Leave the name empty and pick a city or a county to list every attorney there, or leave everything empty for a whole state (New York: the whole register; California: split automatically past 500; Florida: county by county; Washington: page by page, no limit; North Carolina: split automatically past 250, by name; Nevada: 999 searches, one per three digits of the bar numbers; Oregon: six searches, one per vowel and `y`, 20 attorneys per page; Ohio: split automatically past 1,000, by name, over a thousand searches; Massachusetts: not read as a whole register, it needs a last name or a first name; Pennsylvania: one search per status, 23 of them, 100 attorneys per page; Wisconsin: 26 searches, one per first letter of the last name, up to about 5,000 attorneys each; Virginia: the whole register, 50 lawyers per page, about 1,500 pages; Colorado: six searches, one per vowel and `y`, up to 36,000 attorneys each; Missouri: split automatically past 250, by name, over a thousand searches; Georgia: the whole register, 2,000 lawyers per page, about 38 pages; Illinois: 26 searches, one per first letter of the last name, 100 lawyers per page, about 2,000 pages; Arizona: the whole register, 500 members per page, about 73 pages; Texas: 26 searches, one per first letter of the last name, 500 lawyers per page, split further by one more letter when the site finds too many; Tennessee: 26 searches, one per first letter of the last name, 50 attorneys per page, up to about 4,200 attorneys each; Michigan: split automatically past 2,500, by name; Indiana: a name, a first name or a city is needed, 5,000 attorneys at most per search; Connecticut: 26 searches, one per first letter of the last name, 200 per page, firms left out; USPTO: the whole roster, 1,000 practitioners per page). Set `maxItems` to `0` for no limit.

#### How to reduce costs

The price is per attorney, so the levers are `maxItems`, `maxItemsPerQuery`, the filters (a filtered-out attorney costs only the filter fee) and `onlyNew` for recurring runs (you never pay twice for the same attorney). Leaving **Full profile** off (the default) makes runs faster and drops the profile line (`attorney-details`), but California then has no contact data.

#### Several searches in one run

Fill `lastNames` and / or `cities` / `counties`: the Actor runs one search per name × place in each state bar picked (3 names × 4 cities × 3 bars = 36 searches, up to 500 per run). An attorney found by several searches is saved — and charged — once. Set `maxItemsPerQuery` to give every search its own cap.

#### Monitoring: only the new attorneys

Tick **Only new attorneys** (`onlyNew`) and schedule the Actor. The first run returns everything; each later run skips the attorneys already delivered: they are not saved, not charged, and their profile page is not even opened. The memory lives in a named key-value store of your account (`us-lawyers-directory-scraper-seen`, up to 150,000 attorneys per key) and is only updated with attorneys that really reached the dataset. Give each schedule its own `stateKey`, and tick `resetState` once to start over. No state bar lists its attorneys by date, so a search is read page by page and stops after 20 results pages in a row where every attorney was already delivered (one new attorney on a page starts the count again): a new attorney listed further down is not found. An attorney your filters drop is checked (and charged the filter check) once: the next runs with the same filters skip it for free; change a filter, or tick `resetState`, to check them again.

#### Monitoring: license status changes

Tick **Also return status changes** (`trackStatusChanges`) together with **Only new attorneys**: an attorney a previous run delivered under the same memory key comes back when the **category** of its status changed — `active`, `inactive`, `suspended`, `disbarred`, `resigned`, `deceased` or `other`. Use it to spot attorneys who were suspended, disbarred or who resigned, and those who were reinstated. A returned attorney carries `changeType` = `statusChanged`, its new status, and `previousStatus` / `previousStatusCategory` (what the bar said when the attorney was last delivered); an attorney never delivered before is `new`, with the two `previous` fields empty. One that did not change stays out, as with **Only new attorneys** alone: not saved, not charged, its profile page not opened.

- **The category counts, the words do not.** New York flips an active attorney between *Currently registered* and *Due to reregister within 30 days of birthday*: both are `active`, so nothing comes back.
- **Nothing extra to pay.** A row that comes back is one attorney, charged at the normal attorney price (and the profile line if **Full profile** is on); there is no separate event for a change.
- **The list is enough for most bars.** New York, California, Florida, Washington, North Carolina, Nevada, Ohio, Massachusetts, Pennsylvania, Wisconsin, Virginia, Colorado, Missouri, Georgia, Arizona, Texas and Tennessee give the status on their results lists, so no profile page is needed to see a change. Oregon gives it on the profile page only, so a status change of an Oregon attorney is never seen. Illinois' list says only whether the lawyer may practise: a change is seen as `active` ↔ `other`. Michigan's list gives the status only when you pick ONE **Status**; otherwise a change is seen on the profile only.
- **The whole search is read.** A status can change anywhere in a register, so unlike **Only new attorneys** alone this mode never stops after pages with nothing new: it reads every results page of its searches. The memory keeps up to 150,000 attorneys per memory key — watch a city, a county, a firm or a list of names, one memory key each, rather than a whole state.
- **A cap leaves changes for the next run.** **Max attorneys** (100 by default) counts the attorneys a run returns, new or changed: those it did not reach come back at the next run. Set it to `0` to get every change at once.
- **The first run with this option** delivers the attorneys you never had as `new`; an attorney delivered by an earlier run without it is not a change: its status is read once and compared from the next run on.
- **Do not filter on the status you watch.** A **Status** filter judges the attorney's new status: with `suspended` only, an attorney reinstated is dropped by the filter and is not returned, and one who just became suspended, never delivered before, comes back as `new`. Leave the status filter empty to see every move.

### 🔌 Integrations and API

Call the Actor via the Apify API, the JavaScript or Python clients, or connect it with integrations and webhooks (Make, Zapier, n8n, Google Sheets, Slack, Airtable, HubSpot…). The dataset can be fetched as JSON or CSV from any tool.

### 🤖 Use with AI agents (MCP)

AI agents (Claude, ChatGPT, Cursor…) can find and run this Actor through the [Apify MCP server](https://mcp.apify.com), billed to their Apify account like any run. It returns one item per attorney of the New York, California, Florida, Washington, North Carolina, Nevada, Oregon, Ohio, Massachusetts, Pennsylvania, Wisconsin, Virginia, Colorado, Missouri, Georgia, Illinois, Arizona, Texas, Tennessee, Michigan, Indiana or Connecticut bar, or of the USPTO roster. Actor id: `nice_dev/us-lawyers-directory-scraper`; MCP server with this Actor only: `https://mcp.apify.com/?tools=fetch-actor-details,nice_dev/us-lawyers-directory-scraper`.

Smallest input, for a cheap first call:

```json
{
    "states": ["NY"],
    "lastName": "Goldberg",
    "maxItems": 10
}
```

Key output fields: `name`, `state`, `barNumber`, `statusCategory`, `firmName`, `city`, `phone`, `email`, `leadScore` and `admissionYear`.

Cost: see the pricing section above. Cap each call with `maxItems` and, through the API, with the run option `maxTotalChargeUsd`.

### ❓ FAQ

#### Is it legal to scrape the state bar registers?

The Actor only reads what the New York State Unified Court System, the State Bar of California, The Florida Bar, the Washington State Bar Association, the North Carolina State Bar, the State Bar of Nevada, the Oregon State Bar, the Supreme Court of Ohio, the Massachusetts Board of Bar Overseers, the Disciplinary Board of Pennsylvania, the Wisconsin Court System (Office of Lawyer Regulation), the Virginia State Bar, the Colorado Office of Attorney Regulation Counsel, the Missouri Bar, the State Bar of Georgia, the Illinois Attorney Registration and Disciplinary Commission, the State Bar of Arizona, the State Bar of Texas, the Tennessee Board of Professional Responsibility, the State Bar of Michigan, the Indiana Supreme Court (Roll of Attorneys) and the Connecticut Judicial Branch (Attorney/Firm Look-up) publish, and the US Patent and Trademark Office publishes in its public roster of practitioners, to any anonymous visitor for license verification. It logs in to nothing and solves no captcha. Results contain personal data of professionals (name, work address, phone, email), protected by privacy laws such as the CCPA or the GDPR: do not store it without a legitimate reason. Email outreach must follow CAN-SPAM (identify yourself, offer an opt-out), and law firms marketing through this list must follow the attorney advertising rules of their state. The Florida Bar states that publishing a lawyer's contact information does not mean the lawyer agreed to receive unsolicited communications. You are responsible for using the data in compliance with each bar's terms of use and applicable law. This Actor is not affiliated with any state bar or court.

#### Does it need a login or a proxy?

No login. The proxy is included in the price: leave the default setting (the residential proxy is not available). The Florida Bar, the Tennessee directory, the Indiana Roll of Attorneys and the Connecticut look-up turn away visitors from outside the United States: if you use your own proxies, they must be in the US. A request a bar turns away is retried at once on a new proxy session, up to 10 times on top of the retries (without a proxy, after a pause of 5 seconds, doubled at each retry up to 150 seconds).

#### Is the data safe to open in Excel or to show on a web page?

Names, firms and addresses are copied as the bars publish them. A text can begin with `-`, `+`, `=` or `@`: Excel and Google Sheets may read such a cell of a CSV file as a formula or as a number. The Actor leaves the text as it is, so that the JSON and the API give the real value: when you open a CSV, import these columns as text. Every URL field holds an http(s) URL or null. On a web page, escape every field like any text written by a stranger.

#### Known limitations

- An email found on the firm's website (`emailSource` = `website`) is the firm's address, not necessarily the attorney's: general, office or person mailboxes, the general ones first (`info@`, `contact@`), recruiting and technical ones (`jobs@`, `webmaster@`) last.
- New York publishes no email, website, practice area, language nor discipline history (a filter on them skips New York — **With email only** too: it looks at the bar's email, not at the one the email option finds); its admission date is the year only.
- The firm's website found by its name (`websiteSource` = `search`) is kept only when it is clearly the firm's: a firm with no site of its own, or only a directory page, gets none. A register row that is no law firm (a bank, an agency, a court) gets that organisation's general address.
- California: judges and deceased licensees have no public profile page — their row (name, status, number, city, admission month) is returned without contact data.
- Florida has no ZIP code search: use cities or counties.
- Washington has no firm search (a run with a firm name does not search it) and no certifications; its list rows have no email, tick **Full profile** to get it.
- North Carolina shows at most 250 attorneys per search and searches names by their first letters only: a larger search is split by name automatically (a run over a whole state sends several hundred searches). It has no firm, county or ZIP code search (a run with a firm name does not search it), only the city; its list rows have no phone nor email (**Full profile** reads them, three requests per attorney), and it has no practice areas nor languages.
- Nevada has no profile page (its list is the whole record, so **Full profile** is never charged), no county nor ZIP code search, and no practice areas, languages, certifications nor firm size; it shows at most 500 attorneys per search, so a large last name is split by one more character and a large city by the digits of the bar numbers (a run over a whole state sends 999 searches). The text it searches is also looked up in the bar number, the firm and the city, so a last name search keeps only the attorneys whose last name is that name.
- Oregon has no firm, county or ZIP code search (a run with a firm name does not search it), only the city, and no practice areas, languages nor certifications. Its list gives the name, bar number and city only: the status, email, phone, address and admission date need **Full profile** (two requests per attorney), and a **Status**, **With email only** or admission years filter needs it too. Oregon publishes the contact the member chose to make public, so some profiles have no email. It looks a name up as a piece of any name and the Actor keeps the last names that begin with it; a whole state is read through six searches (the names that contain `a`, `e`, `i`, `o`, `u` or `y`), so a last name with none of those letters (such as `Ng`) is reached only by searching it by name. As its list gives no status, **Also return status changes** never sees a change in Oregon. The USPTO roster gives every practitioner the same status (registered), so there is no change to follow there either.
- Ohio has no firm nor county search (a run with a firm name does not search it), only the city and the ZIP code, and no email, practice areas nor certifications. Its list gives the name, bar number, status and admission date: the address, employer, work phone, law school, languages and disciplines need **Full profile**, and so does a **With phone only** or language filter. It shows at most 1,000 attorneys per search, so a larger search is split by one more letter of the last name (a run over a whole state sends over a thousand searches). The court also looks a last name up inside the former names, so the Actor keeps the attorneys whose current last name begins with it. A deceased attorney's list row says `Not Required`; the profile says `Not Required - Deceased`. The directory is reachable from the United States only: keep the default proxy.
- Massachusetts has no firm, city, county nor ZIP code search (a run with a firm name or a place asked does not search it) and no email, practice areas, languages nor certifications. Its list is the whole record (there is no profile page, so **Full profile** is never charged) and shows the address and phone only when the attorney gave them. It shows at most 200 attorneys per search and its name search is approximate (a longer last name finds the same people, a first name of one or two letters is read as an initial), so the Actor cannot narrow a search that fills the 200 rows: it returns them and the log says some may be missing — for a very common last name (Smith, Sullivan…) give the first name too. The Actor keeps the attorneys whose last name begins with the one asked. A run with no name at all leaves Massachusetts out (and has nothing to search when it is the only bar).
- Pennsylvania has no firm nor ZIP code search (a run with a firm name does not search it; the city and the county are searched), and no email, practice areas, languages nor certifications. Its list gives the name, attorney ID, status, city and county: the admission date, employer, address, phone, fax and disciplinary history need **Full profile** (one request per attorney), and so does a **With phone only** or admission years filter. It has no cap: a whole state is read through one search per status (23), 100 attorneys per page (6 to 12 seconds a page). The board answers visitors from the United States only: keep the default proxy.
- Wisconsin has no ZIP code nor county search (a ZIP code or county asked leaves it out), and no email, admission date, practice areas, languages nor certifications. The city is searched as typed (no part of a name) and the firm name as a piece of the name (a common one, such as `Foley`, can time out). Its list gives the name, bar number, firm, status and other name, and the city and state for the few attorneys who gave them; the address, phone and discipline history need **Full profile** (one request per attorney), and so does the **With phone only** filter. The register lists every lawyer ever admitted (former members and deceased included): pick the **Status** `active` to keep the current ones. The court stops a search that is too wide after about 25 seconds, so a whole state is read as 26 searches by first letter of the last name, split further if needed; the name search also looks in the other names a lawyer is known by, and the Actor keeps the attorneys whose current last name begins with the one asked.
- Virginia has no city, county, ZIP code nor firm search (a run with one of them leaves it out) and no email, phone, firm, street address, practice areas, languages nor certifications. Its list is the whole record (there is no profile page, so **Full profile** is never charged): the name, bar ID, status, class, city, state and ZIP code of the mailing address, the date of license and whether the lawyer was publicly disciplined. `status` joins the bar's standing with its class and type (`In Good Standing`, `In Good Standing — Retired`, `Former Member — Deceased`, `Not in Good Standing — Administrative Suspension`); the bar's own test rows are left out. The bar looks the name up as a piece of the full name, so the Actor keeps the lawyers whose first name begins with the first name asked and whose last name — the last words of the name — begins with the last name asked (a hyphenated name such as `Anaya-Smith` does not begin with `Smith`). A whole register is about 76,000 lawyers, 50 per page (about 1,500 pages, a few seconds each): pick a **Status** to read fewer, or set `maxItems`.
- Colorado has no city, county, ZIP code nor firm search (a run with one of them leaves it out) and no email, practice areas, languages nor certifications. Its list gives the name, registration number and status: the admission date, firm, business address, phone, fax and discipline history need **Full profile** (one request per attorney), and so do the **With phone only** and admission years filters. The register lists every attorney ever admitted (former members and the deceased included): pick the **Status** `active` to keep the current ones. The site looks a name up as a piece of the name, so the Actor keeps the attorneys whose last name (and first name, when given) begins with what was typed. A run with no name is read through six searches (the names that contain `a`, `e`, `i`, `o`, `u` or `y`), each up to 36,000 attorneys, so a last name with none of those letters is reached only by searching it by name. The Actor keeps 10 seconds between two requests to this site, so a run reads about 360 pages an hour: a search is one page, each profile one more — keep **Full profile** off, or `maxItems` low, for a quick look.
- Missouri has no county nor firm search (a run with a firm name does not search it), only the city (a piece of its name) and the ZIP code (its start), and no email, phone, firm, practice areas, languages nor certifications. Its list gives the name, city, ZIP code and standing (`Good Standing` or `Inactive`, with a note for a temporary license and an out-of-state member) — but not the bar number: `barNumber` is null, and the item's `id` is built on the Missouri Bar's own id of the lawyer, until **Full profile** reads the attorney page (one request per attorney), which gives the bar number, the date admitted and the state; **With phone only** never matches, and an admission years filter needs Full profile. A search shows 250 lawyers at most, so a larger one is split by one more letter of the last name (a run over a whole state sends over a thousand searches). The directory looks a name up as a piece of the name, so the Actor keeps the lawyers whose last name (and first name, when given) begins with what was typed. A bar number is looked up as a search. The voluntary lawyer finder of the same site (firm, phone and email of the lawyers who signed up) is not read.
- Georgia has no county search (a county asked leaves it out), and no practice areas, languages nor certifications (the sections a lawyer belongs to are in `sections`). Its list is the whole record (there is no profile page, so **Full profile** is never charged): the name, bar number, status, admission date, law school, sections, whether a public discipline record exists, the city and state — and, only for the lawyers the directory shows them for, the firm, street address, ZIP code, phone, fax and email. A lawyer who asked not to be published, a deceased one and one listed for the email only have no firm, street, ZIP code, phone nor fax; a lawyer who hid the email has none (so **With email only** and **With phone only** keep the lawyers who let them be shown), and a firm or ZIP code search finds only the lawyers whose firm or ZIP code is shown. The directory looks a last name up in the former names too, so the Actor keeps the lawyers whose current last name begins with the one asked; the city and the ZIP code are searched by their first characters and the firm by a piece of its name. There is no mobile phone, county, former name nor nickname. A whole register is about 74,500 lawyers, 2,000 per page: pick a **Status** to keep fewer, or set `maxItems`.
- Illinois has no ZIP code, county nor firm search (a run with one of them leaves it out), no search by bar number, and no practice areas, languages nor certifications. The lookup needs a last name: a run with none is read through 26 searches, one per first letter of the last name, and a last name searched is also looked up in every word of the name (`Smith` finds `Bruns-Smith`), so the Actor keeps the lawyers whose last name begins with the one asked. Its list gives the name, the city and state of the registered address, the date admitted and whether the lawyer may practise — not the bar number, nor the status: `barNumber` is null (the item's `id` is built on the commission's own id of the lawyer) and the status, the registered address with its firm, the phone, the email and the discipline record need **Full profile** (one request per attorney), and so do a **Status**, **With email only** or **With phone only** filter. A lawyer with a public discipline record gets the ARDC number with the profile. Retired, inactive and deceased lawyers publish no address, phone nor email. The register lists every lawyer ever admitted: pick the **Status** `active` to keep the current ones.
- Arizona has no county search and no search by bar number (a run with a county asked leaves it out), and no firm size. The directory looks a last name, a first name, a city and a ZIP code up by their first characters and a firm by a piece of its name. Its list gives the name, bar number, firm, address, email (about one member in eight has one) and status; the phones (a direct line, a cell phone), the exact admission date, law school, languages, sections, areas of practice, board certified specialties, the other jurisdictions and the discipline table need **Full profile** (one request per attorney), and so do a **With phone only**, admission years, practice area, language or certification filter. The register lists former members (resigned, retired, suspended, disbarred) but not the deceased, who come only when the **Status** `deceased` is picked. A whole register is about 36,000 members, 500 per page: pick a **Status**, a city or set `maxItems` to read fewer.
- Texas has no email (the directory sends a message through a form), no firm size filter and no certifications. Its list gives the name (with the nickname the lawyer chose), firm, practice address, practice areas, website, phone (when the lawyer gave one) and the status — not the bar number: `barNumber` is null (the item's `id` is built on the State Bar's own id of the lawyer) until **Full profile** reads the attorney page (one request per attorney), which gives the bar number, the date licensed, the status in words (with the reason of a non-practicing or not eligible status), the firm size, occupation (in `firmPosition`), courts of admittance, foreign language assistance, law school and the public disciplinary history; an admission years, language or **With email only** filter needs it, and **With phone only** is decided on the list. A bar number is looked up as a search. The directory looks the last name, first name, city and ZIP code up by their first characters and the firm by a piece of its name; the county is searched by name (Texas counties only). It refuses a search that finds too many lawyers: the Actor then narrows it by one more letter of the last name (a run with no name at all is read through 26 searches, one per first letter). Choose a **Status** to read fewer: `active` alone is asked of the directory as the lawyers eligible to practise.
- Tennessee has no ZIP code nor firm search (a run with one of them leaves it out), and no practice areas, languages, certifications, firm nor firm size. The directory looks the last name, first name and city up by their first characters; the county is searched by name (Tennessee counties only). Its list gives the bar number, name, city, county and status; **Full profile** reads the attorney page (one request per attorney) and adds what the attorney made public: the address, phone and email (12 of the 18 attorneys read gave an email, 4 an address), the year licensed in Tennessee, the law school and the public discipline (dated entries with their documents, the case number when the title gives one) — a deceased attorney's address is not an address and is left empty. An admission years, **With email only** or **With phone only** filter needs it. A bar number is looked up as a search. The directory turns away every IP outside the United States and some others, and cuts an IP after about 15 requests: the Actor uses each proxy IP for 5 requests only and reads a refused page again on another one, which makes it slower than the other bars. A run with no name, first name or place is read through 26 searches, one per first letter of the last name. The register holds the deceased and former attorneys too: pick a **Status** to keep the active ones.
- Michigan has no ZIP code search (a ZIP code asked leaves it out), and no languages nor certifications. The directory looks the last name, first name and city up by their first characters, the firm by a piece of its name, and the county by name (Michigan counties only; `Grand Traverse` for its `Gd. Traverse`). Its list gives the name, city and state — not the bar number nor the status: `barNumber` is null (the item's `id` is built on the State Bar's own id of the lawyer) until **Full profile** reads the attorney page (one request per attorney), which gives the bar number with its `P` (`P41875`), the status in words, the firm, job title, address, phone, fax, email (published for about half of the attorneys), website, the date licensed, law school, sections and areas of practice. A **Status** asked is searched in the directory: the attorneys of the other statuses are not read, and with ONE status picked the rows carry it. A bar number is looked up as a search (`MI:41875`, the digits only). A search that finds over 2,500 attorneys is split by the start of the last name; a run with no name is read through those pieces. An admission years, practice area, **With email only** or **With phone only** filter needs the profile. Choose a **Status** to read fewer: the register holds the deceased, emeritus and resigned attorneys too.
- Indiana has no county, ZIP code nor firm search (a run with one of them leaves it out) and no search by bar number (its numbers carry the admission: `26377-49`), practice areas, languages nor certifications. The directory looks the last name and the first name up as a PIECE of the name (the first word of the first name): the Actor keeps the attorneys whose last name has a word that begins with the one asked (`Smith` keeps `Albenze-Smith`, not `Arrowsmith`) and whose first name begins with the first name asked; **Name match** `soundsLike` keeps everything the directory finds. The city must be spelled as the directory writes it (`Indianapolis`). A last name, a first name or a city is needed (a run with none leaves Indiana out). The directory shows at most 5,000 attorneys per search and cannot be narrowed by a name in disjoint searches: a search that reaches the 5,000 is read to the end and the log says some may be missing — add a first name or a city. Its list gives the attorney number, name, status, date admitted (none for a temporary admission, about half of the register), city and state; **Full profile** reads the details (one request per attorney) and adds the firm, address, phone and email (each only when the attorney gave it: most give a phone, fewer an email) and the public disciplinary cases. A temporary admission (a lawyer of another state admitted for a case) is `active`; an expired one `inactive`. The statuses, admission years and **With email only** / **With phone only** filters are decided on what the list or the profile says. The directory turns away every IP outside the United States.
- Connecticut has no county, ZIP code nor firm search (a run with one of them leaves it out), no first name search (the **First name** is kept on the rows read; a first name alone is searched through the 26 searches below), and no email, practice areas, languages nor certifications. The look-up needs a last name or a town: a run with neither is read through 26 searches, one per first letter of the last name; the last name is looked up by its first characters (it also finds the firms of that name: the firms and the pro hac vice entries are left out), the town by name in capitals (`Hartford`, `West Hartford`). Its list gives the Juris number (the bar number), name, status (retired, resigned, suspended and deceased attorneys are in it, with the date of the status in the history), date admitted, firm and address — a few attorneys have no address, and some addresses are the last one on file; **Full profile** reads the attorney page (one request per attorney) and adds the phone and the court history (dated actions, with their comments and reinstatements). A **With phone only** filter needs it. A Juris number is read as the attorney page itself (`CT:407041`, charged as a profile). The look-up turns away every IP outside the United States.
- The USPTO is not a state bar: its public roster lists the registered patent attorneys and agents of the whole country (and abroad), every month. Pick `USPTO` in the state bars; the Actor reads the latest month of the roster (only that month of the zip is downloaded, a few MB) and searches it: last name, first name, firm, city and ZIP code, or the whole roster. The roster has no profile page (**Full profile** is never charged), no email, no admission date, no practice areas nor languages, and no county search. `status` is the registration (`Registered patent attorney`, `Registered patent agent`, `Limited recognition`, `Registered design agent`; always active: only registered practitioners are listed) and `certifications` repeats it; `firmPosition` says `Government employee` for a federal employee, `country` is written in full, `state` is `USPTO`. A practitioner who moves or leaves the roster simply appears or disappears from one month to the next.
- Florida shows 5 profile pages per visitor IP, then refuses the next ones: the Actor takes a new US proxy IP every 5 profiles (included), which makes Florida profiles slower than California ones.
- `onlyNew` remembers attorney ids, not their content: an attorney whose address changed is not returned again. With `trackStatusChanges`, only a change of the status category brings an attorney back.
- Two runs sharing the same `stateKey` at the same time may both return the same new attorney.

**A run that reaches its timeout** stops itself about 45 seconds before it: no new page is asked, what it read is saved and, with `onlyNew`, remembered, and the run ends *Succeeded* with "Stopped before the run's timeout". Resurrect it to go on from there, or give the next run a longer timeout (Run options).

**A run the platform stops without warning** (out of memory)

- Resurrect it: it goes on from where it stood at most a minute before the stop. What it had read since is read again, and the attorneys already saved are skipped: none is delivered or charged twice, and `maxItems` still counts them.
- With `onlyNew`, the memory is saved after each write (at most once every 2 seconds): resurrect the stopped run and the attorneys it had saved meanwhile join the memory; leave it stopped for good, and the next run may return the attorneys of its last 2 seconds once more.

#### Something doesn't work?

The last line of the log counts the attorneys saved, filtered out and without a public profile, and the requests that failed after every retry. Those requests are listed, with the reason, in the `FAILED_REQUESTS` record of the run's key-value store. A run that saved nothing and had failed requests fails, and its last message gives the cause.

If a bar changes its pages, you are told instead of paying for blank rows. A results page that counts attorneys but gives none the Actor can read is an error (listed in `FAILED_REQUESTS`), never a quiet "No attorneys found". Each bar is checked on its own: if the first 20 attorneys read from a bar all lack a field that bar always gives — the name, the status (Oregon's list rows give none), the admission date (New York, California; Florida, Washington, North Carolina and Oregon with the full profile), New York's last name, Florida's address, or the bar's own email of the attorneys allowed to practise in Florida (and in California, when the profile does not say "Not Available") — the run saves nothing more, stops and fails, and its last message names the missing field and the bar: at most those first attorneys are charged. A run of fewer attorneys is checked at its end, from 5 attorneys of a bar: its rows are saved, and the run fails all the same.

### 🛟 Support

Open an issue in the **Issues** tab with a link to your run: the run log and the `FAILED_REQUESTS` record of the key-value store show exactly which URLs failed and why.

# Actor input Schema

## `states` (type: `array`):

Which state bars to search: `NY` (New York, about 434 000 registrations, open data), `CA` (California, about 290 000 licensees), `FL` (Florida, about 110 000 members), `WA` (Washington, about 65 000 lawyers: the email is on the profile, tick Full profile), `NC` (North Carolina, about 60 000 members: email and phone on the profile, tick Full profile), `NV` (Nevada, about 17 000 bar numbers: the list is the whole record, email included, no profile page), `OR` (Oregon, about 25 000 licensees: the list gives the name and the city, the rest is on the profile, tick Full profile), `OH` (Ohio, about 107 000 attorneys: the list gives the name, status and admission date, the address and phone are on the profile, tick Full profile; no email), `MA` (Massachusetts, over 100 000 attorneys: the list is the whole record, no email, no profile page), `PA` (Pennsylvania, about 134 000 attorneys: the list gives the name, status, city and county, the rest is on the profile, tick Full profile; no email), `WI` (Wisconsin, about 50 000 attorneys, former members and the deceased included: the list gives the name, status, firm and city, the address and phone (published for few) and the discipline history are on the profile, tick Full profile; no email), `VA` (Virginia, about 76 000 lawyers, former members included: the list is the whole record, status and date of license included, no email, phone nor profile page), `CO` (Colorado, about 60 000 attorneys, former members and the deceased included: the list gives the name and status, the admission date, firm, address, phone and discipline history are on the profile, tick Full profile; no email), `MO` (Missouri, about 45 000 lawyers, inactive ones included: the list gives the name, city, ZIP code and standing, the bar number and the date admitted are on the profile, tick Full profile; no email, phone nor firm), `GA` (Georgia, about 74 500 lawyers, deceased and former members included: the list is the whole record — status, admission date, firm, address, phone and email, each one only when the lawyer lets the directory show it; no profile page), `IL` (Illinois, about 200 000 lawyers, retired and deceased included: the list gives the name, city and date admitted, the status, registered address, phone and email are on the profile, tick Full profile; a last name narrows the search, otherwise 26 searches by first letter are made; no search by bar number), `AZ` (Arizona, about 36 000 members, former members included: the list gives the name, bar number, firm, address, email and status, the phones, admission date, law school, languages and areas of practice are on the profile, tick Full profile; no search by bar number), `TX` (Texas, about 190 000 lawyers, inactive and deceased ones included: the list gives the name, firm, address, practice areas, phone and status, the bar number, date licensed and law school are on the profile, tick Full profile; no email), `TN` (Tennessee, about 43 000 attorneys, deceased and former ones included: the list gives the number, name, city, county and status, the address, phone and email (each only when the attorney made it public), the year licensed and the law school are on the profile, tick Full profile), `MI` (Michigan, about 70 800 attorneys, deceased and former ones included: the list gives the name, city and state, the bar number, status, address, phone, fax, email (each only when the attorney made it public), website, date licensed, law school, sections and areas of practice are on the profile, tick Full profile), `IN` (Indiana, an estimated 40 000 to 60 000 attorneys, temporary admissions included: the list gives the number, name, status, date admitted, city and state, the firm, address, phone and email (each only when the attorney gave it) are on the profile, tick Full profile; a last name, a first name or a city is needed, 5 000 attorneys at most per search), `CT` (Connecticut, about 65 000 attorneys, retired and deceased ones included, firms left out: the list gives the Juris number, name, status, date admitted, firm and address, the phone and the court history are on the profile, tick Full profile; no email), `USPTO` (not a state bar: the federal roster of registered patent attorneys and agents, about 54 000 practitioners from every state and abroad; the list is the whole record, no email, no profile page). Each search below runs in each state picked.

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

Attorney's last name, or its first letters (e.g. `Goldb` finds Goldberg, Goldblum…). Empty = every name.

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

Several last names in one run: one search per name (times each city below). Added to **Last name**; an attorney found by several searches is saved once.

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

Attorney's first name, or its first letters. Empty = every first name.

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

`beginsWith` = the name starts with what you typed; `exact` = the whole name; `soundsLike` = names that sound alike (California and Florida phonetic search; New York falls back to begins-with). Florida's own search also matches hyphenated names (`Smith` finds `Anthony-Smith`); `exact` removes them.

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

Law firm name, or a word of it (e.g. `Latham`). Empty = any firm.

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

City of the attorney's address, as written on the bar register (e.g. `New York`, `Los Angeles`, `Miami`). Empty = the whole state.

## `cities` (type: `array`):

Several cities in one run: every last name is searched in every city (3 names × 4 cities = 12 searches per state bar; at most 500 searches per run, all state bars counted). Added to **City**.

## `counties` (type: `array`):

County of the attorney's address, by name (e.g. `Kings`, `Los Angeles`, `Miami-Dade`). A county that is not in a state picked above is an input error.

## `zipCodes` (type: `array`):

5-digit ZIP codes of the attorney's address (e.g. `10017`, `90210`) — New York and California: the Florida directory has no ZIP code search (use cities or counties there).

## `barNumbers` (type: `array`):

Look up attorneys by bar / registration number, written `STATE:number` (`CA:231838`, `NY:6366066`, `FL:175684`), or a California range `CA:300000-300999` (every licensee of the range, up to 10 000 numbers per range and 50 000 per run). A profile URL of the California or Florida bar works too. When this list is not empty, the name / firm / place searches above are not run.

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

Maximum number of attorneys to save for the whole run (after deduplication and filters). 0 = no limit.

## `maxItemsPerQuery` (type: `integer`):

Cap for EACH search (state × name × city), so that the first search cannot use up the whole **Max attorneys** budget. 0 = no per-search cap.

## `extractDetails` (type: `boolean`):

Open each attorney's profile page (1 extra request per attorney) in California (email, phone, website, practice areas, languages, law school, license and discipline history) and Florida (county, admission date, discipline history, law school, languages, courts, firm size and position, physical address). Each attorney delivered with its profile is charged the `attorney-details` event on top of the attorney (see Pricing); a profile a filter drops is not. Off by default = results-list fields only: California then has no contact data, and a bar whose rows lack what a filter below asks is not searched (tick Full profile to search it). New York has no profile page: never charged there.

## `enrichEmails` (type: `boolean`):

When the bar gives no email, look for one on the firm's website (up to 3 pages of the site): the bar's website, or, when the bar gives none (New York never does), the firm's own site, looked for by the firm's name and city and delivered too (`websiteSource` = `search`). It is the firm's address, often info@ or contact@ — never guaranteed to be the attorney's. Needs Full profile ticked. Only an address of the firm is kept — on the website's own domain, or carrying the firm's name — never a web designer's credit. Charged per email found (see Pricing); the website itself is free.

## `statuses` (type: `array`):

Keep only these statuses (the bar's own status is in the `status` field, the common one in `statusCategory`). Empty = every status.

## `practiceAreas` (type: `array`):

Keep attorneys who declare one of these practice areas, by name (e.g. `Immigration`, `Family`, `Real Estate`). California and Florida publish practice areas on the profile page; New York does not (New York is then not searched).

## `languages` (type: `array`):

Keep attorneys who speak one of these languages (e.g. `Spanish`, `Mandarin`). California and Florida only, on the profile page (New York is then not searched).

## `certifications` (type: `array`):

Keep attorneys certified as specialists in one of these areas, by name (e.g. `Family Law`, `Immigration`, `Criminal`): California certified specialists and Florida board certifications (New York is then not searched).

## `admittedFromYear` (type: `integer`):

Keep attorneys admitted to the bar in this year or later (e.g. `2020` for recent admissions).

## `admittedToYear` (type: `integer`):

Keep attorneys admitted in this year or earlier.

## `maxFirmSize` (type: `integer`):

Keep solo practitioners and small firms: attorneys whose firm has at most this many attorneys (New York: counted on the register; Florida: the bar's size bracket). California does not publish it (California attorneys are kept).

## `requireEmail` (type: `boolean`):

Keep only attorneys with an email (California and Florida; New York publishes none and is then not searched).

## `requirePhone` (type: `boolean`):

Keep only attorneys with a phone number.

## `excludeKeywords` (type: `array`):

Drop the attorneys whose name or firm contains one of these words (case and accents ignored), e.g. `Legal Aid`, `District Attorney`.

## `onlyNew` (type: `boolean`):

Skip the attorneys that a previous run (same **Memory key**) already delivered: they are not saved and not charged, and their profile page is not even opened. First run = everything is new.

## `trackStatusChanges` (type: `boolean`):

With **Only new attorneys**: also return the attorneys already delivered whose status category changed since (active, inactive, suspended, disbarred, resigned, deceased), with `changeType`, `previousStatus` and `previousStatusCategory`. A returned attorney is charged like any other. The run reads every results page of its searches (a status can change anywhere), and the memory holds up to 150,000 attorneys per **Memory key**: watch a city, a firm or a list of names rather than a whole state.

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

Name of the memory used by **Only new attorneys**. Give each schedule / task its own key (e.g. `miami-immigration`) so that they do not share their memory. Letters, digits, `-` and `_`.

## `resetState` (type: `boolean`):

Forget everything remembered under this **Memory key** before the run: this run returns (and charges) every attorney again. Untick it afterwards.

## `proxyConfiguration` (type: `object`):

Apify Proxy or your own proxies. Keep the default: it is included in the price. The Florida Bar, the Tennessee directory, the Indiana Roll of Attorneys and the Connecticut look-up turn away visitors from outside the United States: your own proxies must leave from the US. The residential Apify proxy is not available in this Actor.

## `maxConcurrency` (type: `integer`):

Maximum number of requests processed in parallel.

## `maxRequestsPerMinute` (type: `integer`):

Most requests to the bars in any 60 seconds, all of them counted: results pages and profile pages. A budget, not an even pace: up to this many can leave at once when the minute starts (spread them with the minimum delay below). Lower it if a bar answers HTTP 429 / 403 in the log.

## `minRequestIntervalMs` (type: `integer`):

Smallest gap between two requests, in milliseconds. Unlike the per-minute rate, this spreads the requests evenly instead of letting them go out in a burst. 0 = no gap (Washington, North Carolina and Oregon, whose pages need several requests each, keep 500 ms between two of their requests unless you set a gap here).

## `maxRequestRetries` (type: `integer`):

Retries per request before it is marked as failed. Behind a proxy, a request a bar turns away is also retried on a new proxy session up to 10 times without using up these retries.

## `debugLog` (type: `boolean`):

Include debug messages in the run log.

## Actor input object example

```json
{
  "states": [
    "NY",
    "CA",
    "FL"
  ],
  "lastName": "Goldberg",
  "lastNames": [],
  "nameMatch": "beginsWith",
  "cities": [],
  "counties": [],
  "zipCodes": [],
  "barNumbers": [],
  "maxItems": 30,
  "maxItemsPerQuery": 0,
  "extractDetails": false,
  "enrichEmails": false,
  "statuses": [
    "active"
  ],
  "practiceAreas": [],
  "languages": [],
  "certifications": [],
  "requireEmail": false,
  "requirePhone": false,
  "excludeKeywords": [],
  "onlyNew": false,
  "trackStatusChanges": false,
  "stateKey": "default",
  "resetState": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "maxConcurrency": 4,
  "maxRequestsPerMinute": 120,
  "minRequestIntervalMs": 0,
  "maxRequestRetries": 5,
  "debugLog": false
}
```

# 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 = {
    "states": [
        "NY",
        "CA",
        "FL"
    ],
    "lastName": "Goldberg",
    "maxItems": 30,
    "statuses": [
        "active"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("nice_dev/us-lawyers-directory-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 = {
    "states": [
        "NY",
        "CA",
        "FL",
    ],
    "lastName": "Goldberg",
    "maxItems": 30,
    "statuses": ["active"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("nice_dev/us-lawyers-directory-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 '{
  "states": [
    "NY",
    "CA",
    "FL"
  ],
  "lastName": "Goldberg",
  "maxItems": 30,
  "statuses": [
    "active"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call nice_dev/us-lawyers-directory-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nice_dev/us-lawyers-directory-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/PcyMODnNeOmSgZ6W0/builds/beK41H3Cufv6Az4Gy/openapi.json
