How-to
How to run Flood Zone Property Owner Leads & FEMA Flood Map Lookup
Step-by-step: the exact input, what each field does, and the rows that come back from FEMA NFHL + state and county assessor rolls.
You sell flood insurance, survey elevation certificates or lift houses, and you want the owners of the properties in a county’s flood zone. FEMA’s Flood Map Service Center answers one address at a time and never names an owner; the county assessor names the owner and knows nothing about flood zones. Doing the join by hand means downloading FEMA’s flood layer and the county’s parcel file and overlaying them in GIS software. This actor does that overlay for 20 states and returns one row per property, owner and mailing address included.
What you’ll need
Nothing but an Apify account. The actor talks to FEMA NFHL + state and county assessor rolls directly.
No API key and no proxy. FEMA’s map services, OpenFEMA’s Community Status Book, the Census geocoder and the 24 assessor rolls behind the export are all public, keyless services, and the proxy setting is off by default.
Step 1 — Open the actor
Open Flood Zone Property Owner Leads & FEMA Flood Map Lookup on the Apify Store and press Try for free. The actor’s own page on this site lists its live health and pricing.
Step 2 — Fill in the input
| Field | Type | Required | What it does |
|---|---|---|---|
mode | string | no | Export: every property in a FEMA flood zone (or about to enter or leave one) in the areas you list, with the owner’s name and mailing address. Lookup: the FEMA flood zone,… (default export) |
areas | array | no | One per line: a state (‘FL’), a county (‘Pinellas, FL’ or ‘FL/Pinellas’), a city (‘Kure Beach, NC’) or a 5-digit ZIP (‘33139’). Run with no areas to get the coverage list for free. (default []) |
area | string | no | One area, for saved tasks and API calls that send a single value. Use Areas above for several. |
addresses | array | no | One US street address per line, with city and state (a ZIP helps): ‘1001 Ocean Dr, Miami Beach, FL 33139’. Works anywhere FEMA has a digital flood map; the owner columns are… (default []) |
address | string | no | One address, for saved tasks and API calls that send a single value. |
sfhaOnly | boolean | no | On: only properties inside FEMA’s Special Flood Hazard Area (the 1%-annual-chance zones A and V, where a federally backed mortgage requires flood insurance). Off: every… (default True) |
zones | array | no | Only these zones on the effective map. One per line: A, AE, AH, AO, AR, A99, V, VE (coastal), X_SHADED (0.2% annual chance), X_LEVEE (reduced risk behind a levee), X (minimal… (default []) |
mapChange | string | no | Properties whose zone changes on a new FEMA map. ‘Entering’ = outside the SFHA today and inside it on a pending (adopted, with an effective date) or preliminary map; once the… (default all) |
excludeLoma | boolean | no | On: a property with a completed LOMA that removed its structure from the flood zone is left out (its owner does not need flood insurance under the mortgage rule). Off: kept,… (default True) |
preFirmOnly | boolean | no | Only buildings built before the community’s first flood map (or before 1975). Needs a roll that publishes year built. |
ownerTypes | array | no | One per line: individual, company, trust, government. Empty: individual, company and trust (government land is left out of a lead list unless you ask for it). (default []) |
absentee | array | no | Only these owner-occupancy tiers, from the mailing address on the roll. One per line: out_of_state, out_of_city, same_city_diff_address, owner_occupied, unknown. Empty: any. (default []) |
propertyUse | array | no | Words matched against the roll’s land-use description or code, one per line: ‘single family’, ‘condominium’, ‘commercial’, ‘vacant’. Each county words it differently. Empty: any. (default []) |
zipCodes | array | no | Only properties in these 5-digit ZIP codes (where the roll publishes the property ZIP). (default []) |
minValue | integer | no | Market (or assessed) value on the roll. |
maxValue | integer | no | Market (or assessed) value on the roll. |
builtAfter | integer | no | Year built on the roll; properties with no year are left out when set. |
builtBefore | integer | no | Year built on the roll; properties with no year are left out when set. |
maxResults | integer | no | Cap on owner rows per area line (not per run). 0 = no cap. A whole coastal state can hold hundreds of thousands of flood-zone parcels; start with a county. (default 1000) |
listCoverage | boolean | no | Return the states and counties the export covers, and nothing else. |
Two fields decide what comes back. areas takes a state, a county, a city or a ZIP, but the export
only reaches places with an owner roll it can map: every county in Arkansas, Connecticut, Florida,
Massachusetts, Minnesota, Montana, New Jersey, New York, North Carolina and Wisconsin, plus 14 large
counties elsewhere. Run it once with nothing filled in and it returns that list for free. The second
is mapChange. Left at its default you get today’s flood zone (with sfhaOnly on, only the
properties inside it). Set it to entering and you get properties outside the zone today that a
pending or preliminary FEMA map moves into it, which is a different and much shorter list; a county
with no new map returns none.
A working input:
{
"areas": [
"Pinellas, FL"
],
"absentee": [
"out_of_state"
],
"maxResults": 100
}
Step 3 — Run it
Press Start. Rows are pushed to the dataset as they’re found, so the run log fills in as it works.
The input above returned 100 out-of-state owners in Pinellas County in 66 seconds when we ran it on
2026-11-03, and the first run on Apify (3 rows in New Hanover County, NC) finished in 18 seconds. The
log reports progress every few rows of map tiles, and says how many tiles had no flood polygon for
your request. An empty result with no notice row usually means the filters were too narrow, for
example builtBefore in a county whose roll publishes no year built. A source that refuses shows up
as a free blocked notice row, never as silence.
Step 4 — Read the output
Each run returns a labelled table, not raw JSON:
Every row looks like this — a real row from a real run:
{
"owner_name": "ULTRA BLUE PROPERTIES LLC",
"owner_type": "company",
"mailing_address": "4061 SANDVIEW DR",
"mailing_city": "MEDINA",
"mailing_state": "OH",
"mailing_zip": "44256",
"absentee_tier": "out_of_state",
"address": "1515 PINELLAS BAYWAY S # 20",
"city": "TIERRA VERDE",
"state": "FL",
"zip": "33715",
"county": "Pinellas",
"parcel_id": "16 32 29 94825 002 0200",
"flood_zone": "AE",
"zone_subtype": "COASTAL FLOODPLAIN",
"in_sfha": true,
"base_flood_elevation_ft": 9.0,
"vertical_datum": "NAVD88",
"firm_panel": "12103C0286H",
"panel_effective_date": "2021-08-24",
"map_change": "none",
"pending_zone": null,
"pending_effective_date": null,
"loma_case": null,
"community_name": "PINELLAS COUNTY *",
"crs_class": "2",
"crs_sfha_discount": "40%",
"initial_firm_date": "1971-06-18",
"pre_firm": false,
"property_class_desc": "Condominium",
"year_built": 1990,
"market_value": 323847,
"latitude": 27.671588,
"longitude": -82.724803
}
| Field | Example value | Meaning |
|---|---|---|
address | 1515 PINELLAS BAYWAY S # 20 | Property street address (the roll’s situs address in an export, the geocoder’s matched address in a lookup) |
city | TIERRA VERDE | Property city as the roll or the geocoder writes it |
state | FL | Two-letter state |
zip | 33715 | Property ZIP code, where the roll publishes one |
county | Pinellas | County name |
parcel_id | 16 32 29 94825 002 0200 | The assessor’s parcel number |
latitude | 27.671588 | The point the flood zone was read at (the parcel’s centroid, or the geocoded address) |
longitude | -82.724803 | The point the flood zone was read at |
Most people come for owner_name and the mailing columns next to flood_zone. Watch two things.
The zone is read at the parcel’s centroid, so a big lot that straddles a zone line is labelled by its
middle, and it is not an official flood determination. And the roll decides what else is filled: in
the Pinellas run 92 of 100 rows had a year built (and so a pre_firm answer), while New Hanover,
NC publishes neither year built nor property ZIP on any parcel.
Step 5 — Export it
Open the Dataset tab and export to CSV, JSON, or Excel — or pull the same rows from the API, which is what you want if this is going to run on a schedule.
What it costs
$0.01 per exported property with an owner, and $0.004 per address answered in lookup mode. Notice
rows (coverage, no match, a source that did not answer) are free. The 100-row Pinellas example
costs $1.00; the default cap of 1,000 rows costs $10.00, so set maxResults to the list you want.
Where the data comes from
This reads FEMA NFHL + state and county assessor rolls directly. The target is Keyless ArcGIS REST: FEMA’s National Flood Hazard Layer plus its pending and preliminary map services (GET only; a form POST answers an empty 202), joined locally by point-in-polygon to assessor rolls on ArcGIS and Carto; OpenFEMA for the NFIP Community Status Book; the Census geocoder for lookups. Every night a canary runs this actor against that live source and diffs the result against a frozen fixture — what “verified” means.
FEMA’s National Flood Hazard Layer is a map service built to draw a map, not to hand out lists: a coastal county’s flood zone is hundreds of polygons with thousands of vertices each, and a county whose whole map is being redrawn (Miami-Dade, whose pending map takes effect 2027-02-19) has twice that to read. The assessor rolls are a second problem, each county publishing its own columns.
See it used
Pinellas County, FL flood zone property owners walks through building a mailing list of one coastal county’s flood-zone owners.
If you want every property in a county with values and sale history, flood zone or not, use US County Property Records Export instead.
Last updated 2026-11-03