Skip to content
All data sources

OpenFEMA Property Risk API and MCP server

No authopenfema

FEMA disaster declarations, NFIP claims aggregates, public assistance, and hazard context for US market research.

OpenFEMA Property Risk is published by FEMA OpenFEMA API and covers United States.

How often the publisher refreshes it is not declared, so treat the timing of any field as unknown.

Last verified . That is when these facts were last rebuilt from the ParcelOps source registry, not when FEMA OpenFEMA API last refreshed the data itself.

API access

Your AI client reaches OpenFEMA Property Risk through one ParcelOps MCP endpoint, so there is no separate key to hold for it and no per-source client to write. Reaching it takes no credentials of your own.

Where it came from

Freshness and coverage

FreshnessFreshness not declared
Places coveredUnited States
Time coveredNot declared
CredentialsNo credentials required

What this source cannot tell you

  • Anything outside United States. A request past that edge comes back empty rather than approximated.
  • Which years it spans, because the covered period is not declared.
  • How current a field is, because the refresh schedule is not declared.
  • Anything FEMA OpenFEMA API does not publish. ParcelOps returns this source as it stands and never fills a blank field from a different one.

Methods (3)

A method is one call your agent can make against this source.

  • searchDisasterDeclarations

    read

    Search federal disaster declarations by place, incident, year, date, or declaration type.

    Records returneddisaster-declaration
    How to get more resultsoffset (offsetField: offset, limitField: limit)
    FreshnessNear real-time · every 20 minutes
    Input schema
    {
      "type": "object",
      "properties": {
        "state": {
          "type": "string",
          "pattern": "^[A-Za-z]{2}$"
        },
        "county": {
          "type": "string",
          "maxLength": 160
        },
        "incidentType": {
          "type": "string",
          "maxLength": 80
        },
        "declarationType": {
          "type": "string",
          "enum": [
            "DR",
            "EM",
            "FM"
          ]
        },
        "year": {
          "type": "integer",
          "minimum": 1953,
          "maximum": 2200
        },
        "beginDate": {
          "type": "string",
          "description": "ISO date YYYY-MM-DD."
        },
        "endDate": {
          "type": "string",
          "description": "ISO date YYYY-MM-DD."
        },
        "distinctBy": {
          "type": "string",
          "enum": [
            "disasterNumber"
          ]
        },
        "limit": {
          "type": "integer",
          "minimum": 1,
          "maximum": 1000
        },
        "offset": {
          "type": "integer",
          "minimum": 0
        }
      },
      "required": [],
      "additionalProperties": false
    }
    Output schema
    {
      "type": "object",
      "properties": {
        "count": {
          "type": "integer",
          "minimum": 0
        },
        "total": {
          "type": [
            "integer",
            "null"
          ],
          "minimum": 0
        },
        "offset": {
          "type": "integer",
          "minimum": 0
        },
        "limit": {
          "type": "integer",
          "minimum": 1
        },
        "declarations": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "note": {
          "type": "string"
        }
      },
      "required": [
        "count",
        "total",
        "offset",
        "limit",
        "declarations",
        "note"
      ],
      "additionalProperties": true
    }
    • Disaster Declarations Summaries county-level data are incomplete before 1964.
    • Historic Fire Management Assistance data are partial.

    Use distinctBy=disasterNumber for unique disasters instead of designated areas.

  • searchNfipClaims

    read

    Search public NFIP flood claims by state, county, year, date of loss, zone, or occupancy.

    Records returnednfip-claim
    How to get more resultsoffset (offsetField: offset, limitField: limit)
    Input schema
    {
      "type": "object",
      "properties": {
        "state": {
          "type": "string",
          "pattern": "^[A-Za-z]{2}$",
          "description": "2-letter state or territory postal code."
        },
        "county": {
          "type": "string",
          "maxLength": 120,
          "description": "County, parish, or borough name (\"Orleans\" or \"Orleans Parish\"). The dataset stores no county name, so this is resolved against the Census county-equivalent catalog and the query filters on the resulting 5-digit FIPS. Pass state too unless the name is nationally unique. A name that matches nothing, or matches more than one county, is an error — it never widens to the whole state."
        },
        "countyCode": {
          "type": "string",
          "pattern": "^\\d{5}$",
          "description": "5-digit county FIPS (state + county), e.g. \"22071\" for Orleans Parish, LA. Use instead of county when the code is already known."
        },
        "year": {
          "type": "integer",
          "minimum": 1973,
          "maximum": 2200,
          "description": "Year of loss, e.g. 2017 for Hurricane Harvey."
        },
        "dateOfLossBegin": {
          "type": "string",
          "description": "ISO date YYYY-MM-DD, inclusive lower bound on date of loss."
        },
        "dateOfLossEnd": {
          "type": "string",
          "description": "ISO date YYYY-MM-DD, inclusive upper bound on date of loss."
        },
        "ratedFloodZone": {
          "type": "string",
          "maxLength": 4,
          "description": "NFIP rated flood zone: A, AE, AH, AO, B, C, D, V, VE, X, plus numbered A01-A30 and V01-V15. The literal \"null\" is a real upstream value for pre-FIRM properties with no recorded zone. Full list: getServiceInfo enumValues."
        },
        "occupancyType": {
          "type": "integer",
          "enum": [
            1,
            2,
            3,
            4,
            6
          ],
          "description": "1 single family, 2 two-to-four family, 3 other residential, 4 non-residential, 6 condominium."
        },
        "limit": {
          "type": "integer",
          "minimum": 1,
          "maximum": 1000
        },
        "offset": {
          "type": "integer",
          "minimum": 0
        }
      },
      "required": [],
      "additionalProperties": false
    }
    Output schema
    {
      "type": "object",
      "properties": {
        "count": {
          "type": "integer",
          "minimum": 0
        },
        "total": {
          "type": [
            "integer",
            "null"
          ],
          "minimum": 0
        },
        "offset": {
          "type": "integer",
          "minimum": 0
        },
        "limit": {
          "type": "integer",
          "minimum": 1
        },
        "claims": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "note": {
          "type": "string"
        }
      },
      "required": [
        "count",
        "total",
        "offset",
        "limit",
        "claims",
        "note"
      ],
      "additionalProperties": true
    }

    County name resolves to a 5-digit FIPS; an unmatched name errors, never widens.

  • getServiceInfo

    read

    Return dataset versions, cadence, and caveats.

    Input schema
    {
      "type": "object",
      "properties": {},
      "required": [],
      "additionalProperties": false
    }

Where this source is used