# State Bar Attorney License Scraper (`moving_beacon-owner1/state-bar-attorney-license-scraper`) Actor

Scrapes official attorney licensing records from the State Bars of California, Colorado, Georgia, and North Carolina, capturing bar numbers, license status, admission dates, law firms, office addresses, phone numbers, emails, and other published details, with optional profile enrichment

- **URL**: https://apify.com/moving_beacon-owner1/state-bar-attorney-license-scraper.md
- **Developed by:** [Jamshaid Arif](https://apify.com/moving_beacon-owner1) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $9.99 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## State Bar Attorney License Scraper

Collects licensed attorneys straight from the bodies that license them — the
State Bar of California, Colorado's Office of Attorney Regulation Counsel, the
State Bar of Georgia and the North Carolina State Bar. Every row is an attorney
the state itself lists on its public register, with a bar number, a license
status, an admission date, a firm, an office address and contact details.

Because this is the licensing authority's own record rather than a marketing
directory, each row carries something a lawyer directory cannot: proof the
person is actually licensed, what their current standing is, and — for
California and Colorado — the full history of status changes, administrative
actions and public discipline attached to that license.

Search by name, city or firm across one state or several at once. Results are
interleaved between the states you select, so a four-state run does not get
filled up by the first state.

No API key or account is needed.

### Input

| Field | Default | Description |
|---|---|---|
| States | `CA,GA` | Comma-separated two-letter states. Supported: `CA`, `CO`, `GA`, `NC`. |
| Last name | `Smith` | Attorney last name. |
| First name | *(empty)* | Attorney first name. |
| City | *(empty)* | City of the attorney's registered office. Used by CA, GA and NC; Colorado's register searches by name only. |
| Firm name | *(empty)* | Law firm or employer. Used by CA and GA; CO and NC offer no firm filter. |
| Open each attorney's profile page | On | Opens every matched attorney's own profile page for the address, phone, email, law school, practice areas and discipline history. Turn it off for a much faster run that returns only name, bar number, status, city and admission date. Georgia publishes everything in one step and is unaffected. |
| Max results | `25` | Maximum number of attorney records across all selected states. |
| Proxy configuration | Off | Optional. Some of these registries only answer requests from inside the US — enable a US residential proxy if a run comes back with access errors. |

At least one of last name, first name, city or firm name must be given; every
one of these registries requires a search term and none of them will return the
whole roll.

### Output

One row per attorney.

```json
{
  "state": "CA",
  "source_label": "State Bar of California",
  "bar_number": "231838",
  "name": "Smith, Aaron Bryant",
  "first_name": "Aaron",
  "middle_name": "Bryant",
  "last_name": "Smith",
  "suffix": "",
  "license_status": "Active",
  "status_detail": "",
  "admission_date": "2004-07-16",
  "firm_name": "Law Office of Aaron B. Smith",
  "address": "241 S Broadway St Ste 205",
  "city": "Orcutt",
  "address_state": "CA",
  "zip_code": "93455-4659",
  "county": "",
  "district": "",
  "phone": "805-739-5500",
  "fax": "805-739-5504",
  "email": "aaron@aaronbsmithlaw.com",
  "website": "https://aaronbsmithlaw.com/",
  "law_school": "Santa Barbara COL; Santa Barbara CA",
  "practice_areas": "Business Law; Contracts; Real Estate; Trusts & Estates; Wills & Probate",
  "bar_sections": "",
  "certifications": "",
  "languages": "",
  "discipline_count": 0,
  "discipline_history": "Present | Active ;; 7/16/2004 | Admitted to the State Bar of California",
  "profile_url": "https://apps.calbar.ca.gov/attorney/Licensee/Detail/231838"
}
```

```json
{
  "state": "GA",
  "source_label": "State Bar of Georgia",
  "bar_number": "170291",
  "name": "Mrs. Alexandra Claire Apple",
  "first_name": "Alexandra",
  "middle_name": "Claire",
  "last_name": "Apple",
  "suffix": "",
  "license_status": "Active Member in Good Standing",
  "status_detail": "",
  "admission_date": "2015-12-04",
  "firm_name": "Troutman Pepper Locke LLP",
  "address": "600 Peachtree Street NE Suite 3000",
  "city": "Atlanta",
  "address_state": "GA",
  "zip_code": "30308",
  "county": "Fulton",
  "district": "5",
  "phone": "(404) 885-3456",
  "fax": "(404) 885-3900",
  "email": "allie.apple@troutman.com",
  "website": "",
  "law_school": "University of Georgia",
  "practice_areas": "",
  "bar_sections": "Business Law; Construction Law",
  "certifications": "",
  "languages": "",
  "discipline_count": 0,
  "discipline_history": "",
  "profile_url": "https://www.gabar.org/member-directory/?id=79A3B669FCDEE88AEE41C09E42E3414F"
}
```

```json
{
  "state": "CO",
  "source_label": "Colorado Office of Attorney Regulation Counsel",
  "bar_number": "15240",
  "name": "CALLA MARIE SMITH",
  "first_name": "CALLA",
  "middle_name": "MARIE",
  "last_name": "SMITH",
  "suffix": "",
  "license_status": "SUSG – Suspended Grievance",
  "status_detail": "Active or Inactive attorney has been suspended from the practice of law in Colorado by order of the Colorado Supreme Court and/or the Presiding Disciplinary Judge, pursuant to C.R.C.P. 242.10(a)(2) for discipline (formerly grievance). Attorney is prohibited from practicing law in Colorado.",
  "admission_date": "1985-11-01",
  "firm_name": "",
  "address": "425 S Cherry St Ste 920",
  "city": "Denver",
  "address_state": "CO",
  "zip_code": "80246-1236",
  "county": "",
  "district": "",
  "phone": "(303)322-0685",
  "fax": "",
  "email": "",
  "website": "",
  "law_school": "",
  "practice_areas": "",
  "bar_sections": "",
  "certifications": "",
  "languages": "",
  "discipline_count": 2,
  "discipline_history": "99PDJ040 ;; GC93B087 | 09/12/1994 | Suspension | 6 months | Issued | 94SA0214",
  "profile_url": "https://www.coloradolegalregulation.com/attorney-search/attorney-information?Regnum=15240"
}
```

Fields a given state does not publish come back as an empty string rather than
being dropped, so every row has the same shape and spreadsheets stay aligned.
The one number, `discipline_count`, comes back as `null` when it is not known.

How the columns line up across states:

- `admission_date` is the date the attorney was admitted in that state, always
  written `YYYY-MM-DD`. California's result list gives only the month, so with
  profile pages turned off a California row reads `YYYY-MM`.
- `license_status` is the attorney's current standing in the state's own words
  (for example `Active`, `Inactive Member in Good Standing`, `INAC – Inactive`).
  `status_detail` is the state's plain-English explanation of that status where
  it publishes one.
- `address` is the street part of the office address; the city, state and ZIP
  are in their own columns. An address outside the US is kept whole.
- `discipline_count` counts public discipline only: California rows count the
  entries in the Discipline column of the license history, not resignations or
  administrative suspensions such as unpaid fees, which stay visible in
  `discipline_history`. Colorado and North Carolina count disciplinary cases.
  Georgia publishes only whether a member has public discipline, so its value is
  0 or 1.
- `discipline_history` for California is the full license history (status
  changes, discipline and administrative actions, each labelled); for Colorado
  and North Carolina it lists the disciplinary cases.

### What each state publishes

| | CA | CO | GA | NC |
|---|---|---|---|---|
| Bar / registration number | yes | yes | yes | yes |
| License status | yes | yes | yes | yes |
| Plain-English meaning of the status | — | yes | — | yes |
| Admission date | yes | yes | yes | yes |
| Firm | yes | yes | yes | — |
| Street address | yes | yes | yes | yes |
| County | — | — | yes | — |
| Judicial district / circuit | — | — | yes | yes |
| Phone | yes | yes | yes | yes |
| Fax | yes | — | yes | — |
| Email | yes | — | yes | yes |
| Website | yes | — | — | — |
| Law school | yes | — | yes | — |
| Self-reported practice areas | yes | — | — | — |
| Bar sections | yes | — | yes | — |
| Board certifications | — | — | — | yes |
| Languages spoken | yes | — | — | — |
| Status / discipline history | yes | yes | count only | yes |

### Limits worth knowing

- Each registry caps what a single search returns. California returns at most
  500 matches per search; Colorado, Georgia and North Carolina return their own
  page limits. Narrow by name, city or firm to reach attorneys beyond the cap.
- A California search by location alone returns a randomised sample of active
  licensees rather than a stable alphabetical list, so two identical
  location-only runs will not return the same people. Add a name to get a
  repeatable result set.
- Georgia's directory matches a name against former names and middle names too,
  so a last-name search there returns some attorneys whose current surname is
  different.
- Email addresses appear only where the attorney has published one and has not
  asked the bar to hide it.
- Colorado shows only the disciplinary history the Supreme Court makes public;
  states also remove some older administrative suspensions from a profile under
  their own published policies. An empty discipline history means nothing is
  published today, not that nothing ever happened.
- This is licensing data, not a rating or a recommendation. States say plainly
  that they do not verify self-reported practice areas or vouch for competence.

### Source

Data comes from each state's own public attorney register:

- State Bar of California licensee search
- Colorado Office of Attorney Regulation Counsel attorney search
- State Bar of Georgia member directory
- North Carolina State Bar membership verification

If every selected registry fails to answer, the run fails with the reason
rather than returning an empty or placeholder result.

# Actor input Schema

## `states` (type: `string`):

Comma-separated two-letter states to search. Supported: CA (State Bar of California), CO (Colorado Office of Attorney Regulation Counsel), GA (State Bar of Georgia), NC (North Carolina State Bar). Results are interleaved between the states you list.

## `last_name` (type: `string`):

Attorney last name to search for, e.g. 'Nguyen'. Give at least one of last name, first name, city or firm name — every registry requires a search term.

## `first_name` (type: `string`):

Optional attorney first name.

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

Optional city of the attorney's registered office, e.g. 'Beverly Hills'. California, Georgia and North Carolina support it; Colorado's registry searches by name only and ignores it.

## `firm_name` (type: `string`):

Optional law firm or employer name. California and Georgia support it; Colorado and North Carolina do not offer a firm filter.

## `fetch_details` (type: `boolean`):

Open every matched attorney's own profile page to collect the address, phone, email, law school, practice areas and disciplinary history. Turn this off for a much faster run that returns only name, bar number, status, city and admission date. Georgia publishes everything in one step and is unaffected.

## `max_results` (type: `integer`):

Maximum number of attorney records to return across all selected states.

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

Optional proxy. These are US state licensing registries; some of them only answer requests from inside the US, so enable a US residential proxy if a run comes back with connection or access errors.

## Actor input object example

```json
{
  "states": "CA,GA",
  "last_name": "Nguyen",
  "first_name": "",
  "city": "",
  "firm_name": "",
  "fetch_details": true,
  "max_results": 25,
  "proxyConfiguration": {
    "useApifyProxy": 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": "CA,GA",
    "last_name": "Nguyen",
    "first_name": "",
    "city": "",
    "firm_name": "",
    "max_results": 25
};

// Run the Actor and wait for it to finish
const run = await client.actor("moving_beacon-owner1/state-bar-attorney-license-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": "CA,GA",
    "last_name": "Nguyen",
    "first_name": "",
    "city": "",
    "firm_name": "",
    "max_results": 25,
}

# Run the Actor and wait for it to finish
run = client.actor("moving_beacon-owner1/state-bar-attorney-license-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": "CA,GA",
  "last_name": "Nguyen",
  "first_name": "",
  "city": "",
  "firm_name": "",
  "max_results": 25
}' |
apify call moving_beacon-owner1/state-bar-attorney-license-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,moving_beacon-owner1/state-bar-attorney-license-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/8r3YfmtwHyEsz2sGB/builds/yM5SauNG7tF9vv2YP/openapi.json
