FEMA API: Get flood zone for an address
Finds the FEMA flood zone, risk designation, base flood elevation, flood map panel and community for a US street address, using Census address coordinates and FEMA's National Flood Hazard Layer.
Unofficial. Not affiliated with or endorsed by FEMA.
Inputs
Values from the run on Oct 31, 2026, shown under Output.
- Address, required
address Full US street address, e.g. 1000 Ocean Dr, Miami Beach, FL 33139.
100 W 1st Ave, Anchorage, AK 99501
Input as JSON
{ "address": "100 W 1st Ave, Anchorage, AK 99501"}Output
{ "note": null, "latitude": 61.221443772936, "longitude": -149.88337811389, "flood_zone": "A", "community_name": "MUNICIPALITY OF ANCHORAGE", "matched_address": "100 W 1ST AVE, ANCHORAGE, AK, 99501", "flood_zone_meaning": "High-risk flood area; flood insurance is usually required with a federally backed mortgage.", "flood_map_panel_number": "0200050732D", "flood_map_effective_date": "2009-09-25", "base_flood_elevation_feet": null, "fema_map_service_center_link": "https://msc.fema.gov/portal/search?AddressQuery=100%20W%201ST%20AVE%2C%20ANCHORAGE%2C%20AK%2C%2099501" , "in_high_risk_special_flood_hazard_area": true}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"fema.gov/get_flood_zone","input":{"address":"100 W 1st Ave, Anchorage, AK 99501"}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "fema.gov/get_flood_zone" , "input": { "address": "100 W 1st Ave, Anchorage, AK 99501" }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "fema.gov/get_flood_zone" , "input": { "address": "100 W 1st Ave, Anchorage, AK 99501" } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run fema.gov/get_flood_zone# with {"address":"100 W 1st Ave, Anchorage, AK 99501"}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "address" ], "properties": { "address": { "type": "string", "examples": [ "1000 Ocean Dr, Miami Beach, FL 33139" ], "minLength": 1, "description": "Full US street address, e.g. 1000 Ocean Dr, Miami Beach, FL 33139." } }}Output schema
{ "type": "object", "required": [ "matched_address", "flood_zone", "flood_zone_meaning", "in_high_risk_special_flood_hazard_area", "base_flood_elevation_feet", "flood_map_panel_number", "flood_map_effective_date", "community_name", "fema_map_service_center_link", "note", "latitude", "longitude" ], "properties": { "note": { "type": [ "string", "null" ], "description": "Explanation when no digital flood map or zone is available." }, "latitude": { "type": "number", "description": "Census geocoder latitude." }, "longitude": { "type": "number", "description": "Census geocoder longitude." }, "flood_zone": { "type": [ "string", "null" ], "description": "FEMA flood zone code, or null if no digital flood zone is available." }, "community_name": { "type": [ "string", "null" ], "description": "FEMA political jurisdiction name." }, "matched_address": { "type": "string", "description": "Street address matched by the Census geocoder." }, "flood_zone_meaning": { "type": [ "string", "null" ], "description": "Plain-language flood hazard designation." }, "flood_map_panel_number": { "type": [ "string", "null" ], "description": "FEMA FIRM panel number." }, "flood_map_effective_date": { "type": [ "string", "null" ], "format": "date", "description": "Effective date of the mapped FIRM panel." }, "base_flood_elevation_feet": { "type": [ "number", "null" ], "description": "Mapped static base flood elevation in feet, if available." }, "fema_map_service_center_link": { "type": "string", "description": "Link to search this address on FEMA Map Service Center." }, "in_high_risk_special_flood_hazard_area": { "type": [ "boolean", "null" ], "description": "Whether FEMA marks the location as in a high-risk Special Flood Hazard Area; null if unavailable." } }, "additionalProperties": false}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
fema.gov/get_flood_zone- Returns
- matched address, flood zone, meaning, high-risk flag, base flood elevation, map panel, effective date, community, FEMA map link, note, coordinates
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method fema.gov/get_flood_zone with the inputs above.
Ask your agent
- What flood zone is 412 Canal St, New Orleans, LA 70130 in?
- Is the house at 2207 Seawall Blvd, Galveston, TX 77550 in a high-risk flood area, and what's the base flood elevation?
- Look up the FEMA flood map panel and effective date for 88 Harbor View Rd, Charleston, SC 29412
- I'm buying a condo at 1500 S Ocean Blvd, Myrtle Beach, SC 29577 — do I need flood insurance? Check the fema.gov flood zone designation.
- Pull the National Flood Hazard Layer info (zone, community, BFE) for 615 W 5th Ave, Anchorage, AK 99501 from FEMA
See more
All FEMA methodsLists federal disaster declarations in a US state. You can narrow the list by county, declaration date and incident category. Each disaster comes back with all of its designated counties.
fema.gov/list_disaster_declarationsMatches a US street address and returns its city or place, county, state, ZIP code, census tract, congressional and state legislative districts, coordinates and FIPS codes. Districts follow the Census Geocoder's current geography vintage and may differ from sitting representation.
census.gov/get_address_detailsLists active US weather watches, warnings and advisories for a city, address, ZIP code or state, most severe first, then newest.
weather.gov/list_weather_alertsGets HUD Fair Market Rents for a county, metro area, or ZIP code and fiscal year. ZIP rents are included only where HUD says Small Area FMRs apply.
huduser.gov/get_fair_market_rentGets a home's details from Realtor.com by street address or Realtor.com property link: status, list price, value estimate, beds, baths, size, year built, HOA fee, property and tax history, nearby schools, flood risk and photos.
realtor.com/get_homeLooks up Zillow housing market figures for a city and state or five-digit ZIP code: typical home value, one-year change, list and sale prices, inventory and listing activity.
zillow.com/get_housing_marketLists active severe weather alerts for a city, address, ZIP or postcode on The Weather Channel, most severe first. An empty list means no active alerts.
weather.com/list_weather_alertsLooks up the National Weather Service seven-day day and night forecast for a U.S. city, address, or ZIP code. Forecast availability depends on NWS land-grid coverage.
weather.gov/get_forecast