{
  "openapi": "3.0.1",
  "info": {
    "title": "Building Permits Scraper — Construction Leads (US & Canada)",
    "description": "Get new building permits from 12 official city open-data portals (Chicago, NYC, LA, SF, Seattle, Austin, more) in one schema. Filter by trade keyword (solar, roofing, HVAC, ADU), date and project value. Daily 'only new' lead feeds. No login, no personal data. $3 per 1,000 permits.",
    "version": "1.0",
    "x-build-id": "DQdQBhzfbziuL5yug"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/opendatafrontierlab~us-building-permits/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-opendatafrontierlab-us-building-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/opendatafrontierlab~us-building-permits/runs": {
      "post": {
        "operationId": "runs-sync-opendatafrontierlab-us-building-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/opendatafrontierlab~us-building-permits/run-sync": {
      "post": {
        "operationId": "run-sync-opendatafrontierlab-us-building-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": {
          "jurisdictions": {
            "title": "Jurisdictions",
            "type": "array",
            "description": "Cities/counties to pull permits from. Use source keys like 'chicago-il', 'new-york-ny', 'los-angeles-ca', or 'all' for all 12 supported jurisdictions.",
            "items": {
              "type": "string",
              "enum": [
                "chicago-il",
                "seattle-wa",
                "los-angeles-ca",
                "austin-tx",
                "san-francisco-ca",
                "new-york-ny",
                "cincinnati-oh",
                "mesa-az",
                "marin-county-ca",
                "montgomery-county-md",
                "calgary-ab",
                "edmonton-ab",
                "all"
              ],
              "enumTitles": [
                "Chicago, IL",
                "Seattle, WA",
                "Los Angeles, CA",
                "Austin, TX",
                "San Francisco, CA",
                "New York City, NY (DOB NOW)",
                "Cincinnati, OH",
                "Mesa, AZ",
                "Marin County, CA",
                "Montgomery County, MD (commercial)",
                "Calgary, AB (Canada)",
                "Edmonton, AB (Canada)",
                "All supported jurisdictions"
              ]
            },
            "default": [
              "chicago-il",
              "seattle-wa",
              "austin-tx"
            ]
          },
          "daysBack": {
            "title": "Days back",
            "minimum": 1,
            "maximum": 3650,
            "type": "integer",
            "description": "Return permits issued in the last N days (e.g. 1 for a daily feed, 30 for a monthly pull). Ignored if 'Issued since' is set.",
            "default": 7
          },
          "issuedSince": {
            "title": "Issued since (YYYY-MM-DD)",
            "type": "string",
            "description": "Optional absolute start date, inclusive, format YYYY-MM-DD (e.g. 2026-10-01). Overrides 'Days back'."
          },
          "issuedBefore": {
            "title": "Issued before (YYYY-MM-DD)",
            "type": "string",
            "description": "Optional end date, exclusive, format YYYY-MM-DD."
          },
          "keyword": {
            "title": "Keyword",
            "type": "string",
            "description": "Optional full-text filter matched against permit text by each portal, e.g. 'solar', 'roof', 'HVAC', 'pool', 'ADU', 'demolition', 'elevator'. One word or phrase."
          },
          "minValuation": {
            "title": "Minimum project value",
            "minimum": 0,
            "type": "integer",
            "description": "Only return permits whose declared project value is at least this amount (local currency: USD, or CAD for Calgary/Edmonton). Permits without a value are dropped when set."
          },
          "maxItemsPerJurisdiction": {
            "title": "Max permits per jurisdiction",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Maximum permits per city/county, newest first. Use it to cap cost.",
            "default": 500
          },
          "maxItems": {
            "title": "Max permits total",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Maximum permits across all jurisdictions. You are charged $0.003 per permit returned, so this is your spending cap.",
            "default": 2000
          },
          "onlyNewSinceLastRun": {
            "title": "Only new since last run",
            "type": "boolean",
            "description": "Skip permits already returned by previous runs (state kept in a named key-value store). Ideal for scheduled daily lead feeds.",
            "default": false
          },
          "includeContractorBusinessName": {
            "title": "Include contractor business name",
            "type": "boolean",
            "description": "Licensed contractor company name where the city publishes it. Owner/applicant names, phones and emails are never collected.",
            "default": true
          },
          "socrataAppToken": {
            "title": "Socrata app token (optional)",
            "type": "string",
            "description": "Optional free token for higher rate limits on very large pulls."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}