{
  "openapi": "3.0.1",
  "info": {
    "title": "Contractor License Aggregator - CSLB California",
    "description": "Scrape California CSLB contractor licenses by ZIP code and trade (plumbing, electrical, HVAC and 75 more): business, phone, status, bonding, workers comp and officers. Export CSV, Excel, JSON. No login or API key. A 3-ZIP test returned 10 licenses in 65 seconds.",
    "version": "0.1",
    "x-build-id": "oysJK2fHFiIR2jRJ5"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/recordsdata~contractor-license-aggregator/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-recordsdata-contractor-license-aggregator",
        "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/recordsdata~contractor-license-aggregator/runs": {
      "post": {
        "operationId": "runs-sync-recordsdata-contractor-license-aggregator",
        "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/recordsdata~contractor-license-aggregator/run-sync": {
      "post": {
        "operationId": "run-sync-recordsdata-contractor-license-aggregator",
        "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": {
          "licenseNumbers": {
            "title": "License numbers",
            "type": "array",
            "description": "CSLB license numbers to look up directly, for example 1080058. No search step: each number goes straight to its license page. Numbers that do not exist come back as a free error row.",
            "items": {
              "type": "string"
            }
          },
          "businessNames": {
            "title": "Business names",
            "type": "array",
            "description": "Contractor business names to search, for example \"Sitka\". Every license whose business name starts with the text is returned, including DBA names and previous names (the matched name and its type come back in the row).",
            "items": {
              "type": "string"
            }
          },
          "personnelNames": {
            "title": "Personnel names",
            "type": "array",
            "description": "Owners, officers and qualifying individuals to search, as \"Last, First\" (\"Garcia, Jose\") or just \"Last\". Returns the licenses each matching person is or was associated with.",
            "items": {
              "type": "string"
            }
          },
          "maxPeoplePerName": {
            "title": "People per personnel name",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "A common name matches many people (\"Garcia, Jose\" matches more than 100). Only the first N matching people are followed to their licenses.",
            "default": 5
          },
          "zipCodes": {
            "title": "ZIP codes",
            "type": "array",
            "description": "California 5-digit ZIP codes to search for CSLB-licensed contractors of the trade below, for example 90210. Each ZIP returns up to about 9 licenses for the chosen trade.",
            "items": {
              "type": "string"
            }
          },
          "classification": {
            "title": "Trade classification (ZIP search)",
            "enum": [
              "A",
              "B",
              "B-2",
              "C-2",
              "C-4",
              "C-5",
              "C-6",
              "C-7",
              "C-8",
              "C-9",
              "C-10",
              "C-11",
              "C-12",
              "C-13",
              "C-15",
              "C-16",
              "C-17",
              "C-20",
              "C-21",
              "C-22",
              "C-23",
              "C-27",
              "C-28",
              "C-29",
              "C-31",
              "C-32",
              "C-33",
              "C-34",
              "C-35",
              "C-36",
              "C-38",
              "C-39",
              "C-42",
              "C-43",
              "C-45",
              "C-46",
              "C-47",
              "C-49",
              "C-50",
              "C-51",
              "C-53",
              "C-54",
              "C-55",
              "C-57",
              "C-60",
              "C-61",
              "C-61/D-3",
              "C-61/D-4",
              "C-61/D-6",
              "C-61/D-9",
              "C-61/D-10",
              "C-61/D-12",
              "C-61/D-16",
              "C-61/D-21",
              "C-61/D-24",
              "C-61/D-28",
              "C-61/D-29",
              "C-61/D-30",
              "C-61/D-31",
              "C-61/D-34",
              "C-61/D-35",
              "C-61/D-38",
              "C-61/D-39",
              "C-61/D-40",
              "C-61/D-41",
              "C-61/D-42",
              "C-61/D-49",
              "C-61/D-50",
              "C-61/D-52",
              "C-61/D-53",
              "C-61/D-56",
              "C-61/D-59",
              "C-61/D-62",
              "C-61/D-63",
              "C-61/D-64",
              "C-61/D-65",
              "ASB",
              "HAZ"
            ],
            "type": "string",
            "description": "CSLB trade classification used by the ZIP search, for example C-36 plumbing, C-10 electrical or C-20 HVAC. All 78 CSLB classifications are supported. Ignored by license number, business name and personnel searches.",
            "default": "C-36"
          },
          "status": {
            "title": "License status",
            "enum": [
              "any",
              "active",
              "expired",
              "inactive",
              "cancelled",
              "suspended",
              "revoked"
            ],
            "type": "string",
            "description": "Keep only licenses with this status. Licenses that do not match are skipped and not billed. \"Any\" keeps everything.",
            "default": "any"
          },
          "maxItems": {
            "title": "Max Items",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "Maximum number of license records to return. Free users are limited to 10 items (preview). Paid users: optional, max 1,000,000. Extra records (classifications, bonding, workers comp, insurance, citations, salespersons, personnel) do not count toward this limit."
          },
          "includeClassifications": {
            "title": "Classifications",
            "type": "boolean",
            "description": "All trade classifications held by the license (a license can hold more than one).",
            "default": false
          },
          "includeBonding": {
            "title": "Bonding",
            "type": "boolean",
            "description": "Surety bond details or exemption status.",
            "default": false
          },
          "includeWorkersComp": {
            "title": "Workers' compensation",
            "type": "boolean",
            "description": "Workers' compensation insurance status.",
            "default": false
          },
          "includeLiability": {
            "title": "General liability insurance",
            "type": "boolean",
            "description": "Liability insurance on file: insurer, policy number, amount, effective, expiration and suspension dates. Only licenses that have one.",
            "default": false
          },
          "includeDisclosures": {
            "title": "Complaint disclosures (citations)",
            "type": "boolean",
            "description": "Public citations CSLB discloses for the license: citation number, date, status and every violated section with its description. Only licenses that have disclosures.",
            "default": false
          },
          "includeSalespersons": {
            "title": "Home improvement salespersons",
            "type": "boolean",
            "description": "Home improvement salespersons registered under the license: name, registration number, effective date.",
            "default": false
          },
          "includePersonnel": {
            "title": "Personnel",
            "type": "boolean",
            "description": "Officers and qualifying individuals associated with the license.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}