State Bar [$1๐Ÿ’ฐ] Lawyer & Attorney License Verification avatar

State Bar [$1๐Ÿ’ฐ] Lawyer & Attorney License Verification

Pricing

from $2.50 / 1,000 results

Go to Apify Store
State Bar [$1๐Ÿ’ฐ] Lawyer & Attorney License Verification

State Bar [$1๐Ÿ’ฐ] Lawyer & Attorney License Verification

๐Ÿ’ฐ$1 per 1,000 results. Verify US attorneys against their state bar's official roster. Look up name, license status (Active/Inactive/Resigned/Disbarred), bar #, city, admission date โ€” sourced directly from the state bar. v1: California (~250k attorneys). 14 filters. JSON/CSV out, billed per result.

Pricing

from $2.50 / 1,000 results

Rating

0.0

(0)

Developer

Muhamed Didovic

Muhamed Didovic

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

US State Bar Attorney Search Scraper

Verify and search any US state bar's licensee directory. Look up attorneys by name, firm, city, or zip โ€” get back a normalized record with bar number, name (split into first/middle/last), license status (Active / Inactive / Resigned / Disbarred / Suspended / Deceased / Not Eligible), city, admission date (ISO + raw), and a direct link to the official state-bar profile page. JSON or CSV out, billed per result.

๐Ÿšง v1: California (CA) only. State bar websites are deeply different from each other (form fields, result HTML, status vocab) so each state ships as a per-state adapter module. California is the largest market (~250k licensed attorneys); more states are added incrementally. Request a state via the support email if you need it prioritized.

How it works

How US State Bar Scraper works

๐Ÿš€ Quick start

The actor is prefilled with a working demo (state: CA, freeText: Smith). Just click Start โ€” you'll get the first 100 California-bar attorneys named Smith, with status, city, and admission date for each. Then narrow with the filters below.

Three search modes (pick one โ€” they don't combine):

ModeWhen to useExample input
A. Free-text name search"Find any attorney named X"freeText: "Smith"
B. Multi-filter search"All Active Family Law attorneys in Berkeley who speak Mandarin"practiceArea: "Family Law" + city: "Berkeley" + languageSpoken: "Mandarin"
C. Bar number lookup"Verify this specific attorney"barNumber: "200000" (returns name + bar # only โ€” degraded)

Three example queries to try:

// 1. License verification โ€” "Is this attorney a CA bar member?"
{ "state": "CA", "freeText": "Joanna Lynn Grisinger" }
// 2. Lead-gen โ€” "All Active Family Law attorneys in Alameda County"
{ "state": "CA", "practiceArea": "29", "county": "AL" }
// 29 = Family Law, AL = Alameda County
// 3. Niche outreach โ€” "Mandarin-speaking certified Family Law specialists"
{ "state": "CA", "legalSpecialty": "04", "languageSpoken": "2" }
// 04 = Family Law (certified), 2 = Mandarin

๐Ÿ’ก Tip: California's search returns at most 500 rows per query with no pagination. If your filter is too broad and you hit 500, narrow it (add a city or practice area). Two filters combined typically lands well under the cap.

โœจ Why use this scraper?

License verification, compliance audits, attorney lead lists, "is this lawyer real" lookups โ€” anything where you need authoritative state-bar registration data.

  • ๐Ÿ› Public license records, not marketing data. Sourced directly from each state bar's official licensee directory โ€” same data the bar publishes for public use. Status, admission date, and bar number are authoritative.
  • ๐ŸŽฏ Two search modes per state. California (v1) supports both QuickSearch (free-text name) and AdvancedSearch (separate last/first/middle name + match-mode + firm + city + state + zip). Pick the one that fits your query.
  • โœ… Normalized status enum. Each state bar uses different status vocabulary ("Eligible" vs "Active" vs "Good Standing"); we normalize to a single 8-value enum (active / inactive / resigned / disbarred / suspended / deceased / not_eligible / other) so cross-state filters work cleanly. The original raw string is also preserved on every row.
  • ๐Ÿ“… Admission date as both ISO and raw. admissionDate: "2014-10-01" (ISO) plus admissionDateRaw: "October 2014" (the bar's own format) โ€” pick whichever your downstream system needs.
  • ๐Ÿงฑ Adapter-per-state architecture. Each state's quirks live in its own module (src/states/{code}.ts). The output schema is universal โ€” adding a new state doesn't break existing rows.
  • ๐Ÿšซ No browser automation, no paid CF clearance. Search-results pages are server-rendered HTML on every supported state. We use the same impit + 3-stack TLS race the rest of our scrapers use, but most state bars don't even need it.
  • ๐Ÿ“ค Clean exports. One row per attorney. JSON + CSV exported automatically.

๐ŸŽฏ Use cases

TeamWhat they build
Compliance & vendor management"Is this lawyer actively licensed in CA?" โ€” one query, one row, returns status + admission date
Lead-gen / outreachBulk search by city or last-name prefix โ€” get every Active CA attorney in San Francisco named Smith
CRM enrichmentPatch an existing attorney CRM with verified bar #, name split, and current status
Legal-tech researchDensity maps of active attorneys by city, status distribution analyses
RecruitingFind attorneys by admission date (e.g. "all attorneys admitted to the CA bar between 2018 and 2020") via post-filtering on admissionDate
Bar verification auditsCross-check that attorneys claiming a CA license are actually registered

๐Ÿ“ฅ Inputs

State (required)

Pick one US state from the dropdown. The actor dispatches to the matching adapter.

  • California (CA) โœ… โ€” supported in v1

Search filters

Supply at least one of the filters below. The adapter only honors filters its backend supports โ€” others are silently dropped (so the same input shape works for every state once more are added).

FilterCANotes
barNumberโœ… โš ๏ธLook up a single attorney by their CA bar registration number. Returns a degraded row (name + bar # only) โ€” see caveat below.
freeTextโœ…Maps to CA QuickSearch (free-text across attorney names). The simplest entry point.
lastNameโœ…Maps to CA AdvancedSearch โ€” combined with soundsLike for match-mode (off = begins-with, on = sounds-like).
firstNameโœ…Same.
middleNameโœ…Same.
firmNameโœ…CA AdvancedSearch firm-name filter.
cityโœ…Filter by registered office city.
addressStateโœ…2-letter state code on the registered address (lets you find CA-licensed attorneys whose office is in another state).
zipโœ…5-digit US zip.
soundsLikeโœ…Toggle phonetic / sounds-like match-mode for name fields.
districtโœ…California State Bar district (1-6 + Outside California). 8 enum options.
countyโœ…California county code (60 enum options including "Statewide" and "Non-California").
legalSpecialtyโœ…Certified legal specialty (22 enum options โ€” Bankruptcy Law, Family Law, Criminal Trial Advocacy, etc.).
languageSpokenโœ…Language spoken by the attorney (99 enum options โ€” Mandarin, Spanish, ASL, Arabic, etc.).
practiceAreaโœ…Practice area (66 enum options โ€” broader than certified specialties).

โš ๏ธ Bar-number lookup is a degraded path on CA. California's apps.calbar.ca.gov/attorney/Licensee/Detail/{n} page is a JavaScript-rendered Drupal SPA. The <title> is server-rendered ({name} # {barNum}), so we can extract a row with name + bar number + profileUrl only โ€” no status, city, or admission date. For full data on a known attorney, search by lastName + firstName instead and pick the matching row. Invalid bar numbers (e.g. "1" or unassigned IDs) are returned as zero rows.

๐Ÿ”„ How it works (technical)

  1. Resolve adapter. The state field selects one of the per-state adapter modules. Each adapter knows that state's URL patterns, form fields, result HTML, and status vocab.
  2. Compose search URL. Adapter takes the supplied filters and builds either a QuickSearch (single free-text param) or AdvancedSearch (full 13-field form) URL โ€” whichever matches the filters present.
  3. Fetch the search-results page through impit, with the parallel 3-stack race (impit + got-scraping + curl-impersonate) as fallback if the soft anti-bot trips.
  4. Parse the SSR'd table with cheerio โ€” anchored on column headers (Name | Status | Number | City | Admission Date) so we don't pick up the search-form table by accident.
  5. Normalize each row โ€” split the Last, First Middle name format, normalize the status enum, parse the admission date to ISO.
  6. Push one row per attorney to the dataset.

โš™๏ธ Input parameters

ParameterTypeDefaultDescription
statestring (enum)"CA"Two-letter state code. v1 supports CA only; more states added incrementally.
barNumberstringโ€”Bar # lookup (returns 1 degraded row โ€” see caveat above).
freeTextstringโ€”Free-text search (typically a name). Maps to CA QuickSearch.
lastNamestringโ€”Last-name filter (CA AdvancedSearch).
firstNamestringโ€”First-name filter.
middleNamestringโ€”Middle-name filter.
firmNamestringโ€”Firm-name filter.
citystringโ€”Registered office city.
addressStatestringโ€”2-letter US state on the registered address (out-of-state members).
zipstringโ€”5-digit US zip.
soundsLikebooleanfalseToggle phonetic match-mode.
districtstring (enum)โ€”California State Bar district (1-6 + Outside California).
countystring (enum)โ€”California county (60 options).
legalSpecialtystring (enum)โ€”Certified legal specialty (22 options).
languageSpokenstring (enum)โ€”Language spoken (99 options).
practiceAreastring (enum)โ€”Practice area (66 options).
maxItemsinteger1000Hard cap on rows. CA's search caps at 500 results per query (no pagination available) โ€” combine multiple filters to narrow if you need more.
maxConcurrency / minConcurrencyinteger5 / 1Parallel HTTP request limits.
maxRequestRetriesinteger5Retries before a failed request is given up.
proxyobjectApify residential, USMost state bars don't have aggressive anti-bot, so a small US-residential pool is plenty.

๐Ÿ“ฆ Output sample

One row per attorney:

{
"state": "CA",
"barNumber": "298556",
"name": "Smith, Alan Patrick",
"firstName": "Alan",
"middleName": "Patrick",
"lastName": "Smith",
"statusRaw": "Active",
"status": "active",
"city": "San Francisco",
"addressState": "CA",
"admissionDate": "2014-10-01",
"admissionDateRaw": "October 2014",
"profileUrl": "https://apps.calbar.ca.gov/attorney/Licensee/Detail/298556",
"scrapedAt": "2026-05-09T23:32:01.117Z"
}

๐Ÿ—‚ Output fields

GroupFields
Identifiersstate (2-letter), barNumber, profileUrl, scrapedAt
Personname (Last, First Middle as the bar formats it), firstName, middleName, lastName
Licensingstatus (normalized: active / inactive / resigned / disbarred / suspended / deceased / not_eligible / other), statusRaw (the bar's original string), admissionDate (ISO yyyy-mm-dd), admissionDateRaw (e.g. "October 2014")
Locationcity, addressState

โ“ FAQ

Which states are supported? v1 ships California (CA) only. State bar websites are independently built โ€” each is a custom adapter module. More states are added incrementally as demand justifies the work. Request a state via the support email below if you need it.

Why is the actor "California-only" if it claims to be a "US State Bar" scraper? The architecture supports any US state โ€” adding a new state is a new module file, not a rewrite. We ship CA first because it's the largest market (~250k attorneys, biggest demand) and clean to scrape. As we add more states, the same actor (and the same input shape) supports them with no changes for existing customers.

Can I look up an attorney by their bar number? Yes, on California โ€” set barNumber and the actor fetches the detail page and extracts the attorney's name from the server-rendered <title> tag. It's a degraded row (name + bar # + profileUrl only โ€” no status, city, or admission date) because the rest of the detail page is JavaScript-rendered. For full data on a known attorney, search by their name instead and pick the matching row from the results.

What's the difference between legalSpecialty and practiceArea? California maintains two parallel taxonomies. legalSpecialty (22 options) lists certified specialties โ€” formal credentials granted by the State Bar (e.g. "Family Law", "Bankruptcy Law", "Criminal Trial Advocacy*"). Asterisk-marked entries are sub-specialties. practiceArea (66 options) is a broader self-reported categorization that any attorney can claim (e.g. "Real Estate", "Internet Law", "Class Actions"). Use legalSpecialty for credentialed search; practiceArea for everyday "what does this lawyer do" search.

Can I combine multiple filters? Yes โ€” and you should. Single broad filters (e.g. just practiceArea=Family Law) will hit the 500-row cap. Combine 2-3 filters (e.g. practiceArea=Family Law + county=Alameda + languageSpoken=Mandarin) to narrow into a useful subset.

What's the difference between QuickSearch and AdvancedSearch on CA? QuickSearch has one input (free-text name search). AdvancedSearch has 17 fields (separate last/first/middle name with match-mode, firm, city/state/zip, district, county, language, practice area, certified specialty). The adapter picks QuickSearch when only freeText is set, and AdvancedSearch when any fine-grained filter is present.

What's status: "active" vs statusRaw: "Active"? Different states use different status vocab โ€” California uses Active / Inactive / Resigned / Disbarred / Suspended / Deceased / Not Eligible, but other states use Eligible or Good Standing. The normalized status enum gives you a stable key for cross-state filtering; statusRaw preserves the original string from the source.

How are CA's status values mapped?

  • Active โ†’ active
  • Inactive โ†’ inactive
  • Resigned โ†’ resigned
  • Disbarred โ†’ disbarred
  • Suspended โ†’ suspended
  • Deceased โ†’ deceased
  • Not Eligible โ†’ not_eligible
  • Anything else โ†’ other (preserve the raw string for inspection)

How accurate is the admission date? California's bar publishes it as month + year (e.g. "October 2014"); we normalize to the first of the month (2014-10-01). The admissionDateRaw field preserves the original string in case you need exact source fidelity.

Why does the search cap at 500 results on CA? California's QuickSearch and AdvancedSearch both cap at 500 result rows server-side. If a query produces more matches, you'll see the first 500 โ€” narrow your filters (add a city, use lastName instead of freeText, etc.) to get the rest.

How do I limit results? Set maxItems. The actor stops collecting as soon as the cap is reached.

๐Ÿ’ฌ Support

๐Ÿ›  Additional services

  • Custom output shape, additional fields, or one-off datasets: muhamed.didovic@gmail.com
  • Need a specific state added urgently? Drop an email โ€” most non-Cloudflare-protected state bars take a half day each.
  • For API access (no Apify fee, just a usage fee for the API): muhamed.didovic@gmail.com

๐Ÿ”Ž Explore more scrapers

Other legal-vertical scrapers at memo23's Apify profile โ€” Avvo (lawyer directory) and FindLaw (law-firm directory) are already shipped.


โš ๏ธ Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by The State Bar of California, the American Bar Association, any other state bar association, or any of their subsidiaries or affiliates. All trademarks mentioned are the property of their respective owners.

The scraper accesses only publicly available licensee directory pages โ€” the same pages each state bar publishes for public license-verification use. No authenticated endpoints, no member-only features, no content behind a logged-in session. Users are responsible for ensuring their use complies with each state bar's terms of service, applicable data-protection law (GDPR, CCPA, etc.), and any rules around the use of attorney licensing data in their jurisdiction.

This actor is intended for license verification, compliance, lead-generation, and research purposes. The data it returns is public record.


SEO Keywords

us state bar scraper, state bar attorney search, california state bar scraper, calbar scraper, california attorney lookup, attorney license verification, attorney status check, lawyer license check api, bar number lookup, attorney licensee search, us attorney public records, lawyer compliance check, attorney verification, license verification scraper, lawyer directory scraper, attorney directory api, scrape calbar, scrape state bar, lawyer status check api, attorney admission date data, lawyer disciplinary check, attorney bar registration scraper, public attorney records, california bar attorney lookup, lawyer compliance api, legal vendor verification, attorney lead generation