{
  "openapi": "3.0.1",
  "info": {
    "title": "BrokerCheck Scraper - Financial Advisors, Brokers & Firms",
    "description": "Scrape FINRA BrokerCheck & SEC adviser records: brokers, advisers and firms by name, CRD or firm roster. Work history, licenses, branch address, disclosures; firm AUM, phone, website, owners. Filters, monitoring, firm emails. Independent tool, not affiliated with FINRA.",
    "version": "0.1",
    "x-build-id": "jygPdyhNp7tW7t2rQ"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapesage~brokercheck-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapesage-brokercheck-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~brokercheck-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapesage-brokercheck-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~brokercheck-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapesage-brokercheck-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": [
          "searchType"
        ],
        "properties": {
          "searchType": {
            "title": "What to scrape",
            "enum": [
              "individuals",
              "firms"
            ],
            "type": "string",
            "description": "Scrape individuals (brokers & investment advisers) or firms (broker-dealers & RIA firms). Search terms, CRD numbers and the filters apply to whichever you pick.",
            "default": "individuals"
          },
          "searchTerms": {
            "title": "Search terms (names or firm names)",
            "type": "array",
            "description": "Names to search FINRA BrokerCheck / SEC IAPD for, one per row. Individuals: a person's name (`John Smith`) or a CRD number. Firms: a firm name (`Morgan Stanley`, `Edward Jones`) or a CRD number. Each term is paged until the limit below.",
            "items": {
              "type": "string"
            }
          },
          "firmCrdNumbers": {
            "title": "Firm CRD numbers - pull the full adviser/broker roster",
            "type": "array",
            "description": "Individuals mode: lists every broker and adviser registered at these firms (the firm's CRD number, e.g. `6413` for LPL Financial). Find a firm's CRD by running Firms mode with its name. In Firms mode these CRDs are looked up as firm reports.",
            "items": {
              "type": "string"
            }
          },
          "crdNumbers": {
            "title": "CRD numbers or BrokerCheck links - direct lookups",
            "type": "array",
            "description": "Full reports for specific CRD numbers, one per row. A bare number is read as an individual or a firm per the mode above; a BrokerCheck or IAPD link (`brokercheck.finra.org/individual/summary/1014415`, `.../firm/summary/6413`) decides by itself.",
            "items": {
              "type": "string"
            }
          },
          "maxResultsPerTerm": {
            "title": "Max results per term / roster",
            "minimum": 1,
            "maximum": 9000,
            "type": "integer",
            "description": "Rows to deliver per search term or firm roster, counted AFTER the filters (so 100 Texas advisers means 100 Texans). The registry search returns at most 9,000 records per search; a CRD list is never capped.",
            "default": 50
          },
          "roleFilter": {
            "title": "Role filter",
            "enum": [
              "any",
              "brokers",
              "advisers"
            ],
            "type": "string",
            "description": "Individuals: keep only currently registered brokers, only investment adviser representatives, or anyone. Firms: only broker-dealers, only investment-adviser firms, or any.",
            "default": "any"
          },
          "stateFilter": {
            "title": "State filter",
            "type": "string",
            "description": "Keep only records in these US states: `NY`, `New York`, or several separated by commas (`NY, NJ, CT`). What counts as \"in\" a state is set by the option below. Leave blank for all states.",
            "default": ""
          },
          "stateMatch": {
            "title": "State filter matches",
            "enum": [
              "branch",
              "registered",
              "either"
            ],
            "type": "string",
            "description": "Where a record must be for the state filter. Office/branch location: an individual's current branch office, a firm's main office (recommended - national reps are licensed in 50 states, so registered states match almost everyone). Registered states: states the person or firm is registered or notice-filed in. Either: both.",
            "default": "branch"
          },
          "activeOnly": {
            "title": "Active registrations only",
            "type": "boolean",
            "description": "Keep only currently registered brokers/advisers (or firms with an active broker-dealer or adviser registration). Off includes former and inactive registrations.",
            "default": false
          },
          "withDisclosuresOnly": {
            "title": "With disclosures only",
            "type": "boolean",
            "description": "Keep only records that have reportable disclosures (regulatory actions, customer disputes, terminations, criminal or financial events) - for compliance, due diligence and screening.",
            "default": false
          },
          "includeDetails": {
            "title": "Fetch full reports (recommended)",
            "type": "boolean",
            "description": "Open each record's full report: employment history, branch address, Series exams & licenses, registered states, SRO categories and every disclosure event; for firms the office address and phone, owners & executives, registrations, Form ADV brochures and the SEC Form ADV data (assets under management, website, headcount, clients). Off = faster lightweight records from the search results only.",
            "default": true
          },
          "source": {
            "title": "Registries to read",
            "enum": [
              "auto",
              "brokercheck",
              "sec_iapd"
            ],
            "type": "string",
            "description": "Auto (recommended): FINRA BrokerCheck and SEC IAPD reports merged, plus the SEC's Form ADV files for advisory firms. BrokerCheck only or SEC IAPD only read a single registry - fewer requests, fewer fields. To keep only brokers or only advisers use the Role filter.",
            "default": "auto"
          },
          "enrichFirmContacts": {
            "title": "Enrich firm contacts (crawl the firm website for emails, phones, socials)",
            "type": "boolean",
            "description": "Firms mode, opt-in: for firms that list a website on Form ADV, read the firm's own site (home page + one contact/about page) for e-mail addresses, phone numbers and social profiles. FINRA and the SEC never publish e-mail addresses - this is the only public source. Billed only when contacts are found.",
            "default": false
          },
          "monitorMode": {
            "title": "Monitoring mode - only new or changed records",
            "type": "boolean",
            "description": "Remember every CRD delivered by earlier runs and deliver ONLY records that are new, or whose disclosures changed (a new regulatory event or customer dispute). Pair with an Apify Schedule to watch a firm roster or a list of CRDs. Unchanged records are skipped and not billed.",
            "default": false
          },
          "monitorStoreName": {
            "title": "Monitor store name",
            "type": "string",
            "description": "Named key-value store that holds what earlier runs delivered (letters, digits and hyphens). Use a different name per watched target to keep histories separate.",
            "default": "brokercheck-monitor"
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 12,
            "type": "integer",
            "description": "Maximum parallel report requests. Requests are paced to stay within the registries' rate limits; lower it if you run several large runs at once.",
            "default": 8
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxy settings. FINRA BrokerCheck and SEC IAPD work through the default Apify datacenter proxy.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}