{
  "openapi": "3.0.1",
  "info": {
    "title": "Lawyer & Law Firm Leads Scraper for FindLaw",
    "description": "Scrape FindLaw's lawyer directory by practice area & city, ZIP or state: law firms & attorneys with every email, phone, website, office, practice area, award, roster, ratings & reviews (FindLaw, Avvo, Lawyers.com) and a lead score. Monitoring mode. Independent tool, not affiliated with FindLaw.",
    "version": "0.1",
    "x-build-id": "fkVGLSG5fpmphpaKy"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapesage~findlaw-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapesage-findlaw-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/scrapesage~findlaw-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapesage-findlaw-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/scrapesage~findlaw-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapesage-findlaw-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",
        "required": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "What to scrape",
            "enum": [
              "search",
              "startUrls"
            ],
            "type": "string",
            "description": "Search builds a lawyer list from practice areas × locations. Start URLs scrapes the FindLaw profile or listing URLs you paste in.",
            "default": "search"
          },
          "practiceAreas": {
            "title": "Practice areas",
            "type": "array",
            "description": "Type a practice area by name or by its FindLaw URL slug, one per row, for example Personal Injury, Divorce, Criminal Defense, DUI, Bankruptcy, Immigration, Estate Planning, Car Accident or Employment. All 120 FindLaw practice areas work; the README lists every name and slug. A term FindLaw does not use is matched to the closest FindLaw area when it is a clear match, otherwise it is skipped and named on the run card (nothing is billed for it).",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Where to search, one per row: \"City, ST\" (\"Los Angeles, CA\", \"Houston, Texas\"), a 5-digit ZIP code (\"77002\"), a county (\"Orange County, CA\") or a whole state (\"California\"). A state sweeps its biggest cities first, up to \"Max cities per state\".",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Start URLs (FindLaw profile or listing URLs)",
            "type": "array",
            "description": "FindLaw URLs to scrape directly: firm or attorney profiles (lawyers.findlaw.com/<state>/<city>/<name-id>/) or search result pages (lawyers.findlaw.com/<practice-area>/<state>/<city>/). Each URL is recognised and routed automatically. One per row.",
            "items": {
              "type": "string"
            }
          },
          "urlsFromFile": {
            "title": "Import URLs from a file",
            "type": "string",
            "description": "Paste a list of FindLaw URLs (one per line), OR one link to a .txt/.csv file, Google Sheet or Google Drive file that contains them. Use this to import many Start URLs at once instead of typing each."
          },
          "maxResults": {
            "title": "Max results (firms/attorneys)",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Most firm and attorney records to return across the whole run (reviews are capped separately). Several searches share it fairly. In monitoring mode this is how deep each run looks: the top N listings of each search are checked and only the ones never returned before are delivered.",
            "default": 100
          },
          "maxCitiesPerState": {
            "title": "Max cities per state",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "For a whole-state location: how many cities to search, biggest first (for example California: Los Angeles, San Diego, San Jose, San Francisco ...). 0 skips state locations. Ignored when a city is given.",
            "default": 10
          },
          "includeProfileDetails": {
            "title": "Include full profiles (e-mail, offices, practice areas)",
            "type": "boolean",
            "description": "Open each firm's FindLaw profile for the full record: the firm's contact e-mail address(es), fax, every website, every office with hours, practice areas, languages, awards and Super Lawyers, firm overview, attorney roster, ratings by source and FindLaw's profile tier. One extra page per firm, no extra charge. Turn off for a faster list with name, phone, address, website and overall rating only.",
            "default": true
          },
          "withEmailOnly": {
            "title": "Only firms with an e-mail address",
            "type": "boolean",
            "description": "Return only firms and attorneys whose FindLaw profile lists an e-mail address. Firms without one are skipped and not billed. Profiles are opened for this check even when full profiles are off.",
            "default": false
          },
          "includeReviews": {
            "title": "Include client reviews (billed per review)",
            "type": "boolean",
            "description": "Also return each firm's client reviews as their own rows (type \"review\"): star rating, author as FindLaw shows it, date, full text, source (FindLaw, Avvo or Lawyers.com), the attorney reviewed, hired / recommended / verified flags and FindLaw's review themes. Each review row is billed as a \"Review\" event. In monitoring mode only reviews posted since the previous run are returned.",
            "default": false
          },
          "maxReviewsPerFirm": {
            "title": "Max reviews per firm",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "How many reviews (newest first) to return per firm when client reviews are on.",
            "default": 20
          },
          "includeAttorneys": {
            "title": "Include individual attorneys (billed per attorney)",
            "type": "boolean",
            "description": "Also return the individual attorneys FindLaw lists on each search page (type \"attorney\"), alternating with the firms so both share Max results. With full profiles on, each attorney's own profile is opened too: e-mail, bar admissions with years, education, affiliations, languages, awards and ratings. Each attorney row is billed as an \"Attorney\" event.",
            "default": false
          },
          "enrichContactEmails": {
            "title": "Enrich contacts from the firm's website (billed per firm enriched)",
            "type": "boolean",
            "description": "Opt-in extra lead enrichment: visit each firm's own website (home, contact and about pages) for more e-mail addresses, phone numbers and social links. Billed as a \"Website contacts\" event only when the visit finds something FindLaw did not already give. Map, social and directory links are never crawled. FindLaw already supplies the firm's e-mail when full profiles are on.",
            "default": false
          },
          "monitorMode": {
            "title": "Monitoring mode - only new records",
            "type": "boolean",
            "description": "Remember what earlier runs returned and deliver only firms and attorneys that are new in the top \"Max results\" of each search (and, with reviews on, reviews posted since the previous run). Pair it with an Apify Schedule to track new listings over time.",
            "default": false
          },
          "monitorStoreName": {
            "title": "Monitor store name",
            "type": "string",
            "description": "Named key-value store that holds what monitoring mode has already returned. Use a different name per tracked search to keep their histories apart.",
            "default": "findlaw-monitor"
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Leave the default (Apify datacenter proxy): a request FindLaw refuses is retried on a fresh IP and, if needed, on a residential IP automatically, at no extra cost to you. Choosing your own proxy turns the automatic fallback off.",
            "default": {
              "useApifyProxy": true
            }
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many profile pages are fetched in parallel.",
            "default": 8
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}