California State Bar Attorney Scraper avatar

California State Bar Attorney Scraper

Pricing

Pay per event

Go to Apify Store
California State Bar Attorney Scraper

California State Bar Attorney Scraper

Verify California attorneys with official public State Bar license status, contact details, practice areas, law school, and history.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Scrape official public California State Bar attorney license search and profile pages.

What does California State Bar Attorney Scraper do?

California State Bar Attorney Scraper collects public attorney license records from the official State Bar of California search and profile pages. It turns name searches, bar numbers, and profile URLs into a clean Apify dataset that is ready for compliance review, CRM enrichment, legal recruiting, and periodic license monitoring.

The actor can save basic search-result data or open each attorney profile for deeper public details such as contact information, law school, self-reported practice areas, language information, CLA sections, license status history, and discipline indicators.

Who is it for?

  • ⚖️ Legal-tech teams building attorney verification, intake, or due-diligence workflows.
  • 🧾 Compliance teams checking whether California attorneys are active, inactive, suspended, or otherwise flagged in public records.
  • 📈 Legal marketing and business development teams enriching attorney and firm lead lists with official license data.
  • 👥 Recruiters and staffing teams verifying bar admission and public profile details before outreach.
  • 🏢 Law firms and operations teams refreshing internal attorney rosters from an official source.
  • 🔎 Investigators and researchers collecting public California attorney records for structured analysis.

Why use official State Bar data?

Generic lawyer directories may be useful for marketing context, but they are not the source of truth for license verification. This actor reads the public State Bar of California pages, so the records are tied to official bar numbers and official license-status pages.

Use it when you need a reproducible dataset that points back to the public profile URL for every saved attorney.

What data can you extract?

Each saved record can include:

  • Attorney name
  • California bar number
  • Official profile URL
  • License status
  • City from search results
  • Admission date
  • Public address
  • Phone and fax when listed
  • Public email when visible on the source page
  • Website when listed
  • CLA sections
  • Self-reported practice areas
  • Languages spoken by attorney or staff
  • Law school
  • Status history rows
  • Public discipline flag
  • Scrape timestamp

Data fields table

FieldDescription
searchQueryName or keyword that produced the record, or null for direct inputs.
barNumberCalifornia State Bar license number.
nameAttorney name from search/profile page.
profileUrlOfficial State Bar public profile URL.
licenseStatusCurrent license status shown by the State Bar.
cityCity shown in search results when available.
admissionDateAdmission date shown in search results/profile context.
addressPublic mailing/business address when published.
phonePublic phone number when published.
faxPublic fax number when published.
emailPublic visible email text when published.
websiteWebsite URL or text when published.
claSectionsCalifornia Lawyers Association sections listed on the profile.
practiceAreasSelf-reported practice areas.
languagesByAttorneyLanguages self-reported for the attorney.
languagesByStaffLanguages self-reported for staff.
lawSchoolLaw school field from the public profile.
statusHistoryPublic status, discipline, administrative action, and admission rows.
hasDisciplineBoolean flag derived from status-history discipline cells when available.
scrapedAtISO timestamp for the scrape.

How much does it cost to scrape California State Bar attorneys?

This actor uses pay-per-event pricing. There is a small run-start charge and then a per-result charge for each attorney record saved to the dataset.

For tests, start with maxResults between 5 and 20. Once you confirm the records match your workflow, increase maxResults for larger exports.

How to scrape by attorney name

Use searchQueries when you have names or keywords.

Example:

{
"searchQueries": ["John Smith", "Maria Garcia"],
"maxResults": 25,
"includeDetails": true
}

The actor opens the official QuickSearch result page for each query, collects matching profile links, deduplicates by bar number, and stops when the global maxResults limit is reached.

How to scrape by bar number

Use barNumbers when you already know exact California bar numbers. This is the best mode for compliance checks and individual verification because it avoids name-search ambiguity.

{
"barNumbers": ["72700"],
"includeDetails": true
}

How to scrape profile URLs

Use profileUrls when you already collected official State Bar profile links in another workflow.

{
"profileUrls": [
{ "url": "https://apps.calbar.ca.gov/attorney/Licensee/Detail/72700" }
],
"includeDetails": true
}

Input settings

InputTypeUse it for
searchQueriesArray of stringsAttorney names or free-text public search terms.
barNumbersArray of stringsExact direct lookup by California bar number.
profileUrlsRequest listOfficial State Bar profile URLs.
maxResultsIntegerMaximum records saved across all input modes.
includeDetailsBooleanWhether to open each profile for full public detail fields.

Output example

{
"searchQuery": "John Smith",
"barNumber": "72700",
"name": "Charles John Smith",
"profileUrl": "https://apps.calbar.ca.gov/attorney/Licensee/Detail/72700",
"licenseStatus": "Active",
"city": "San Francisco",
"admissionDate": "December 1976",
"address": "...",
"phone": "...",
"email": "...",
"website": "...",
"practiceAreas": ["..."],
"lawSchool": "...",
"statusHistory": [],
"hasDiscipline": false,
"scrapedAt": "2026-06-05T00:00:00.000Z"
}

Tips for better results

  • Use full names when possible.
  • Prefer bar numbers for exact verification.
  • Keep first runs small and inspect the dataset before scaling.
  • Set includeDetails to false if you only need search-result fields and want faster runs.
  • Use multiple specific searches instead of one broad keyword when you need cleaner matches.
  • Review statusHistory rather than relying on a single field for compliance-sensitive workflows.

Data quality notes

The source page controls which details are visible. Some profiles do not publish phone, email, website, language, practice-area, or law-school information. The actor preserves missing values as null or empty arrays instead of inventing data.

Email addresses on the State Bar site may be displayed through obfuscated markup. The actor extracts the visible public email span when present.

Integrations

You can connect the output dataset to:

  • 📊 Google Sheets or Excel for manual compliance review.
  • 🧩 CRM systems for attorney lead enrichment.
  • 🏛️ Legal operations dashboards for roster monitoring.
  • 🧪 Data pipelines in BigQuery, Snowflake, or S3.
  • 🔔 Scheduled Apify tasks that compare fresh exports against older datasets.
  • 🤖 MCP clients that let Claude or another assistant verify an attorney on demand.

Workflow patterns

License verification workflow

  1. Upload a list of California bar numbers.
  2. Run with includeDetails=true.
  3. Export barNumber, name, licenseStatus, profileUrl, and statusHistory.
  4. Store the official profile URL with your compliance record.

Lead enrichment workflow

  1. Search by attorney names from your CRM.
  2. Deduplicate on barNumber.
  3. Export contact, website, city, and practice-area fields.
  4. Route records with missing contact data to manual review.

Monitoring workflow

  1. Schedule periodic runs for known bar numbers.
  2. Compare current licenseStatus and statusHistory with prior datasets.
  3. Alert your team when public status changes.

API usage

Use actor ID automation-lab/california-state-bar-attorney-scraper in the Apify API, SDKs, CLI, or MCP tools.

Node.js example

import { ApifyClient } from "apify-client";
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor("automation-lab/california-state-bar-attorney-scraper").call({
searchQueries: ["John Smith"],
maxResults: 10,
includeDetails: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python example

from apify_client import ApifyClient
client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("automation-lab/california-state-bar-attorney-scraper").call(
run_input={"searchQueries": ["John Smith"], "maxResults": 10, "includeDetails": True}
)
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)

cURL example

curl -X POST "https://api.apify.com/v2/acts/automation-lab~california-state-bar-attorney-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"searchQueries":["John Smith"],"maxResults":10,"includeDetails":true}'

MCP usage

Connect Apify MCP with this actor enabled:

$claude mcp add apify-calbar-attorneys "https://mcp.apify.com/?tools=automation-lab/california-state-bar-attorney-scraper"

Claude Desktop configuration:

{
"mcpServers": {
"apify-calbar-attorneys": {
"url": "https://mcp.apify.com/?tools=automation-lab/california-state-bar-attorney-scraper"
}
}
}

Example prompts showing MCP usage:

  • "Use Apify MCP to run automation-lab/california-state-bar-attorney-scraper for bar number 72700 and summarize the license status."
  • "Using the MCP tool, search the official California State Bar for John Smith and return 10 active attorneys with profile URLs."
  • "Call the California State Bar Attorney Scraper through MCP for these bar numbers and flag records with discipline history."

Legality

This actor reads public pages that are visible without logging in. It does not bypass access controls, solve CAPTCHAs, or collect private account-only data. You are responsible for using the data in a lawful way and respecting privacy, professional-responsibility, and downstream data-retention requirements.

Limitations

  • The actor is limited to public State Bar of California pages.
  • Name search can return multiple attorneys with similar names.
  • Public profile fields vary by attorney.
  • The actor does not validate whether self-reported practice areas are current.
  • The actor does not provide legal advice or determine attorney suitability.

FAQ

Can I search multiple names in one run?

Yes. Add several entries to searchQueries. The actor deduplicates records by bar number and respects the global maxResults cap.

Can I fetch exact attorney records?

Yes. Use barNumbers or official profileUrls for exact lookup when you already know which California attorney profiles you need.

Why are some attorneys outside California?

California bar members can list public addresses outside California. The record is still a California State Bar profile because it has an official California bar number.

Troubleshooting: why did I get fewer results than expected?

The public search page may have fewer matches than your maxResults, or a broad query may not match the names you expected. Try exact names, add middle initials, or use direct bar numbers when available.

Troubleshooting: why are some fields empty?

Some attorneys do not publish every contact or practice field. Empty values usually mean the field was not visible on the public profile at scrape time.

Troubleshooting: should I use includeDetails=false?

Use includeDetails=false when you only need fast search-result fields such as name, bar number, license status, city, admission date, and profile URL. Use includeDetails=true when you need contact fields, law school, languages, practice areas, and status history.

Related Automation Lab actors that can complement official attorney-license verification:

Example input

{
"searchQueries": ["John Smith"],
"barNumbers": ["72700"],
"maxResults": 10,
"includeDetails": true
}

Best practices

  • Store profileUrl with every downstream record so reviewers can open the official source.
  • Use barNumber as the strongest deduplication key.
  • Keep raw Apify dataset exports for auditability.
  • Schedule recurring runs only for records you have a legitimate need to monitor.
  • Combine official license status with your own human review before making sensitive decisions.

Support

If a run fails or returns unexpected data, include the run ID, input JSON, and one or two example records when requesting support. That makes it easier to reproduce the behavior against the public source pages.