If you underwrite mortgages, screen insurance portfolios or evaluate rental properties, "is it in a flood zone?" usually means opening the FEMA Flood Map Service Center and clicking one address at a time.
For a list of 50 or 500 properties, that does not scale. Here is a way to get the official FEMA flood zone for every row in one run.
What you get per address: the FEMA zone (A, AE, VE, X…), whether it is inside a Special Flood Hazard Area (where flood insurance is mandatory for federally backed mortgages), the base flood elevation, the FIRM panel and its effective date, and whether a Letter of Map Revision (LOMR) changed the map there. Data comes straight from FEMA's National Flood Hazard Layer; addresses are geocoded by the U.S. Census Bureau.
Steps
- Open the US Flood Zone Lookup on Apify (free account).
- Paste your addresses (with ZIP code) or "latitude,longitude" pairs, one per line — up to 1,000 per run.
- Click Start and download the result as CSV or Excel.
Example row
A point in Miami Beach:
{"status": "ok", "floodZone": "AE", "inSpecialFloodHazardArea": true,
"baseFloodElevation": 8, "verticalDatum": "NGVD29",
"firmPanel": "12086C0317L", "firmPanelEffectiveDate": "2009-09-11", "hasLomr": false}
From code
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("japan-open-data/us-flood-zone-lookup").call(
run_input={"locations": ["1600 Pennsylvania Ave NW, Washington, DC 20500"]})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row["floodZone"], row["inSpecialFloodHazardArea"])
Cost: $5 per 1,000 locations checked; addresses that can't be matched are free.
Limits worth knowing: this is screening, not a certified flood determination (SFHDF). Zone X does not mean zero risk. Addresses are placed along the street, so for properties near a zone boundary, pass coordinates instead.
I'd love feedback on what columns would make this more useful for your workflow.











