Underwrite any parcel
like a certified survey.

Five underwriting vendors — parcel, elevation, flood, wildfire, demographics — plus a risk-adjusted NOI, fused into one cited call. The price is on this page, not behind a sales call. Every field carries the federal source it came from.

Or plot a sample:
Territas · Survey sheet
FIRM —
Awaiting field entryEnter an address to plot the parcel and stamp its determination.
Flood determination
Risk-adjusted NOI
Territas sealTerritas seal

Sample determination · synthetic demonstration data, labeled throughout.

The consolidation

Five subscriptions, reconciled by hand. Or one call, priced on this page.

Underwriting a parcel today means five vendors, five invoices, and a spreadsheet to reconcile them. Territas fuses the same federal layers behind one call — and recomputes the money on your deal numbers with no extra fetch. The enterprise data gateways sell these layers as separate calls behind a custom quote; here the whole fused object has a price on this page.

  • Parcel & tractUS Census Geocoder
  • Elevation & slopeUSGS 3DEP
  • Flood zone & BFEFEMA NFHL
  • Wildfire + 17 hazardsFEMA National Risk Index
  • Income & home valueUS Census ACS 5-yr
One responseTerritas sealTerritas seal
1 fused JSONevery field source-tagged
1 flood-insurance screen42 U.S.C. § 4012a(b)
1 audit trail12 provenance entries
1 published priceno quote, no sales call
The determination, shown

The number shows its work.

A vendor score asks you to trust it. This asks you to check it. Territas runs the statutory flood-insurance test in 42 U.S.C. § 4012a(b) — the mandatory-purchase rule — then prices the risk from the NFIP policy file and the National Risk Index. Every line is arithmetic over a cited federal read, so your desk can reproduce it rather than take it on faith.

If FEMA is unreachable, the obligation still stands: the screen survives a pricing failure, because the statute does not depend on a rate.

Informational use only. Territas is not a FEMA-listed provider and this is not a substitute for a certified life-of-loan Standard Flood Hazard Determination. It screens the statutory test and shows the math; the regulated lender remains responsible for the determination of record.

Worksheet · flood premium & risk-adjusted NOI1300 CANYON BLVD, BOULDER, CO 80302
DOCUMENTED
Required coverage· NFIP cap binds$250,000
Median CO zone AE rate· post-RR2.0, n=494$4.25 / $1k
Premium before CRS$1,062.50
Community Rating System 25% discount$265.62
Flood premium after CRS$796.88
then the deal
Gross annual rent$36,000
Property taxes$4,000
Base insurance$1,200
Flood premium (above)$796.88
NRI non-flood EAL· on $300k structure$85.92
NOI, risk-adjusted$29,917

Required coverage $250,000 at the median $4.25 per $1,000 for zone AE (state cohort, n=494) = $1,062; CRS 25% applied = $797; NRI non-flood annualised building-loss ratio 2.864e-04 on $300,000 = $86/yr. Deterministic, no LLM.

Legend of sources

Nine federal reads, one lineage.

Every source is federal and public. No vendor scores, no proprietary models — which is exactly what a regulator or a credit committee asks you to name.

LayerSource of recordEndpoint
Geocode · tract · county FIPSUS Census Geocodergeocoding.geo.census.gov
Elevation · slopeUSGS 3DEP getSampleselevation.nationalmap.gov
Flood zone · BFEFEMA NFHL layer 28hazards.fema.gov
FIRM panelFEMA NFHL layer 3hazards.fema.gov
NFIP community · CRSOpenFEMA Community Statusfema.gov/api/open/v1
Wildfire + 17 hazardsFEMA National Risk Indexservices.arcgis.com
NFIP premium ratesOpenFEMA NfipPolicies v3fema.gov/api/open/v3
Forecast · fire-weather zoneNOAA NWSapi.weather.gov
Income · home valueUS Census ACS 5-yrapi.census.gov

On wildfire. The USFS point services return 403 to unauthenticated clients, so the wildfire layer comes from the FEMA National Risk Index — tract-keyed, no raster processing, and the hazard dataset federal lenders and their regulators actually cite.

Latency of record

Cold in about a second. Warm in about thirteen milliseconds.

Ten federal calls run as a single concurrent fan-out behind one geocode. Re-price the same address with new deal numbers and it reprices off cache — the money is always fresh, the federal reads never refetched.

Cold parcel · critical-path fan-out~1.0s median
geocode
168 ms
824 mselevation · USGS 3DEP
368 msdemographics · ACS
77 msflood · FEMA NFHL ×3
24 msnri · FEMA NRI
66 msclimate · NOAA

NFIP rate + community status chain off flood (~77 ms), their only real dependency — not the whole batch.

Warm re-underwrite
~13ms end-to-end

Zero network. Every source metric — geocode included — served from cache; only the deal financials recompute.

Two tiers, one key. Redis (hot) → embedded DuckDB (durable), both on a 7-day window. User inputs never touch the key, so a second deal never inherits the first deal's numbers.

Two ways in

One determination, two integrations.

An MCP tool your agents call directly, or a REST endpoint for the lending backend. Same engine, same deterministic determination, same audit trail.

MCP · underwrite_parcelagent-native
# Agent-native — Claude, Cursor, Windsurf call it directly
underwrite_parcel(
    address="1300 Canyon Blvd, Boulder, CO 80302",
    purchase_price=450000, annual_rent=36000,
    annual_taxes=4000, annual_insurance_base=1200,
    loan_amount=360000, structure_value=300000,
) -> dict   # one deterministic determination
REST · POST /v1/underwritebackend
import httpx

r = httpx.post("https://api.territas.com/v1/underwrite", json={
    "address": "1300 Canyon Blvd, Boulder, CO 80302",
    "purchase_price": 450000, "annual_rent": 36000,
    "annual_taxes": 4000, "annual_insurance_base": 1200,
    "loan_amount": 360000, "structure_value": 300000,
})
r.json()["flood_insurance_requirement"]["required"]   # True
Response · excerptdeterministic JSON
"flood_insurance_requirement": {
  "required": true,
  "authority": "42 U.S.C. 4012a(b)",
  "zone": "AE",
  "min_coverage": 250000,
  "crs_discount_pct": 25,
  "binding_limb": "outstanding_principal"
},
"financials_risk_adjusted": {
  "flood_premium": 796.88,
  "expected_annual_loss_nonflood": 85.92,
  "noi_risk_adjusted": 29917.20,
  "cap_rate": 0.0665
}

The flood_insurance_requirement block names the statute, the limb that bound the minimum, and the CRS discount the borrower is due. A lender can recompute the bottom line without trusting us.

Endpoint shown for illustration. API-key auth and metered billing are on the roadmap; today access is provisioned per engagement.

Schedule of fields

Read the response like a legend.

Eight blocks come back on every call, ordered here by how much each moves a decision. Open one to see the documented response beside a plain-language note on what each sub-field means for the loan.

  • Example · Boulder, COdocumented
    "flood_insurance_requirement": {
      "required": true,
      "sfha": true,
      "flood_zone": "AE",
      "citation": "42 U.S.C. 4012a(b); Fannie Mae B7-3-05; 44 C.F.R. 61.6",
      "nfip_community_name": "CITY OF BOULDER",
      "community_participating": true,
      "crs_class": "5",
      "crs_sfha_discount_pct": 25.0,
      "minimum_coverage": 250000.0,
      "coverage_basis": "nfip_maximum",
      "insurable_value_assumed": false
    }
    Sub-fields · what they mean for the loan
    required
    Whether §4012a(b) compels flood insurance to close — the hard gate on the loan.
    reason
    Plain-English basis for the call, ready to paste into the loan file.
    citation
    The statutes and guides behind it (42 U.S.C. 4012a(b); Fannie Mae B7-3-05; 44 C.F.R. 61.6).
    sfha
    In a Special Flood Hazard Area — the trigger for mandatory purchase.
    flood_zone
    The FEMA zone that drove the determination.
    nfip_community_id / _name
    The NFIP community of record; policies are only sold where it participates.
    community_participating
    If false, NFIP coverage isn't available in this community — a serious closing flag.
    crs_class
    Community Rating System class (1–10); a lower class earns a larger premium discount.
    crs_sfha_discount_pct
    The premium discount the borrower is owed inside the SFHA.
    minimum_coverage
    Least coverage that satisfies the statute — the number that goes on the binder.
    coverage_basis
    Which limb bound the minimum: outstanding principal, insurable value, or the NFIP maximum.
    insurable_value_assumed
    Whether insurable value was assumed vs. supplied — an input worth confirming.
  • Example · Boulder, COdocumented
    "financials_risk_adjusted": {
      "noi_base": 30800.0,
      "noi_risk_adjusted": 29917.21,
      "required_flood_coverage": 250000.0,
      "nfip_rate_per_1k": 4.25,
      "nfip_sample_size": 494,
      "flood_premium_before_crs": 1062.5,
      "crs_discount_pct": 25.0,
      "flood_premium_estimate": 796.88,
      "nonflood_expected_annual_loss": 85.92,
      "cap_rate_base_pct": 6.8444,
      "cap_rate_adjusted_pct": 6.6483,
      "ruleset_version": "v2.0-ruleset-2026-08"
    }
    Sub-fields · what they mean for the loan
    noi_base
    NOI before any hazard load — rent minus taxes and base insurance.
    noi_risk_adjusted
    NOI after flood premium and non-flood expected loss — the figure to underwrite to.
    required_flood_coverage
    Coverage the determination requires, carried into the premium math.
    nfip_rate_per_1k
    Median NFIP rate applied to that coverage.
    nfip_rate_scope / nfip_sample_size
    The cohort (state/national) and its n — your confidence in the rate.
    flood_premium_before_crs
    Modeled premium before the community discount.
    crs_discount_pct
    The CRS discount rate applied.
    flood_premium_estimate
    Modeled annual flood premium after CRS — the carrying-cost line item.
    nonflood_expected_annual_loss
    Expected loss from wildfire and 15 other perils, $/yr, from the NRI.
    wildfire_expected_annual_loss
    Wildfire's share of that expected loss, broken out.
    insurance_total_modeled
    Base + modeled flood + perils — full modeled insurance carrying cost.
    implied_insurance_multiplier
    Modeled insurance ÷ base; how much risk inflates carrying cost.
    cap_rate_base_pct → cap_rate_adjusted_pct
    Cap rate before and after the risk load — the number that moves the deal.
    rules_applied / rules_skipped
    Which deterministic pricing rules fired or were skipped — audit transparency.
    methodology
    The arithmetic, written out.
    ruleset_version
    Version of the ruleset, so any figure reproduces exactly.
    insurance_uplift_multiplier / insurance_adjusted
    Optional override hooks; null when unused.
  • Example · Boulder, COdocumented
    "flood": {
      "fema_zone": "AE",
      "zone_subtype": "FLOODWAY",
      "risk_label": "HIGH",
      "bfe_ft": null,
      "panel_id": "08013C0394K",
      "source": "FEMA NFHL MapServer 28 + 3 + 22"
    }
    Sub-fields · what they mean for the loan
    fema_zone / zone_key
    The FEMA flood zone code (AE, VE, X, …).
    zone_subtype
    Sub-zone such as FLOODWAY — the most restrictive SFHA area; limits building and grading.
    risk_label
    Coarse HIGH / MODERATE / LOW band for quick triage.
    bfe_ft
    Base flood elevation; compare to ground to size fill or elevation cost. Null where FEMA sets none.
    panel_id
    The FIRM panel of record — the citable map behind the call.
    source
    Which FEMA NFHL layers answered (zones, panels, jurisdictions).
  • Example · Boulder, COdocumented
    "national_risk_index": {
      "tract_fips": "08013012204",
      "overall_risk_rating": "Relatively Moderate",
      "overall_risk_score": 68.36,
      "nonflood_alrb_total": 0.000286,
      "hazard_ratings": { "WFIR": "Very Low", "IFLD": "Relatively High", "HAIL": "Relatively High" },
      "hazard_loss_ratios": { "WFIR": 9.0e-8, "IFLD": 0.000683, "HAIL": 0.000124 }
    }
    Sub-fields · what they mean for the loan
    tract_fips
    Census tract the NRI figures key to.
    overall_risk_rating / _score
    FEMA's composite hazard rating and 0–100 score for the tract.
    nonflood_alrb_total
    Non-flood annualized building-loss ratio, summed — feeds the expected-loss charge.
    hazard_ratings
    Per-hazard qualitative ratings (WFIR wildfire, IFLD riverine flood, HAIL, …).
    hazard_loss_ratios
    Per-hazard annualized building-loss ratios — the quantitative input behind the charge.
    source
    FEMA National Risk Index, census-tract level.
  • Example · Boulder, COdocumented
    "climate_wildfire": {
      "wildfire_national_percentile": 40.79,
      "wildfire_risk_rating": "Very Low",
      "wildfire_annualized_loss_ratio": 9.02e-8,
      "noaa_forecast_zone": "COZ039",
      "noaa_fire_zone": "COZ239"
    }
    Sub-fields · what they mean for the loan
    wildfire_national_percentile
    Where the parcel ranks nationally for wildfire (0–100).
    wildfire_risk_rating
    Qualitative wildfire class.
    wildfire_annualized_loss_ratio
    Expected wildfire building-loss ratio, used in the perils charge.
    noaa_forecast_zone
    NOAA public forecast zone — general weather context.
    noaa_fire_zone
    NOAA fire-weather zone — red-flag / fire-weather context.
    source
    NOAA NWS points API + FEMA NRI (census tract).
  • Example · Boulder, COdocumented
    "elevation": {
      "elevation_ft": 5341.77,
      "slope_pct": 0.51,
      "source": "USGS 3DEP ImageServer (1/3 arc-second DEM)"
    }
    Sub-fields · what they mean for the loan
    elevation_ft
    Ground elevation; against the BFE it tells you flood exposure and fill needed.
    slope_pct
    Grade — drives drainage, gradability, and construction cost.
    source
    USGS 3DEP digital elevation model.
  • Example · Boulder, COdocumented
    "demographics": {
      "median_household_income": 49490,
      "median_home_value": 1227700,
      "source": "US Census ACS 2023 5-year"
    }
    Sub-fields · what they mean for the loan
    median_household_income
    Tract income — rent support and market depth.
    median_home_value
    Tract home value — collateral context and a comp sanity check.
    source
    US Census ACS 5-year, by tract.
  • Example · Boulder, COdocumented
    "audit": [
      {
        "field": "elevation_ft",
        "value": 5341.77,
        "source": "USGS 3DEP ImageServer (1/3 arc-second DEM)",
        "queried_at": "2026-08-07T17:17:18Z",
        "effective_date": null,
        "error": null
      }
    ]
    Sub-fields · what they mean for the loan
    field
    Which response field this entry certifies.
    value
    The value returned for it.
    source
    The federal source of record.
    queried_at
    When it was read; on a cache hit the original read's timestamp is kept, so provenance never lies.
    effective_date
    The data's own effective date, where the source publishes one.
    error
    Populated when a read failed or degraded — how you know a layer is soft.
Rate schedule

Priced on the page, not by quote.

The data gateways quote you privately; here every tier is on the page — and you can watch it pay for itself against your own desk. Every tier includes all layers, financials, batch, as_of versioning, MCP and REST.

Your numbers — everything recomputes live
500
2 hr

the manual way — assembling five vendors by hand

$75

fully loaded

1 / yr

flood or hazard zones a manual pass would overlook

$50,000

an uninsured AE-zone loss runs ~$50k

Potential savings · your inputs
Analyst time reclaimed
$855,000 / yr
Loss avoided
$50,000 / yr
Territas Solomatched to 500 / mo · 500 included
− $4,200 / yr
Net savings$75,067/mo · 215.5×
$900,800/ yr
Start on Solo →

Illustrative — time reclaimed assumes ~6 min review per sheet; loss avoided is your own count. Annual plans bill two months free.

2 months free
NO CARD
Trial
Free7 days
50 underwritesno overage — stops at 50
1 seat

Evaluate the API + audit JSON

Start the 7-day trial
Solo
$350/mo
500 underwrites / mothen $0.40 / call over
1 seat

Solo operator · a few deals a week

Get started
Starter
$1,000/mo
2,500 underwrites / mothen $0.30 / call over
Unlimited seats · shared usage

One underwriting desk · 30–50 loans/mo

Get started
MOST DESKS
Growth
$3,500/mo
10,000 underwrites / mothen $0.20 / call over
Unlimited seats · shared usage

Small fund · 100–200 leads/week

Get started
Pro
$9,000/mo
50,000 underwrites / mothen $0.10 / call over
Unlimited seats · shared usage

Lender with 3+ desks

Get started

The trial runs the full engine — all layers, financials, batch, as_of versioning, MCP and REST — and stops at 50 underwrites. Starter and up include unlimited seats on one shared usage limit — the whole desk works from a single account and a single bill. Annual plans bill up front for the year (two months free). Metered billing is on the roadmap; today paid accounts are invoiced per engagement, with no hidden per-layer charges.

Put a determination in front of your credit committee.

Bring one address. We'll survey it live, stamp the flood determination and the risk-adjusted NOI, and hand you the audit trail behind every field.