{
  "openapi": "3.0.1",
  "info": {
    "title": "FINRA BrokerCheck Scraper - Broker & Advisor Data",
    "description": "Download the entire FINRA BrokerCheck database (650K+ brokers & advisors) or search by name, CRD, or state. Full-registry bulk export, delta refresh (pay only for changed records), employment history, licenses, exams, and disclosures. FINRA offers no bulk export — this actor is the workaround.",
    "version": "1.0",
    "x-build-id": "GcMb2Qurdp674Q5Ut"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/jungle_synthesizer~finra-brokercheck-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-jungle_synthesizer-finra-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/jungle_synthesizer~finra-brokercheck-scraper/runs": {
      "post": {
        "operationId": "runs-sync-jungle_synthesizer-finra-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/jungle_synthesizer~finra-brokercheck-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-jungle_synthesizer-finra-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": [
          "sp_intended_usage",
          "sp_improvement_suggestions",
          "mode"
        ],
        "properties": {
          "sp_intended_usage": {
            "title": "What is the intended usage of this data?",
            "minLength": 1,
            "type": "string",
            "description": "What will this data feed? E.g. lead lists, KYB checks, price tracking."
          },
          "sp_improvement_suggestions": {
            "title": "How can we improve this crawler for you?",
            "minLength": 1,
            "type": "string",
            "description": "Provide any feedback or suggestions for improvements."
          },
          "sp_contact": {
            "title": "Contact email (optional)",
            "minLength": 1,
            "type": "string",
            "description": "We'll personally help with your use case. No spam."
          },
          "resumeCursor": {
            "title": "Resume cursor (continue a previous run)",
            "type": "string",
            "description": "Leave empty for a fresh crawl. To CONTINUE a previous run where it stopped — without paying again for records you already received — paste the `resumeCursor` value from that run's Output (the run's OUTPUT key). Resume promptly: the previous run's data expires with your account's retention window (free tier: your ~10 most recent runs)."
          },
          "mode": {
            "title": "Search Mode",
            "enum": [
              "individual_search",
              "firm_search",
              "by_crd_individual",
              "by_crd_firm",
              "crawl_all",
              "crawl_delta"
            ],
            "type": "string",
            "description": "What to search for. individual_search / firm_search paginate results. by_crd_* looks up specific CRD numbers. crawl_all downloads the whole individual registry (set maxItems high). crawl_delta is set-and-forget freshness: schedule it and every run outputs ONLY what changed since the previous run. Coverage builds automatically in a snapshot on your account — start with a full export, a state, or a capped test; uncovered records bill as new once, covered ground bills the scan fee.",
            "default": "individual_search"
          },
          "queries": {
            "title": "Names to search",
            "type": "array",
            "description": "Search one or more names — add an entry per name. Each name runs as its own search and results are combined without duplicates. Not needed for the crawl modes or when using only the Firm Name Filter.",
            "items": {
              "type": "string"
            }
          },
          "states": {
            "title": "States",
            "type": "array",
            "description": "Limit to one or more US states — two-letter codes, one per entry (e.g. NY, NJ, CT). Leave empty for all states. Brokers registered in several listed states are returned (and billed) once.",
            "items": {
              "type": "string"
            }
          },
          "firmName": {
            "title": "Firm Name Filter",
            "type": "string",
            "description": "Filter individuals by current-employer firm name (case-insensitive). Works with or without a search query."
          },
          "fetchDetails": {
            "title": "Fetch Full Detail Records",
            "type": "boolean",
            "description": "When on (default), fetch each individual's full profile (exams, disclosures, employment history) — billed at the premium record rate. When off, emit fast listing-level records (identity, current employer + location, scope) at the base rate — far faster and cheaper for bulk crawls.",
            "default": true
          },
          "crdNumbers": {
            "title": "CRD Numbers",
            "type": "array",
            "description": "List of CRD numbers. Required when mode is by_crd_individual or by_crd_firm. Example: [\"1113790\", \"1056376\"]",
            "items": {
              "type": "string"
            }
          },
          "baselineDatasetId": {
            "title": "Baseline Dataset ID (crawl_delta)",
            "type": "string",
            "description": "OPTIONAL, advanced (crawl_delta): leave empty — coverage is automatic via a snapshot saved on your account. Set this only to seed coverage from an existing crawl_all dataset (not a delta output) instead of re-buying those records; the snapshot is saved after that, so remove it again. Delta runs bill delivered records plus a sweep fee of 1 record-event per 50 already-covered records scanned (~$20 full-registry at steady state)."
          },
          "includeInactive": {
            "title": "Include Inactive Records",
            "type": "boolean",
            "description": "Include individuals/firms with InActive or NotInScope status. Default: false.",
            "default": false
          },
          "includeDisclosures": {
            "title": "Include Disclosures",
            "type": "boolean",
            "description": "Include full disclosure events (regulatory actions, customer complaints) in output. Always fetched from detail; this flag only controls output.",
            "default": true
          },
          "maxItems": {
            "title": "Max Results",
            "type": "integer",
            "description": "Maximum number of records to return.",
            "default": 100
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}