# US Attorney Database & Lawyer Leads — Good Standing (`jungle_synthesizer/good-standing-us-attorney-database`) Actor

US attorney database and lawyer leads: every licensed lawyer in 16 states, the state bars and top attorney directories merged into one profile. 1.47M lawyers with licence status, attorney discipline, firm, phone and email. Attorney license lookup by bar number, or filter by state and practice area.

- **URL**: https://apify.com/jungle_synthesizer/good-standing-us-attorney-database.md
- **Developed by:** [BowTiedRaccoon](https://apify.com/jungle_synthesizer) (community)
- **Categories:** Lead generation, Business, Other
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $80.00 / 1,000 record scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## US Attorney Database & Lawyer Leads — Good Standing

The complete list of all licensed attorneys across 16 states, enriched through over half-dozen attorney directories and various other sources. All records cleaned-up and standardized. Over 1.4million profiles and counting.

***

### Why Good Standing beats every other legal lead generation source

Other lawyer lead tools read one directory each. A directory only lists the attorneys who signed up for it, can't tell you whether they are still licensed, and lists the same lawyer under every state they practise in. A state bar search covers one state, one name at a time, and has no export button.

Good Standing starts from the bar records, so the list is complete. It then adds what every directory knows about each lawyer.

- **Gets every licensed attorney, not every attorney who bought a listing.** If a state bar licenses them, they are in here, including the many who appear in no directory at all.
- **Merges every source into one profile.** The bar's licence record plus a directory's bio, practice areas, headshot, website and rating. You'd otherwise buy four lists and spend a week matching them.
- **Removes the duplicates for you.** A lawyer licensed in New York, California and Texas is one lead with three licences inside it, and you pay for one row.
- **Verifies standing on every row.** Active, suspended or disbarred, straight from the body that issues the licence. Your sales team stops calling disbarred lawyers, and your compliance team stops trusting directory badges.
- **Filters on what directories can't.** Admission year, which is seniority. Law school. County. Discipline history. Eligibility to practise.

**States covered:** Arizona, California, Colorado, Connecticut, Georgia, Idaho, Indiana, Maine, Minnesota, New York, Ohio, Oregon, Pennsylvania, Texas, Wisconsin and Wyoming. New York, California and Texas, the three largest bars in the country, are all included, and more states are on the way.

***

### Good Standing Features

- **Builds lawyer leads, attorney leads and law firm leads.** Filter by state, practice area (37 categories), county, city, ZIP, law school and admission year.
- **Returns contact details by default.** About 70% of lawyers come with a phone or an email, and `requireContact` keeps only those. Switch on `requirePhone` or `requireEmail` for a pure call list, an attorney contact list or a lawyer email list.
- **Bar number lookup.** Every licence the lawyer holds comes back with its status, admission date and disciplinary record, including the suspended and disbarred licences that are the reason you checked.
- **Includes attorney disciplinary records.** Screen for attorney discipline: filter for lawyers with discipline on record, or for lawyers clean under every licence.
- **Adds directory detail.** About 45% of lawyers also carry a bio, practice areas, website, headshot or rating.
- **Shows where each value came from.** Each contact field names its source, so you can tell a state bar fact from a directory listing.
- **Delivers new attorneys only.** `addedSince` returns only lawyers new to the list. Put it on a monthly schedule and you get just the new admissions.

***

### Who Uses a US Attorney Database?

- **Legal tech and legal services sales teams.** Case-management, e-discovery, legal AI, IOLTA banking, malpractice insurance. A reachable list of practising lawyers by state and practice area, with seniority to separate partners from associates.
- **Legal recruiters** — admission year, law school, firm and licensing states on every row.
- **Litigation support and expert-witness networks.** Licensed counsel with no discipline on record, by practice area and county.
- **Compliance and vendor onboarding** — attorney license verification and an attorney background check on outside counsel before the engagement letter.
- **Insurers and litigation funders** — build defence panels from verified licences rather than directory profiles.
- **Legal market research.** Attorney density by county, admission cohorts, law-school placement.

***

### How Good Standing Works

1. Pick your states, practice areas and filters, or paste bar numbers to look up specific attorneys.
2. Good Standing returns one profile per lawyer, with every licence and every contact detail it holds. Results start arriving within seconds.
3. Export as CSV, Excel or JSON, or pull the results into your CRM through the Apify API.

***

### Input

#### Build a lead list of California family-law attorneys you can call

```json
{
  "states": ["CA"],
  "practiceAreas": ["family"],
  "requirePhone": true,
  "maxItems": 5000
}
```

#### Find senior litigators in Atlanta

```json
{
  "states": ["GA"],
  "county": ["Fulton"],
  "practiceAreas": ["litigation"],
  "admittedBefore": 2010
}
```

#### Recruit junior attorneys across two states

```json
{
  "states": ["TX", "AZ"],
  "admittedAfter": 2019,
  "maxItems": 2000
}
```

#### Attorney license lookup by bar number

```json
{
  "states": ["GA"],
  "barNumbers": ["792416"]
}
```

#### Screen a panel against attorney disciplinary records

```json
{
  "states": ["CA", "TX", "GA"],
  "hasDisciplinaryHistory": "with",
  "eligibleOnly": false
}
```

| Field                                          | Type    | Default | Description |
|------------------------------------------------|---------|---------|-------------------------------------------------------------------------------------------------------|
| `maxItems`                                     | integer | `100`   | Most lawyers to return. `0` = no cap |
| `states`                                       | array   | all     | Licensing states as two-letter codes (`CA`, `TX`). Empty = all 16 |
| `practiceAreas`                                | array   | —       | `family`, `personal_injury`, `immigration`, `tax` and 33 more. Any of them |
| `admittedAfter`                                | integer | —       | Admitted in or after this year: newer attorneys |
| `admittedBefore`                               | integer | —       | Admitted in or before this year: senior attorneys |
| `names`                                        | array   | —       | Part of a name, e.g. `Smith` |
| `firmNames`                                    | array   | —       | Part of a firm or employer name |
| `lawSchools`                                   | array   | —       | Part of a law school name |
| `city` `county` `zip`                          | array   | —       | Address of record. Any of them |
| `requireContact`                               | boolean | `true`  | Must have a phone or an email |
| `requirePhone` `requireEmail` `requireWebsite` | boolean | `false` | Must have that contact detail |
| `eligibleOnly`                                 | boolean | `true`  | Only lawyers currently allowed to practise in your states |
| `hasDisciplinaryHistory`                       | string  | `any`   | `any`, `with` (discipline on record) or `without` (clean under every licence) |
| `addedSince`                                   | string  | —       | Only lawyers new to the list: `1 month` up to `12 months` |
| `barNumbers`                                   | array   | —       | Exact attorneys by bar number, with `states`. Returns them whatever their status |
| `emails`                                       | array   | —       | Exact attorneys by email |
| `includeSources`                               | boolean | `true`  | `false` drops the per-field source lists for a lighter record |
| `resumeCursor`                                 | string  | —       | Cursor from a previous run's Output, to continue it |

Filters on admission year and eligibility apply to the same licence. `"states": ["CA"], "admittedAfter": 2019` means a California licence from 2019 on, not a 2021 New York admission held by someone with an older California licence.

#### Resuming a large run

Every run emits a `resumeCursor` in its Output. To continue a run that stopped at `maxItems` or your spend cap, start a new run with **the same input** plus that `resumeCursor`. You are **not re-charged** for lawyers the earlier run already delivered. The cursor is opaque, so supply it unmodified.

***

### Good Standing Output Fields

A real record: Robert H. Montgomery III, looked up by his Georgia bar number. It is abridged to three of his seven licences.

```json
{
  "person_id": "gsp_1a2607c949dd676f",
  "matched_licence_id": "GA:792416",
  "full_name": "Robert H. Montgomery III",
  "licence_count": 7,
  "licensed_states": "AZ; GA; ID; NY; OH; OR; PA",
  "eligible_anywhere": true,
  "has_disciplinary_history": false,
  "state_bar": "PA",
  "bar_number": "76324",
  "bar_status": "Active",
  "firm_name": "Robert H Montgomery III Esq PC",
  "email": "rob@rmontgomery-law.com",
  "phone": "(215) 731-1404",
  "mailing_city": "PHILADELPHIA",
  "mailing_state": "PA",
  "practice_areas": ["Business Law", "Health Care Law", "Real Estate Law", "Contracts & Agreements", "Landlord & Tenant"],
  "licences": [
    { "licence_id": "PA:76324", "bar_status": "Active", "eligible_to_practice": true, "admission_year": 1995, "is_primary": true },
    { "licence_id": "GA:792416", "bar_status": "Active", "eligible_to_practice": true, "admission_date": "2021-09-15", "admission_year": 2021 },
    { "licence_id": "NY:5339767", "bar_status": "Active", "eligible_to_practice": true, "admission_year": 2015 }
  ]
}
```

A directory lead tool would have handed you this lawyer up to seven times, with no licence status on any of the copies. Here he is one row.

#### The lawyer

| Field                                           | Type    | Description |
|-------------------------------------------------|---------|---------------------------------------------------------------------------------------|
| `person_id`                                     | string  | Stable lawyer id (`gsp_…`) |
| `full_name`                                     | string  | Full name, with any Jr. / III |
| `first_name` `middle_name` `last_name` `suffix` | string  | Name parts |
| `licence_count`                                 | integer | Bar licences held across the covered states |
| `licensed_states`                               | string  | Every licensing state in one cell: `"AZ; GA; ID"` |
| `eligible_anywhere`                             | boolean | Allowed to practise under at least one licence |
| `has_disciplinary_history`                      | boolean | Discipline on record under any licence. Unpaid fees and missed CLE don't count |
| `matched_licence_id`                            | string  | The licence your search matched, e.g. the bar number you looked up |
| `identity_confidence` `link_evidence`           | string  | How strongly the licences in this profile are tied to one person |
| `possible_other_licences`                       | array   | Same-name licences in other states, offered for you to judge and never merged |

#### Licence and standing

| Field                  | Type    | Description                                                             |
|------------------------|---------|-------------------------------------------------------------------------|
| `state_bar`            | string  | State of the primary licence                                            |
| `bar_number`           | string  | Bar registration number                                                 |
| `bar_status`           | string  | Active, Inactive, Suspended, Disbarred, Resigned, Retired or Deceased   |
| `bar_status_raw`       | string  | The status as the state bar words it                                    |
| `eligible_to_practice` | boolean | Currently authorised to practise                                        |
| `license_type`         | string  | Attorney, Foreign Legal Consultant, Registered In-House Counsel         |
| `admission_date`       | string  | Date admitted, `YYYY-MM-DD`                                             |
| `admission_year`       | integer | Year admitted, which is the seniority filter                            |
| `law_school`           | string  | Law school, where the state bar publishes it                            |
| `licences`             | array   | Every licence with its own status, admission and `disciplinary_actions` |

#### Contact and practice

| Field                                                          | Type   | Description |
|----------------------------------------------------------------|--------|------------------------------------------------------------------|
| `firm_name`                                                    | string | Current firm or employer |
| `mailing_address` `mailing_city` `mailing_state` `mailing_zip` | string | Address of record |
| `mailing_county`                                               | string | County of the address |
| `phone` `fax`                                                  | string | US numbers formatted `(XXX) XXX-XXXX` |
| `email`                                                        | string | Valid address. `email_sources` says whether the bar, a directory or the firm's domain supplied it |
| `website`                                                      | string | The firm's own website |
| `practice_areas` `languages`                                   | array  | Specialisations and languages |
| `firms`                                                        | array  | Firms listed for this lawyer, with address and page. May include a past firm |
| `bio` `photo_url`                                              | string | Professional summary and headshot |
| `education` `past_positions` `associations` `awards`           | array  | Career detail |
| `rating` `review_count`                                        | number | Directory rating and the number of reviews behind it |
| `<field>_sources`                                              | array  | Where each value came from. `null` means the state bar |

#### Dataset views

- **Lead list.** Name, firm, city, state, phone, email, website, practice areas and licensing states: the attorney mailing list view.
- **Overview** — one row per lawyer, flat, CSV-ready
- **Compliance check.** Name, matched licence, licensing states, eligibility, discipline and every licence.
- **Recruiting** — name, firm, city, law school, admission year, practice areas, contact
- **Full profile** — every field

***

### FAQ

#### Is this a complete list of US attorneys?

Good Standing holds every attorney licensed in its sixteen states, not only the ones who list themselves in a directory. That covers about 1.47 million lawyers, and more states are being added.

#### How is Good Standing different from a lawyer directory scraper?

Good Standing merges the directories onto the state bar record, so it is not limited to the directory. A directory scraper returns the lawyers who maintain a profile, with no licence status and a duplicate for every state they list. Good Standing returns every licensed lawyer once, verified against the bar, with the directory's bio, practice areas and ratings attached where a directory has them.

#### Can I get a lawyer email list?

Good Standing returns emails where the bars, the directories or the firm's own domain supply one, which is about 20% of the time. Set `requireEmail` to `true` for an attorney email list with an address on every row. Leave `requireContact` on instead and every row has a phone or an email.

#### Can I use it as a state bar lookup or attorney license verification?

Good Standing looks up any attorney in its sixteen states by bar number (with the state) or by email. You get every licence they hold, each with its current status and disciplinary record, including suspended and disbarred licences.

#### Does it include disbarred and suspended attorneys?

Good Standing keeps them, labelled, because compliance screening needs them. `eligibleOnly` is on by default, so a lead-generation run returns only lawyers who can practise.

***

### Need More Features?

Need another state, field or filter? [File an issue](https://console.apify.com/actors/5JZv7aeg66GsuTcJ3/issues) and say which.

### Why Use Good Standing?

- **Complete.** Every licensed attorney in sixteen states, not just the ones with a directory profile.
- **Merged.** The state bars and the major attorney directories are combined into one profile per lawyer, with standing verified and duplicates already removed, which spares you buying four lists and reconciling them in a spreadsheet.
- **Verified.** Licence status and discipline come from the bar itself.

***

Good Standing is assembled from publicly available records: the state bars' public attorney registers and public attorney directories. Use it in line with the marketing and privacy rules of your jurisdiction, and confirm licence status with the issuing bar before relying on it for a legal decision.

# Actor input Schema

## `sp_intended_usage` (type: `string`):

What will this data feed? E.g. lead lists, KYB checks, price tracking.

## `sp_improvement_suggestions` (type: `string`):

Provide any feedback or suggestions for improvements.

## `sp_contact` (type: `string`):

We'll personally help with your use case. No spam.

## `resumeCursor` (type: `string`):

Leave empty for a fresh run. To CONTINUE a previous run without paying again for records you already received, paste the `resumeCursor` value from that run's Output (the run's OUTPUT key), with the same filters. It has no effect when you look up specific records.

## `states` (type: `array`):

The state bars that licensed them. Leave empty for every state we cover.

## `practiceAreas` (type: `array`):

What they practise. Pick several to get attorneys in any of them. Only attorneys with a known practice area match.

## `admittedAfter` (type: `integer`):

Newer attorneys: e.g. 2018 for anyone admitted 2018 or later.

## `admittedBefore` (type: `integer`):

Senior attorneys: e.g. 2000 for anyone admitted in 2000 or earlier. Combine with the field above for a range.

## `firmNames` (type: `array`):

Part of a firm or employer name, e.g. Latham or Public Defender. Matches where they work now and, where we have their history, where they worked before. Several entries mean any of them.

## `lawSchools` (type: `array`):

Part of the law school name, e.g. Harvard or Hastings. Several entries mean any of them.

## `city` (type: `array`):

City of their office or address of record, e.g. Los Angeles. Exact city name, any case. Several entries mean any of them.

## `county` (type: `array`):

County of their address, e.g. Orange. Several entries mean any of them.

## `zip` (type: `array`):

5-digit ZIP codes of their address. ZIP+4 works too. Several entries mean any of them.

## `requireContact` (type: `boolean`):

On by default, so you only pay for attorneys you can reach. Turn it off for compliance work, where the licence itself is the answer.

## `requirePhone` (type: `boolean`):

No description

## `requireEmail` (type: `boolean`):

No description

## `requireWebsite` (type: `boolean`):

Their own or their firm's website.

## `eligibleOnly` (type: `boolean`):

On by default, so you get working attorneys only. Turn it off to include suspended, disbarred, retired and deceased attorneys, e.g. for a compliance or panel screen.

## `hasDisciplinaryHistory` (type: `string`):

Public disciplinary actions by the state bar, such as suspension, probation or reproval.

## `names` (type: `array`):

Part of an attorney's name, e.g. Smith or Maria Lopez. Case doesn't matter. Several entries mean any of them. Works together with every other filter.

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

Already know who you want? List their bar numbers and set 'Licensed in' to the issuing state(s), since a number is only unique within its state. The run returns exactly those attorneys, whatever their status, and ignores every other filter.

## `emails` (type: `array`):

Find attorneys by their exact email address. Ignores every other filter.

## `maxItems` (type: `integer`):

How many attorneys to return at most. 0 means no limit; a whole state can run to six figures, so check the price first.

## `includeSources` (type: `boolean`):

On by default: each field lists where its value came from (state bar, directory, or enriched). Turn it off for a simpler record with just the values.

## `addedSince` (type: `string`):

Only newly licensed or newly listed attorneys. Leave empty for everyone. On a monthly schedule, pick the last month to receive only the attorneys you have not seen.

## Actor input object example

```json
{
  "sp_contact": "Share your email here...",
  "states": [
    "CA"
  ],
  "practiceAreas": [],
  "firmNames": [],
  "lawSchools": [],
  "city": [],
  "county": [],
  "zip": [],
  "requireContact": true,
  "requirePhone": false,
  "requireEmail": false,
  "requireWebsite": false,
  "eligibleOnly": true,
  "hasDisciplinaryHistory": "any",
  "names": [],
  "barNumbers": [],
  "emails": [],
  "maxItems": 100,
  "includeSources": true
}
```

# 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 = {
    "sp_contact": "Share your email here...",
    "states": [
        "CA"
    ],
    "practiceAreas": [],
    "firmNames": [],
    "lawSchools": [],
    "city": [],
    "county": [],
    "zip": [],
    "requireContact": true,
    "requirePhone": false,
    "requireEmail": false,
    "requireWebsite": false,
    "eligibleOnly": true,
    "hasDisciplinaryHistory": "any",
    "names": [],
    "barNumbers": [],
    "emails": [],
    "maxItems": 100,
    "includeSources": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("jungle_synthesizer/good-standing-us-attorney-database").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 = {
    "sp_contact": "Share your email here...",
    "states": ["CA"],
    "practiceAreas": [],
    "firmNames": [],
    "lawSchools": [],
    "city": [],
    "county": [],
    "zip": [],
    "requireContact": True,
    "requirePhone": False,
    "requireEmail": False,
    "requireWebsite": False,
    "eligibleOnly": True,
    "hasDisciplinaryHistory": "any",
    "names": [],
    "barNumbers": [],
    "emails": [],
    "maxItems": 100,
    "includeSources": True,
}

# Run the Actor and wait for it to finish
run = client.actor("jungle_synthesizer/good-standing-us-attorney-database").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 '{
  "sp_contact": "Share your email here...",
  "states": [
    "CA"
  ],
  "practiceAreas": [],
  "firmNames": [],
  "lawSchools": [],
  "city": [],
  "county": [],
  "zip": [],
  "requireContact": true,
  "requirePhone": false,
  "requireEmail": false,
  "requireWebsite": false,
  "eligibleOnly": true,
  "hasDisciplinaryHistory": "any",
  "names": [],
  "barNumbers": [],
  "emails": [],
  "maxItems": 100,
  "includeSources": true
}' |
apify call jungle_synthesizer/good-standing-us-attorney-database --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jungle_synthesizer/good-standing-us-attorney-database"
        }
    }
}
```

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/5JZv7aeg66GsuTcJ3/builds/KZHHmZ2qWYBOdsfsw/openapi.json
