{
  "openapi": "3.0.1",
  "info": {
    "title": "NMLS Professional License Lookup Scraper — Mortgage MLOs",
    "description": "Professional license lookup scraper for the US mortgage industry — search NMLS Consumer Access for loan originators (MLOs), lending companies, and branches. Row-per-entity with state license lookup, disclosures, and sponsor links.",
    "version": "1.0",
    "x-build-id": "kmocWiO0L5zSoglWk"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/jungle_synthesizer~nmls-consumer-access-crawler/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-jungle_synthesizer-nmls-consumer-access-crawler",
        "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~nmls-consumer-access-crawler/runs": {
      "post": {
        "operationId": "runs-sync-jungle_synthesizer-nmls-consumer-access-crawler",
        "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~nmls-consumer-access-crawler/run-sync": {
      "post": {
        "operationId": "run-sync-jungle_synthesizer-nmls-consumer-access-crawler",
        "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": {
          "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."
          },
          "mode": {
            "title": "Query Mode",
            "enum": [
              "by_nmls_id",
              "by_name",
              "by_state",
              "by_company_employees"
            ],
            "type": "string",
            "description": "How to discover entities. 'by_name' and 'by_state' paginate search results; 'by_nmls_id' fetches specific entities directly; 'by_company_employees' pulls MLOs for each listed sponsoring company.",
            "default": "by_name"
          },
          "nmlsIds": {
            "title": "NMLS IDs",
            "type": "array",
            "description": "List of NMLS IDs to fetch directly. Used when mode = by_nmls_id. With entityType BRANCH, these are branch NMLS IDs.",
            "items": {
              "type": "string"
            }
          },
          "names": {
            "title": "Names",
            "type": "array",
            "description": "Company or individual names for full-text search. Used when mode = by_name. Each name is searched separately. With entityType BRANCH, give the COMPANY's name: the actor finds the company and returns its branch locations (each with parent_company_nmls_id).",
            "items": {
              "type": "string"
            }
          },
          "states": {
            "title": "States",
            "type": "array",
            "description": "US states/territories. In mode=by_state this is the search itself; in every other mode it filters the results. NMLS matches on LICENCE state (active or not), so a record kept for a given state may show an address elsewhere or hold only a lapsed licence there — turn on activeLicenseOnly to keep just records with an ACTIVE licence in these states, and check licenses / active_license_states to see the tie.",
            "items": {
              "type": "string",
              "enum": [
                "AL",
                "AK",
                "AZ",
                "AR",
                "CA",
                "CO",
                "CT",
                "DE",
                "FL",
                "GA",
                "HI",
                "ID",
                "IL",
                "IN",
                "IA",
                "KS",
                "KY",
                "LA",
                "ME",
                "MD",
                "MA",
                "MI",
                "MN",
                "MS",
                "MO",
                "MT",
                "NE",
                "NV",
                "NH",
                "NJ",
                "NM",
                "NY",
                "NC",
                "ND",
                "OH",
                "OK",
                "OR",
                "PA",
                "RI",
                "SC",
                "SD",
                "TN",
                "TX",
                "UT",
                "VT",
                "VA",
                "WA",
                "WV",
                "WI",
                "WY",
                "DC",
                "PR",
                "GU",
                "VI",
                "AS",
                "MP"
              ],
              "enumTitles": [
                "Alabama",
                "Alaska",
                "Arizona",
                "Arkansas",
                "California",
                "Colorado",
                "Connecticut",
                "Delaware",
                "Florida",
                "Georgia",
                "Hawaii",
                "Idaho",
                "Illinois",
                "Indiana",
                "Iowa",
                "Kansas",
                "Kentucky",
                "Louisiana",
                "Maine",
                "Maryland",
                "Massachusetts",
                "Michigan",
                "Minnesota",
                "Mississippi",
                "Missouri",
                "Montana",
                "Nebraska",
                "Nevada",
                "New Hampshire",
                "New Jersey",
                "New Mexico",
                "New York",
                "North Carolina",
                "North Dakota",
                "Ohio",
                "Oklahoma",
                "Oregon",
                "Pennsylvania",
                "Rhode Island",
                "South Carolina",
                "South Dakota",
                "Tennessee",
                "Texas",
                "Utah",
                "Vermont",
                "Virginia",
                "Washington",
                "West Virginia",
                "Wisconsin",
                "Wyoming",
                "District of Columbia",
                "Puerto Rico",
                "Guam",
                "U.S. Virgin Islands",
                "American Samoa",
                "Northern Mariana Islands"
              ]
            }
          },
          "cities": {
            "title": "Cities",
            "type": "array",
            "description": "Optional. Narrows mode=by_state output to records whose city matches one of these (case-insensitive, trimmed). NMLS search has no city parameter, so the run still reads the full state result set — useful for metro-targeted lead gen, but it doesn't make the run cheaper. Note that INDIVIDUAL (MLO) pages carry no address, so a city filter excludes them; use it with entityType COMPANY or BRANCH. Leave empty to include all cities.",
            "items": {
              "type": "string"
            }
          },
          "entityType": {
            "title": "Entity Type",
            "enum": [
              "",
              "INDIVIDUAL",
              "COMPANY",
              "BRANCH"
            ],
            "type": "string",
            "description": "Filter to a specific entity type. Leave empty to include all.",
            "default": ""
          },
          "sponsoringCompanyIds": {
            "title": "Sponsoring Company NMLS IDs",
            "type": "array",
            "description": "NMLS IDs of sponsoring companies. Used when mode = by_company_employees. The actor pulls each company's detail page and enumerates sponsored MLOs.",
            "items": {
              "type": "string"
            }
          },
          "activeLicenseOnly": {
            "title": "Active license only",
            "type": "boolean",
            "description": "Keep only records that hold at least one ACTIVE state license. When States is set, the active license must be in one of those states (a New York run drops anyone whose New York license has lapsed). Applies to individuals, companies and branches. Records NMLS did not let us read a license list for are dropped rather than guessed at. Excluded records are never charged.",
            "default": false
          },
          "issuedWithinDays": {
            "title": "License issued within (days)",
            "minimum": 1,
            "type": "integer",
            "description": "Keep only records with a state license first issued within the last N days - new loan officers and newly licensed companies. When States is set, the license must be one issued in those states; combined with Active license only, it must also be active. Leave empty for no date filter. Excluded records are never charged."
          },
          "sponsorshipStatus": {
            "title": "Sponsorship (individuals)",
            "enum": [
              "any",
              "sponsored",
              "unsponsored"
            ],
            "type": "string",
            "description": "For individuals (MLOs): 'sponsored' keeps those currently authorized to represent a company, 'unsponsored' keeps those with no sponsoring company - the pool a recruiter can approach. Ignored for companies and branches. Excluded records are never charged.",
            "default": "any"
          },
          "maxActiveBranches": {
            "title": "Max active branches (companies)",
            "minimum": 0,
            "type": "integer",
            "description": "Companies only: drop companies with more active branch locations than this, to target small shops. Individuals and branches are not affected. NMLS search has no such parameter, so the run still reads the same result set - this saves money, not run time. Leave empty for no limit."
          },
          "requirePhone": {
            "title": "Require phone",
            "type": "boolean",
            "description": "Drop records with no phone and no toll-free number. NMLS search cannot filter on this, so the run still reads the same result set - this saves money, not run time.",
            "default": false
          },
          "requireWebsite": {
            "title": "Require website",
            "type": "boolean",
            "description": "Drop records with no website. NMLS search cannot filter on this, so the run still reads the same result set - this saves money, not run time.",
            "default": false
          },
          "includeInactiveBranches": {
            "title": "Include inactive branches",
            "type": "boolean",
            "description": "Used with entityType BRANCH and mode by_name: also return branch locations NMLS lists as inactive. Off by default, matching the NMLS branch list.",
            "default": false
          },
          "includeDisclosures": {
            "title": "Include Regulator Disclosures",
            "type": "boolean",
            "description": "Parse regulator action details from each entity page. Slightly slower but provides compliance-grade data.",
            "default": true
          },
          "maxItems": {
            "title": "Max Items",
            "minimum": 1,
            "maximum": 250000,
            "type": "integer",
            "description": "Maximum number of distinct entity records to return. Duplicates found by overlapping searches do not count against it. Large pulls are handled for you — the actor tunes its own crawl speed to the number you ask for.",
            "default": 20
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}