# CA State Bar Attorney Search Scraper (`codingfrontend/ca-state-bar-attorney-search`) Actor

Unofficial scraper for public California State Bar attorney profiles; not affiliated with or endorsed by the State Bar of California.

- **URL**: https://apify.com/codingfrontend/ca-state-bar-attorney-search.md
- **Developed by:** [Coding Frontned](https://apify.com/codingfrontend) (community)
- **Categories:** Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-usage

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### What does CA State Bar Attorney Search Scraper do?

**CA State Bar Attorney Search Scraper** converts public attorney search pages from the [State Bar of California](https://apps.calbar.ca.gov/attorney/LicenseeSearch/QuickSearch) into a clean dataset. It is an unofficial California attorney directory API alternative for searches by bar number, name, and public advanced-search filters.

The Actor does not access My State Bar Profile, private complaints, confidential records, or any login-protected information. It is not affiliated with or endorsed by the State Bar of California.

### Why use CA State Bar Attorney Search Scraper?

- Verify a public California attorney profile by stable State Bar number.
- Search names or bar numbers through the official quick-search interface.
- Use advanced filters for name, firm, city, state, ZIP, district, county, certified specialty, language, or self-reported practice area.
- Extract current license status and the published admission, disciplinary, and administrative history.
- Capture self-reported practice areas, languages, law school, and public profile contact details.
- Schedule checks and connect datasets to Apify APIs, webhooks, Google Sheets, or other integrations.
- Deduplicate records by State Bar number with bounded retries, low concurrency, and a polite request delay.

### What data can CA State Bar Attorney Search Scraper extract?

| Field | Type | Description |
| --- | --- | --- |
| `barNumber` | string | Stable California State Bar number |
| `name` | string | Attorney name shown on the profile |
| `licenseStatus` | string | Current public license status |
| `admissionDate` | string | Normalized admission date |
| `address` | string | Public profile address |
| `practiceAreas` | array | Self-reported practice areas |
| `languages` | array | Publicly reported attorney/staff languages |
| `lawSchool` | string | Published law school |
| `statusHistory` | array | Status, discipline, and administrative events |
| `hasPublicDiscipline` | boolean | Whether the page contains a public discipline entry or document |
| `sourceUrl` | string | Direct official profile URL |

Optional fields that are unavailable or shown as “Not Available” are omitted.

### How to search California attorney profiles

1. Open the Actor input tab.
2. Add exact numbers to **State Bar numbers** for deterministic profile checks.
3. Add attorney names or numbers to **Name or bar-number searches** for quick search.
4. Optionally add advanced-search objects. Use the official form codes for specialty, language, and practice area filters.
5. Set `maxResults` to cap the number of unique profiles.
6. Keep the default concurrency and delay unless a lower request rate is required.
7. Click **Start**, then inspect or download the dataset.

### How much will it cost to search the California State Bar?

The Actor uses lightweight HTTP extraction, not a browser, so small lookups normally consume little compute. Cost depends on search count, matching profiles, retries, proxy use, and your Apify plan. Use exact bar numbers and a small `maxResults` for the lowest, most predictable usage. Check the Console usage page for current free-tier and plan limits.

### Input

See the input tab for full configuration options.

- `barNumbers`: exact numeric identifiers.
- `queries`: official quick-search strings.
- `advancedSearches`: public advanced-search fields with a common matching mode.
- `maxResults`: unique-profile safety limit.
- `maxConcurrency`: simultaneous detail requests, capped at six.
- `requestDelayMillis`: minimum delay before every public-site request.
- `proxyConfiguration`: optional Apify Proxy configuration.

At least one lookup mode is required. Invalid input types, empty advanced objects, and malformed bar numbers fail early.

### Output

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

```json
[
  {
    "barNumber": "314033",
    "name": "Kevin David Cardona",
    "licenseStatus": "Active",
    "admissionDate": "2017-01-17",
    "address": "PO Box 6533, Moraga, CA 94570-6533",
    "practiceAreas": ["Labor & Employment"],
    "languages": ["German", "Spanish"],
    "lawSchool": "UC Davis SOL King Hall; Davis CA",
    "hasPublicDiscipline": false,
    "sourceUrl": "https://apps.calbar.ca.gov/attorney/Licensee/Detail/314033",
    "scrapedAt": "2026-07-30T00:00:00.000Z"
  }
]
```

The example demonstrates the schema. Every run parses the current public page, so values can change.

### Tips and advanced options

- Prefer exact bar numbers for verification workflows.
- Use precise name and city combinations to avoid large result sets.
- Practice areas are self-reported; do not treat them as certification.
- Review `statusHistory` and the official profile before making a legal-services decision.
- A profile with no public individual details is logged and omitted.

### FAQ, disclaimers, and support

#### Is this an official State Bar API?

No. It is an independent scraper of public pages. Always follow `sourceUrl` to confirm the current official profile.

#### Does “Active” guarantee competence or suitability?

No. The Actor reports public directory information only. It makes no legal or professional recommendation.

#### Does the Actor expose private complaints?

No. It does not bypass login walls or retrieve confidential complaint data.

> Our Actor is ethical and does not intentionally extract private user data. It extracts only information published on public State Bar attorney profiles. Results can contain personal data such as a public address or contact information. Personal data is protected by the GDPR in the European Union and by other regulations around the world. Do not scrape or use personal data unless you have a legitimate reason. If you are unsure whether your reason is legitimate, consult your lawyers.

Use the Actor's **Issues** tab for reproducible problems and the **API** tab for programmatic runs and integrations.

# Actor input Schema

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

Exact numeric California State Bar numbers.

## `queries` (type: `array`):

Quick-search values such as an attorney name or bar number.

## `advancedSearches` (type: `array`):

Advanced public-directory filters. At least one non-option field must be supplied per object.

## `maxResults` (type: `integer`):

Maximum number of unique attorney profiles saved across all searches.

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

Concurrent profile requests, capped to reduce load on the public directory.

## `requestDelayMillis` (type: `integer`):

Minimum polite delay before each State Bar request.

## `maxRetries` (type: `integer`):

Total bounded attempts per request with exponential backoff.

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

Optional Apify Proxy configuration. Direct public access is the default.

## Actor input object example

```json
{
  "barNumbers": [
    "314033"
  ],
  "queries": [],
  "advancedSearches": [],
  "maxResults": 25,
  "maxConcurrency": 3,
  "requestDelayMillis": 500,
  "maxRetries": 3,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `dataset` (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 = {
    "barNumbers": [
        "314033"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("codingfrontend/ca-state-bar-attorney-search").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 = { "barNumbers": ["314033"] }

# Run the Actor and wait for it to finish
run = client.actor("codingfrontend/ca-state-bar-attorney-search").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "barNumbers": [
    "314033"
  ]
}' |
apify call codingfrontend/ca-state-bar-attorney-search --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=codingfrontend/ca-state-bar-attorney-search",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/Ywqg7yc2sa1uYvRHc/builds/FE6M6JWvvKp2yK2fV/openapi.json
