{
  "openapi": "3.0.1",
  "info": {
    "title": "City Building Permits Scraper - Solar, EV, Roofing, ADU",
    "description": "Scrape newly issued solar PV, EV charger, heat pump/HVAC, roofing, and ADU permits from Austin, Chicago, Los Angeles, Seattle, and San Francisco open-data portals. Coverage varies by city: Los Angeles covers roofing, ADU, and HVAC only.",
    "version": "0.1",
    "x-build-id": "wuCzKbdxFPDxsFYHg"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/groundplanes~city-solar-ev-permits/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-groundplanes-city-solar-ev-permits",
        "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/groundplanes~city-solar-ev-permits/runs": {
      "post": {
        "operationId": "runs-sync-groundplanes-city-solar-ev-permits",
        "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/groundplanes~city-solar-ev-permits/run-sync": {
      "post": {
        "operationId": "run-sync-groundplanes-city-solar-ev-permits",
        "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": {
          "categories": {
            "title": "Permit Categories",
            "type": "array",
            "description": "Permit trade/equipment categories to extract: SOLAR (solar PV, photovoltaic), EV_CHARGER (EVSE, electric vehicle charger), HVAC (heat pump, furnace, mini-split, HVAC), ROOFING (reroof, roof replacement), ADU (accessory dwelling unit, DADU, JADU).",
            "items": {
              "enum": [
                "SOLAR",
                "EV_CHARGER",
                "HVAC",
                "ROOFING",
                "ADU"
              ],
              "enumTitles": [
                "SOLAR - Solar PV & Battery Storage",
                "EV_CHARGER - Electric Vehicle Charger (EVSE)",
                "HVAC - Heat Pump, Furnace & Mini-Split HVAC",
                "ROOFING - Roofing & Re-Roofing",
                "ADU - Accessory Dwelling Unit"
              ],
              "type": "string"
            },
            "default": [
              "SOLAR",
              "EV_CHARGER"
            ]
          },
          "cities": {
            "title": "Cities",
            "type": "array",
            "description": "Select one or more municipal open-data permit portals to query: AUSTIN, CHICAGO, LOS_ANGELES, SEATTLE, SAN_FRANCISCO.",
            "items": {
              "enum": [
                "AUSTIN",
                "CHICAGO",
                "LOS_ANGELES",
                "SEATTLE",
                "SAN_FRANCISCO"
              ],
              "enumTitles": [
                "Austin, TX",
                "Chicago, IL",
                "Los Angeles, CA",
                "Seattle, WA",
                "San Francisco, CA"
              ],
              "type": "string"
            },
            "default": [
              "AUSTIN",
              "CHICAGO",
              "SEATTLE"
            ]
          },
          "includeOwnerNames": {
            "title": "Include Property Owner / Homeowner Names",
            "type": "boolean",
            "description": "Defaults to false for privacy compliance because municipal permit portals often list private homeowners as the property owner or applicant. Contractor business names, licenses, and business phones are always included.",
            "default": false
          },
          "issuedDateFrom": {
            "title": "Issued Date From (YYYY-MM-DD)",
            "type": "string",
            "description": "Earliest permit issue date in YYYY-MM-DD format. Leave blank to default to 30 days ago (today - 30 days).",
            "default": ""
          },
          "maxItems": {
            "title": "Max Items",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum number of normalized permit records to return, sorted newest first by issuedDate.",
            "default": 200
          },
          "minValuationUsd": {
            "title": "Minimum Job Valuation (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum reported project cost / job valuation in USD. Set to 0 to include all permits (including permits where valuation is unreported).",
            "default": 0
          },
          "socrataAppToken": {
            "title": "Socrata App Token (Optional)",
            "type": "string",
            "description": "Optional Socrata X-App-Token header for higher rate limits on large historical queries. Not required for normal runs."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}