{
  "openapi": "3.0.1",
  "info": {
    "title": "Avvo Scraper - US Attorney Directory & Lawyer Leads",
    "description": "Scrape Avvo attorney profiles by city & practice area: Avvo Rating, reviews & star breakdown, bar licenses & discipline, fees, offices, direct phone, website & optional emails. Fast directory mode, filters, monitoring. Export JSON, CSV, Excel. Independent tool, not affiliated with Avvo.",
    "version": "0.1",
    "x-build-id": "5RrfIMzRSwjjsyEPd"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapesage~avvo-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapesage-avvo-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~avvo-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapesage-avvo-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~avvo-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapesage-avvo-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": {
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Where to search. Use <code>City, ST</code> (<code>Austin, TX</code>, <code>New York, NY</code>, <code>Los Angeles, CA</code>), the raw <code>st/city</code> slug (<code>tx/austin</code>), or a whole state (<code>Texas</code>, <code>CA</code>). Each location is combined with every practice area below. A city Avvo has no directory page for is skipped and named in the run's status (never swapped for the whole state).",
            "items": {
              "type": "string"
            }
          },
          "practiceAreas": {
            "title": "Practice areas",
            "type": "array",
            "description": "Practice areas to search, combined with every location. Type everyday words or Avvo's own names — e.g. <code>personal injury</code>, <code>divorce</code>, <code>DUI</code>, <code>criminal defense</code>, <code>estate planning</code>, <code>family</code>, <code>immigration</code>, <code>bankruptcy</code>, <code>employment</code>, <code>real estate</code>, <code>car accidents</code>, <code>workers compensation</code>, <code>medical malpractice</code>, <code>wrongful death</code> — or an Avvo directory slug (<code>dui-dwi-lawyer</code>). All 142 Avvo practice areas are understood; a term Avvo does not have is skipped with the closest matches named in the status (nothing billed). Leave empty for every attorney in each location.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Direct Avvo URLs: attorney profiles (<code>https://www.avvo.com/attorneys/78701-tx-douglas-oconnell-87772.html</code>) or directory listings (<code>https://www.avvo.com/divorce-separation-lawyer/tx/austin.html</code>). Used in addition to the locations above. You can also link or upload a text file of URLs here.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "urlsFromFile": {
            "title": "Import URLs from a file",
            "type": "string",
            "description": "Paste a list of Avvo URLs (one per line), OR one link to a .txt/.csv file, Google Sheet or Google Drive file containing them. Lets you import many start URLs at once instead of typing each. Google Sheet/Drive share links are handled automatically."
          },
          "maxResults": {
            "title": "Max attorneys",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum number of attorney records across all locations, practice areas and URLs. With several searches the cap is shared fairly between them.",
            "default": 100
          },
          "includeProfileDetails": {
            "title": "Include full profile details",
            "type": "boolean",
            "description": "Open each attorney's profile for the full record: Avvo Rating, review score + star breakdown, review themes and AI review summary, peer endorsements, every bar license with status and misconduct record, disciplinary actions, practice-area split, fees (free consultation, contingency, hourly), awards and honors with years, work history, education, associations, every office with its phone, fax and website, social links and bio. Turn off for a fast, low-cost sweep of the directory cards only (name, firm, street, Avvo Rating, review score + count, years licensed, practice areas, the phone Avvo shows).",
            "default": true
          },
          "includeReviews": {
            "title": "Include review and endorsement texts",
            "type": "boolean",
            "description": "Add the most recent client reviews shown on each profile (rating, title, full text, date, whether the client hired the attorney, the attorney's reply) and the peer endorsements (endorsing lawyer, relationship, text). Review counts, star breakdown, themes and the AI summary are always included; turn this off for slimmer CSV/Excel exports. Requires profile details.",
            "default": true
          },
          "enrichEmails": {
            "title": "Find emails on the firm's website",
            "type": "boolean",
            "description": "For each attorney with a website, visit that website (the attorney's page, the home page and one contact page) to collect contact emails and phone numbers. Avvo itself never publishes emails. The headline <code>email</code> is only an address on the firm's own domain (or a personal mailbox), preferring the attorney's own; every address found is listed in <code>enrichedEmails</code>.",
            "default": false
          },
          "minAvvoRating": {
            "title": "Minimum Avvo Rating (1–10)",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Only keep attorneys whose numeric Avvo Rating is at least this value (e.g. 9 for Superb). 0 = no minimum.",
            "default": 0
          },
          "minReviews": {
            "title": "Minimum client reviews",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep attorneys with at least this many client reviews. 0 = no minimum.",
            "default": 0
          },
          "withPhoneOnly": {
            "title": "Only attorneys with a phone number",
            "type": "boolean",
            "description": "Skip attorneys without a phone number. Avvo shows phone numbers for its Pro (paying) members; most other profiles only offer a message form.",
            "default": false
          },
          "withWebsiteOnly": {
            "title": "Only attorneys with a website",
            "type": "boolean",
            "description": "Skip attorneys without a website (needs the profile page, so profile details are fetched).",
            "default": false
          },
          "monitorMode": {
            "title": "Monitor mode (only new attorneys)",
            "type": "boolean",
            "description": "Remember attorney IDs delivered by earlier runs (in a named key-value store) and deliver only attorneys not delivered before. Pair it with an Apify Schedule for a steady new-lead feed: the schedule starts the run, monitor mode skips everyone you already have.",
            "default": false
          },
          "monitorStoreName": {
            "title": "Monitor store name",
            "type": "string",
            "description": "Name of the key-value store that holds the monitor memory. Use different names to track independent searches separately (lowercase letters, digits and hyphens).",
            "default": "avvo-monitor"
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Avvo refuses datacenter and direct connections, so this actor always uses residential IPs (US by default). Leave as is unless you supply your own US residential proxies.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "US"
            }
          },
          "maxConcurrency": {
            "title": "Parallel pages",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many Avvo pages to load at the same time (1–3; higher values are treated as 3, the most one IP is given without being refused).",
            "default": 3
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}