Multi-State Bar Association Scraper
Multi-State Bar Association Scraper
Extract licensed attorney records from official state bar websites across 15 U.S. states in a single run. Data comes from the authoritative source — the state bar's own public directory — so bar status, disciplinary history, and contact details are as current as the bar site itself.
Supported states: AZ, CA, FL, GA, ID, IL, MA, ME, MN, NJ, NY, OH, PA, TN, TX
What You Get
Each attorney record contains up to 26 fields depending on what the state bar publishes:
| Field | Type | Description |
|---|---|---|
state_bar |
string | State code (CA, TX, NY, etc.) |
bar_number |
string | Bar registration number, unique within a state |
full_name |
string | Full name as listed by the state bar |
first_name |
string | First name |
middle_name |
string | Middle name or initial |
last_name |
string | Last name |
suffix |
string | Name suffix (Jr., Sr., III, etc.) |
bar_status |
string | Active, Inactive, Suspended, Disbarred, Retired, or Deceased |
license_type |
string | Attorney, Foreign Legal Consultant, Registered In-House Counsel, etc. |
admission_date |
string | Date admitted to the bar in ISO format (YYYY-MM-DD) |
eligible_to_practice |
boolean | Whether the attorney is currently authorized to practice in this state |
firm_name |
string | Current firm or employer |
address |
string | Practice street address |
city |
string | Practice city |
state |
string | Practice state abbreviation |
zip |
string | Practice ZIP code |
county |
string | Practice county (when published by the state bar) |
phone |
string | Formatted as (XXX) XXX-XXXX |
fax |
string | Formatted as (XXX) XXX-XXXX (when available) |
email |
string | Publicly listed email (availability varies by state) |
practice_areas |
array | Self-reported or bar-certified specializations |
law_school |
string | Law school attended |
sections |
array | Bar association section memberships |
has_disciplinary_history |
boolean | Whether any disciplinary actions are on record |
disciplinary_actions |
array | Disciplinary actions with date, type, and description |
judicial_district |
string | Circuit or judicial district (when available) |
profile_url |
string | Direct link to the attorney profile on the state bar site |
Dataset Views
Three pre-built views are available:
- Attorney Overview — name, state bar, bar number, status, firm, city, state, phone
- Detailed Attorney Record — all 26 fields
- Compliance Check — name, bar number, state bar, status,
eligible_to_practice, admission date, disciplinary history,profile_url
How to Use
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
states |
array | ["CA"] |
One or more state codes. Supported: AZ, CA, FL, GA, ID, IL, MA, ME, MN, NJ, NY, OH, PA, TN, TX |
searchName |
string | — | Search by last name, or "Last, First". Leave blank to crawl by bar number range (CA, FL) |
barNumber |
string | — | Look up a single attorney by bar number. Overrides name search |
city |
string | — | Filter results by city |
barStatus |
string | — | Filter by status: active, inactive, suspended, disbarred, retired, deceased |
maxItems |
integer | 100 | Cap on total records across all selected states. 0 = unlimited |
barNumberStart |
integer | 100000 | Starting bar number for range-based crawling (CA, FL) |
proxyConfiguration |
object | US Apify proxy | US proxies are required — several state bar sites block non-US traffic |
Name Search Across Multiple States
{
"states": ["CA", "TX", "NY"],
"searchName": "Smith",
"barStatus": "active",
"maxItems": 500
}
Single Bar Number Lookup
{
"states": ["CA"],
"barNumber": "300000",
"maxItems": 1
}
Range Crawl for Bulk Records (California)
{
"states": ["CA"],
"barNumberStart": 340000,
"maxItems": 1000
}
Sample Output
{
"state_bar": "CA",
"bar_number": "300000",
"full_name": "Hae-Ri You",
"first_name": "Hae-Ri",
"middle_name": null,
"last_name": "You",
"suffix": null,
"bar_status": "Active",
"license_type": "Attorney",
"admission_date": "2014-12-02",
"eligible_to_practice": true,
"firm_name": null,
"address": "2101 Lyon Avenue",
"city": "Belmont",
"state": "CA",
"zip": "94002",
"county": null,
"phone": "(425) 505-7437",
"fax": null,
"email": null,
"practice_areas": [],
"law_school": "UC Berkeley SOL; Berkeley CA",
"sections": [],
"has_disciplinary_history": false,
"disciplinary_actions": [],
"judicial_district": null,
"profile_url": "https://apps.calbar.ca.gov/attorney/Licensee/Detail/300000"
}
Use Cases
- Compliance verification — confirm an attorney holds an active license and has no disciplinary history before engagement, using the
eligible_to_practiceandhas_disciplinary_historyfields - Attorney lead generation — build outreach lists filtered by state, city, and practice area; use
admission_dateto estimate seniority without resume screening - Expert witness vetting — verify credentials against official bar records, including law school and admission date
- Background check enrichment — access disciplinary history from state disciplinary boards, which commercial directories do not carry
- LegalOps data enrichment — append current bar status and verified contact information to existing attorney databases for conflict checks and panel management
State Coverage
| State | Bar Site | Crawl Method |
|---|---|---|
| Arizona (AZ) | azbar.org | Name search (JSON API, two-phase) |
| California (CA) | calbar.ca.gov | Bar number range or single lookup |
| Florida (FL) | floridabar.org | Bar number range or name search |
| Georgia (GA) | gabar.org | Name search (JSON API) |
| Idaho (ID) | isb.idaho.gov | Sequential ID iteration |
| Illinois (IL) | iardc.org | Name search (two-phase HTML) |
| Maine (ME) | mebaroverseers.org | Sequential bar number iteration |
| Massachusetts (MA) | massbbo.org | Name search |
| Minnesota (MN) | mars.courts.state.mn.us | Sequential attyID iteration (recent admissions) |
| New Jersey (NJ) | njcourts.gov | Name search |
| New York (NY) | iapps.courts.state.ny.us | Name search |
| Ohio (OH) | supremecourt.ohio.gov | Name search |
| Pennsylvania (PA) | padisciplinaryboard.org | Name search |
| Tennessee (TN) | tbpr.org | Sequential BPR number iteration |
| Texas (TX) | texasbar.com | Name search |
Why Official Bar Data vs. Attorney Directories
FindLaw, Avvo, and Martindale aggregate self-reported attorney profiles. They do not have access to a state bar's internal disciplinary system.
Official state bar websites are the authoritative source for:
- Bar status — active, suspended, disbarred, or inactive as determined by the state bar
- Disciplinary history — formal reprimands, probations, and disbarment records
- Admission date — the exact date an attorney was admitted in that jurisdiction
- Eligible to practice — a definitive boolean that directory scrapers cannot provide
For compliance, verification, or background screening workflows, official state bar data is not interchangeable with directory data.
Pricing
Pay-Per-Event (PPE) pricing. You pay per attorney record saved to the dataset — not per page fetched. Pages that return no record (gaps in bar number sequences, empty search results) are not charged.
| Records | Estimated cost |
|---|---|
| 1,000 | ~$4 |
| 10,000 | ~$40 |
| 100,000 | ~$400 |
Apify platform compute costs are billed separately and are typically small relative to data volume.
Limitations
- 15 states currently supported. Requesting an unsupported state code returns an error listing available codes. Additional states are tracked in the project enhancement queue.
- MN coverage is biased toward recent admissions (~2009 onward). Older Minnesota attorneys live in scattered earlier
attyIDbands; full historical coverage requires name-based search, which this actor does not implement for MN. - Email availability is inconsistent. Most state bars do not publish attorney emails. California obfuscates email addresses with JavaScript — CA records will have
nullforemail. - Field coverage varies by state. County, judicial district, law school, and section memberships are not published by every state bar. Unavailable fields return
null. barStatusfilter is applied post-extraction. It does not change what a state bar's search form returns. Some bars only expose active attorneys through their public search interface.- CA and FL use bar number range crawling. These states do not have a functional public name-search API. Set
barNumberStartandmaxItemsto control run scope. - Rate limits. The crawler runs at 2–5 concurrent requests with automatic retries. Full-state crawls of 100k+ records take several hours. NY and NJ are more restrictive — residential proxies reduce failure rates on those states.