{
  "openapi": "3.0.1",
  "info": {
    "title": "Hail Hit Addresses - Yesterday's Hail Swaths to Roofing Leads",
    "description": "Roofers: turn NOAA SPC hail reports into street addresses inside the hail zone, with hail size and time. Public OpenStreetMap addresses only (not verified homeowners), deduped across storms. Comply with local solicitation laws.",
    "version": "1.0",
    "x-build-id": "fLTDjBMCPiNhFFXaU"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/that_red_bird~hail-storm-address-leads/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-that_red_bird-hail-storm-address-leads",
        "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/that_red_bird~hail-storm-address-leads/runs": {
      "post": {
        "operationId": "runs-sync-that_red_bird-hail-storm-address-leads",
        "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/that_red_bird~hail-storm-address-leads/run-sync": {
      "post": {
        "operationId": "run-sync-that_red_bird-hail-storm-address-leads",
        "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": {
          "date": {
            "title": "Storm day (YYYY-MM-DD)",
            "type": "string",
            "description": "The SPC convective day (12:00 UTC to 12:00 UTC) to read, for example 2026-09-20. Leave empty to use the most recent day in the last 30 days that has hail reports of the minimum size.",
            "default": ""
          },
          "minHailSize": {
            "title": "Minimum hail size (inches)",
            "enum": [
              "0.75",
              "1.00",
              "1.25",
              "1.50",
              "1.75",
              "2.00",
              "2.75"
            ],
            "type": "string",
            "description": "Only use reports with at least this hail diameter. 1.00 is roughly roof-damage territory for many shingles; 1.75 is golf-ball size.",
            "default": "1.00"
          },
          "states": {
            "title": "States to keep",
            "type": "array",
            "description": "Optional two-letter US state codes (for example TX, CO). Leave empty for all states.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "radiusMeters": {
            "title": "Search radius around each report (meters)",
            "minimum": 100,
            "maximum": 3000,
            "type": "integer",
            "description": "Addresses are collected within this distance of each hail report point. A report is a point, not a swath outline, so this is an estimate of the affected area. 800 m is about half a mile.",
            "default": 800
          },
          "maxReports": {
            "title": "Max hail reports to use",
            "minimum": 1,
            "maximum": 60,
            "type": "integer",
            "description": "Reports are used largest hail first. Each one needs one OpenStreetMap query, which is rate limited to about one per second, so this also bounds run time.",
            "default": 10
          },
          "maxAddressesPerReport": {
            "title": "Max addresses per report",
            "minimum": 1,
            "maximum": 150,
            "type": "integer",
            "description": "Nearest addresses to the report point are kept first.",
            "default": 20
          },
          "maxAddresses": {
            "title": "Max addresses per run",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Hard stop for the whole run. You are charged per address delivered, so this is also your spending cap.",
            "default": 200
          },
          "includeBusinesses": {
            "title": "Include businesses",
            "type": "boolean",
            "description": "Also return addresses tagged as shops, offices, amenities and similar, with their public name and website when OpenStreetMap has them. This output can be fed to the Google Maps email enricher Actor. Off = residential-style addresses only.",
            "default": false
          },
          "includeStreetFallback": {
            "title": "Street-only fallback",
            "type": "boolean",
            "description": "When OpenStreetMap has no address points near a report (common in rural areas), return the nearest street name from Nominatim instead. These rows have no house number and are not charged.",
            "default": true
          },
          "onlyNew": {
            "title": "Only addresses not delivered before",
            "type": "boolean",
            "description": "Skip addresses already delivered by earlier runs that used the same memory store name (dedupe across storms and days). The memory is kept for 90 days.",
            "default": true
          },
          "stateStoreName": {
            "title": "Memory store name",
            "type": "string",
            "description": "Named key-value store that remembers delivered addresses. Use the same name on every run and a different name per client or territory. Empty = no dedupe across runs.",
            "default": "hail-address-leads-seen"
          },
          "timeBudgetSeconds": {
            "title": "Time budget (seconds)",
            "minimum": 30,
            "maximum": 3000,
            "type": "integer",
            "description": "Stop looking up new hail reports after this many seconds so the run always finishes. Remaining reports are picked up on the next run. The public OpenStreetMap servers are sometimes slow.",
            "default": 120
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}