{
  "openapi": "3.0.1",
  "info": {
    "title": "US Lawyers Directory Scraper",
    "description": "Attorneys from the official New York, California and Florida state bar registers: name, bar number, license status, admission, law firm, address, phone and email. Search by name, firm, city, county or bar number. Export to JSON, CSV or Excel.",
    "version": "0.0",
    "x-build-id": "beK41H3Cufv6Az4Gy"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/nice_dev~us-lawyers-directory-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-nice_dev-us-lawyers-directory-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/nice_dev~us-lawyers-directory-scraper/runs": {
      "post": {
        "operationId": "runs-sync-nice_dev-us-lawyers-directory-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/nice_dev~us-lawyers-directory-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-nice_dev-us-lawyers-directory-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "states": {
            "title": "State bars",
            "minItems": 1,
            "uniqueItems": true,
            "type": "array",
            "description": "Which state bars to search: `NY` (New York, about 434 000 registrations, open data), `CA` (California, about 290 000 licensees), `FL` (Florida, about 110 000 members), `WA` (Washington, about 65 000 lawyers: the email is on the profile, tick Full profile), `NC` (North Carolina, about 60 000 members: email and phone on the profile, tick Full profile), `NV` (Nevada, about 17 000 bar numbers: the list is the whole record, email included, no profile page), `OR` (Oregon, about 25 000 licensees: the list gives the name and the city, the rest is on the profile, tick Full profile), `OH` (Ohio, about 107 000 attorneys: the list gives the name, status and admission date, the address and phone are on the profile, tick Full profile; no email), `MA` (Massachusetts, over 100 000 attorneys: the list is the whole record, no email, no profile page), `PA` (Pennsylvania, about 134 000 attorneys: the list gives the name, status, city and county, the rest is on the profile, tick Full profile; no email), `WI` (Wisconsin, about 50 000 attorneys, former members and the deceased included: the list gives the name, status, firm and city, the address and phone (published for few) and the discipline history are on the profile, tick Full profile; no email), `VA` (Virginia, about 76 000 lawyers, former members included: the list is the whole record, status and date of license included, no email, phone nor profile page), `CO` (Colorado, about 60 000 attorneys, former members and the deceased included: the list gives the name and status, the admission date, firm, address, phone and discipline history are on the profile, tick Full profile; no email), `MO` (Missouri, about 45 000 lawyers, inactive ones included: the list gives the name, city, ZIP code and standing, the bar number and the date admitted are on the profile, tick Full profile; no email, phone nor firm), `GA` (Georgia, about 74 500 lawyers, deceased and former members included: the list is the whole record — status, admission date, firm, address, phone and email, each one only when the lawyer lets the directory show it; no profile page), `IL` (Illinois, about 200 000 lawyers, retired and deceased included: the list gives the name, city and date admitted, the status, registered address, phone and email are on the profile, tick Full profile; a last name narrows the search, otherwise 26 searches by first letter are made; no search by bar number), `AZ` (Arizona, about 36 000 members, former members included: the list gives the name, bar number, firm, address, email and status, the phones, admission date, law school, languages and areas of practice are on the profile, tick Full profile; no search by bar number), `TX` (Texas, about 190 000 lawyers, inactive and deceased ones included: the list gives the name, firm, address, practice areas, phone and status, the bar number, date licensed and law school are on the profile, tick Full profile; no email), `TN` (Tennessee, about 43 000 attorneys, deceased and former ones included: the list gives the number, name, city, county and status, the address, phone and email (each only when the attorney made it public), the year licensed and the law school are on the profile, tick Full profile), `MI` (Michigan, about 70 800 attorneys, deceased and former ones included: the list gives the name, city and state, the bar number, status, address, phone, fax, email (each only when the attorney made it public), website, date licensed, law school, sections and areas of practice are on the profile, tick Full profile), `IN` (Indiana, an estimated 40 000 to 60 000 attorneys, temporary admissions included: the list gives the number, name, status, date admitted, city and state, the firm, address, phone and email (each only when the attorney gave it) are on the profile, tick Full profile; a last name, a first name or a city is needed, 5 000 attorneys at most per search), `CT` (Connecticut, about 65 000 attorneys, retired and deceased ones included, firms left out: the list gives the Juris number, name, status, date admitted, firm and address, the phone and the court history are on the profile, tick Full profile; no email), `USPTO` (not a state bar: the federal roster of registered patent attorneys and agents, about 54 000 practitioners from every state and abroad; the list is the whole record, no email, no profile page). Each search below runs in each state picked.",
            "items": {
              "type": "string",
              "enum": [
                "NY",
                "CA",
                "FL",
                "WA",
                "NC",
                "NV",
                "OR",
                "OH",
                "MA",
                "PA",
                "USPTO",
                "WI",
                "VA",
                "CO",
                "MO",
                "GA",
                "IL",
                "AZ",
                "TX",
                "TN",
                "MI",
                "IN",
                "CT"
              ],
              "enumTitles": [
                "New York",
                "California",
                "Florida",
                "Washington",
                "North Carolina",
                "Nevada",
                "Oregon",
                "Ohio",
                "Massachusetts",
                "Pennsylvania",
                "USPTO (federal patent roster)",
                "Wisconsin",
                "Virginia",
                "Colorado",
                "Missouri",
                "Georgia",
                "Illinois",
                "Arizona",
                "Texas",
                "Tennessee",
                "Michigan",
                "Indiana",
                "Connecticut"
              ]
            },
            "default": [
              "NY",
              "CA",
              "FL"
            ]
          },
          "lastName": {
            "title": "Last name",
            "maxLength": 50,
            "type": "string",
            "description": "Attorney's last name, or its first letters (e.g. `Goldb` finds Goldberg, Goldblum…). Empty = every name."
          },
          "lastNames": {
            "title": "More last names",
            "maxItems": 100,
            "uniqueItems": true,
            "type": "array",
            "description": "Several last names in one run: one search per name (times each city below). Added to **Last name**; an attorney found by several searches is saved once.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "firstName": {
            "title": "First name",
            "maxLength": 50,
            "type": "string",
            "description": "Attorney's first name, or its first letters. Empty = every first name."
          },
          "nameMatch": {
            "title": "Name match",
            "enum": [
              "beginsWith",
              "exact",
              "soundsLike"
            ],
            "type": "string",
            "description": "`beginsWith` = the name starts with what you typed; `exact` = the whole name; `soundsLike` = names that sound alike (California and Florida phonetic search; New York falls back to begins-with). Florida's own search also matches hyphenated names (`Smith` finds `Anthony-Smith`); `exact` removes them.",
            "default": "beginsWith"
          },
          "firmName": {
            "title": "Law firm",
            "maxLength": 100,
            "type": "string",
            "description": "Law firm name, or a word of it (e.g. `Latham`). Empty = any firm."
          },
          "city": {
            "title": "City",
            "maxLength": 100,
            "type": "string",
            "description": "City of the attorney's address, as written on the bar register (e.g. `New York`, `Los Angeles`, `Miami`). Empty = the whole state."
          },
          "cities": {
            "title": "More cities",
            "maxItems": 100,
            "uniqueItems": true,
            "type": "array",
            "description": "Several cities in one run: every last name is searched in every city (3 names × 4 cities = 12 searches per state bar; at most 500 searches per run, all state bars counted). Added to **City**.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "counties": {
            "title": "Counties",
            "maxItems": 100,
            "uniqueItems": true,
            "type": "array",
            "description": "County of the attorney's address, by name (e.g. `Kings`, `Los Angeles`, `Miami-Dade`). A county that is not in a state picked above is an input error.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "zipCodes": {
            "title": "ZIP codes",
            "maxItems": 100,
            "uniqueItems": true,
            "type": "array",
            "description": "5-digit ZIP codes of the attorney's address (e.g. `10017`, `90210`) — New York and California: the Florida directory has no ZIP code search (use cities or counties there).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "barNumbers": {
            "title": "Bar numbers",
            "maxItems": 1000,
            "uniqueItems": true,
            "type": "array",
            "description": "Look up attorneys by bar / registration number, written `STATE:number` (`CA:231838`, `NY:6366066`, `FL:175684`), or a California range `CA:300000-300999` (every licensee of the range, up to 10 000 numbers per range and 50 000 per run). A profile URL of the California or Florida bar works too. When this list is not empty, the name / firm / place searches above are not run.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max attorneys",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Maximum number of attorneys to save for the whole run (after deduplication and filters). 0 = no limit.",
            "default": 100
          },
          "maxItemsPerQuery": {
            "title": "Max attorneys per search",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Cap for EACH search (state × name × city), so that the first search cannot use up the whole **Max attorneys** budget. 0 = no per-search cap.",
            "default": 0
          },
          "extractDetails": {
            "title": "Full profile",
            "type": "boolean",
            "description": "Open each attorney's profile page (1 extra request per attorney) in California (email, phone, website, practice areas, languages, law school, license and discipline history) and Florida (county, admission date, discipline history, law school, languages, courts, firm size and position, physical address). Each attorney delivered with its profile is charged the `attorney-details` event on top of the attorney (see Pricing); a profile a filter drops is not. Off by default = results-list fields only: California then has no contact data, and a bar whose rows lack what a filter below asks is not searched (tick Full profile to search it). New York has no profile page: never charged there.",
            "default": false
          },
          "enrichEmails": {
            "title": "Find the firm's email on its website",
            "type": "boolean",
            "description": "When the bar gives no email, look for one on the firm's website (up to 3 pages of the site): the bar's website, or, when the bar gives none (New York never does), the firm's own site, looked for by the firm's name and city and delivered too (`websiteSource` = `search`). It is the firm's address, often info@ or contact@ — never guaranteed to be the attorney's. Needs Full profile ticked. Only an address of the firm is kept — on the website's own domain, or carrying the firm's name — never a web designer's credit. Charged per email found (see Pricing); the website itself is free.",
            "default": false
          },
          "statuses": {
            "title": "License status",
            "uniqueItems": true,
            "type": "array",
            "description": "Keep only these statuses (the bar's own status is in the `status` field, the common one in `statusCategory`). Empty = every status.",
            "items": {
              "type": "string",
              "enum": [
                "active",
                "inactive",
                "suspended",
                "disbarred",
                "resigned",
                "deceased",
                "other"
              ],
              "enumTitles": [
                "Active / registered",
                "Inactive",
                "Suspended / not eligible / delinquent",
                "Disbarred",
                "Resigned",
                "Deceased",
                "Other"
              ]
            },
            "default": []
          },
          "practiceAreas": {
            "title": "Practice areas",
            "maxItems": 20,
            "uniqueItems": true,
            "type": "array",
            "description": "Keep attorneys who declare one of these practice areas, by name (e.g. `Immigration`, `Family`, `Real Estate`). California and Florida publish practice areas on the profile page; New York does not (New York is then not searched).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "languages": {
            "title": "Languages spoken",
            "maxItems": 20,
            "uniqueItems": true,
            "type": "array",
            "description": "Keep attorneys who speak one of these languages (e.g. `Spanish`, `Mandarin`). California and Florida only, on the profile page (New York is then not searched).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "certifications": {
            "title": "Board certifications",
            "maxItems": 20,
            "uniqueItems": true,
            "type": "array",
            "description": "Keep attorneys certified as specialists in one of these areas, by name (e.g. `Family Law`, `Immigration`, `Criminal`): California certified specialists and Florida board certifications (New York is then not searched).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "admittedFromYear": {
            "title": "Admitted from (year)",
            "minimum": 1900,
            "maximum": 2100,
            "type": "integer",
            "description": "Keep attorneys admitted to the bar in this year or later (e.g. `2020` for recent admissions)."
          },
          "admittedToYear": {
            "title": "Admitted until (year)",
            "minimum": 1900,
            "maximum": 2100,
            "type": "integer",
            "description": "Keep attorneys admitted in this year or earlier."
          },
          "maxFirmSize": {
            "title": "Max firm size",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Keep solo practitioners and small firms: attorneys whose firm has at most this many attorneys (New York: counted on the register; Florida: the bar's size bracket). California does not publish it (California attorneys are kept)."
          },
          "requireEmail": {
            "title": "With email only",
            "type": "boolean",
            "description": "Keep only attorneys with an email (California and Florida; New York publishes none and is then not searched).",
            "default": false
          },
          "requirePhone": {
            "title": "With phone only",
            "type": "boolean",
            "description": "Keep only attorneys with a phone number.",
            "default": false
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "maxItems": 50,
            "uniqueItems": true,
            "type": "array",
            "description": "Drop the attorneys whose name or firm contains one of these words (case and accents ignored), e.g. `Legal Aid`, `District Attorney`.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "onlyNew": {
            "title": "Only new attorneys",
            "type": "boolean",
            "description": "Skip the attorneys that a previous run (same **Memory key**) already delivered: they are not saved and not charged, and their profile page is not even opened. First run = everything is new.",
            "default": false
          },
          "trackStatusChanges": {
            "title": "Also return status changes",
            "type": "boolean",
            "description": "With **Only new attorneys**: also return the attorneys already delivered whose status category changed since (active, inactive, suspended, disbarred, resigned, deceased), with `changeType`, `previousStatus` and `previousStatusCategory`. A returned attorney is charged like any other. The run reads every results page of its searches (a status can change anywhere), and the memory holds up to 150,000 attorneys per **Memory key**: watch a city, a firm or a list of names rather than a whole state.",
            "default": false
          },
          "stateKey": {
            "title": "Memory key",
            "pattern": "^[a-zA-Z0-9_-]{1,64}$",
            "maxLength": 64,
            "type": "string",
            "description": "Name of the memory used by **Only new attorneys**. Give each schedule / task its own key (e.g. `miami-immigration`) so that they do not share their memory. Letters, digits, `-` and `_`.",
            "default": "default"
          },
          "resetState": {
            "title": "Reset the memory",
            "type": "boolean",
            "description": "Forget everything remembered under this **Memory key** before the run: this run returns (and charges) every attorney again. Untick it afterwards.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy or your own proxies. Keep the default: it is included in the price. The Florida Bar, the Tennessee directory, the Indiana Roll of Attorneys and the Connecticut look-up turn away visitors from outside the United States: your own proxies must leave from the US. The residential Apify proxy is not available in this Actor.",
            "default": {
              "useApifyProxy": true
            }
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Maximum number of requests processed in parallel.",
            "default": 4
          },
          "maxRequestsPerMinute": {
            "title": "Max requests per minute",
            "minimum": 10,
            "maximum": 2000,
            "type": "integer",
            "description": "Most requests to the bars in any 60 seconds, all of them counted: results pages and profile pages. A budget, not an even pace: up to this many can leave at once when the minute starts (spread them with the minimum delay below). Lower it if a bar answers HTTP 429 / 403 in the log.",
            "default": 120
          },
          "minRequestIntervalMs": {
            "title": "Min delay between requests",
            "minimum": 0,
            "maximum": 60000,
            "type": "integer",
            "description": "Smallest gap between two requests, in milliseconds. Unlike the per-minute rate, this spreads the requests evenly instead of letting them go out in a burst. 0 = no gap (Washington, North Carolina and Oregon, whose pages need several requests each, keep 500 ms between two of their requests unless you set a gap here).",
            "default": 0
          },
          "maxRequestRetries": {
            "title": "Max request retries",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Retries per request before it is marked as failed. Behind a proxy, a request a bar turns away is also retried on a new proxy session up to 10 times without using up these retries.",
            "default": 5
          },
          "debugLog": {
            "title": "Debug log",
            "type": "boolean",
            "description": "Include debug messages in the run log.",
            "default": false
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}