Overview
A property record is everything the county recorded for a parcel: owner, address, structures, land, valuation, taxes and sale history, along with the boundary geometry, the PropertyLayer identifiers and the enrichment fields. Every field is optional. If a value is null or missing, it was not published for that property. PropertyLayer does not estimate or infer.PropertyLayer identifiers and geometry
Assessor identifiers (identity)
Owner (ownership)
Property address (situs_address)
Classification
Structure summary (building_summary)
Rolled up across every structure on the property. Read this when you want one number per property.Counties measure building area differently.
universal_building_sqft picks the best available measure per record and universal_building_sqft_source tells you which one, so you can hold the basis constant when comparing across counties.Structures (buildings[])
One entry per structure, with whatever construction detail the assessor carries.Land
Valuation (valuation_current, valuations[])
valuation_current is the latest roll year. valuations[] is the full history, one entry per year.
valuation_current additionally carries appraised_land, appraised_improvements, taxable_land, taxable_improvements, exempt_value, and homestead_value.
Taxes
Exemptions
Sale history (transfers[])
Every recorded transfer the assessor carries.Use
is_arms_length to exclude intra-family transfers, quitclaims, and $1 nominal deeds before computing price statistics.Legal description (legal)
Location
Districts
Taxing and service districts:{ kind, code, name }. Common kind values are tax_district, school, jurisdiction, city, municipality, township, county, special_service, fire, college, hospital.
Computed fields (derived)
PropertyLayer-computed roll-ups, present on every assessor record. Use these instead of walking the arrays yourself.Use
calculated_total when you need one comparable value per property nationwide. It reconciles counties that publish assessed, market, or appraised figures under different names.Flags and links
Normalized vs. verbatim values
Most assessor string fields are passed through exactly as the county publishes them, with no cross-county normalization.buildings.pool alone appears as No, NO, N, 0, No Pool, Yes, Y, YES, Pool, and more.
Normalized, cross-county-comparable fields are limited to:
derived.calculated_total/calculated_land/calculated_improvementsderived.last_sale_date/last_sale_pricederived.has_building/has_sales/has_valuation_historybuilding_summary.universal_building_sqft(withuniversal_building_sqft_source)transfers[].is_arms_length/is_nominal/is_quitclaimidentity.*andlocation.census_tract
Schema versioning
Each assessor record carries aschema_version. Counties periodically publish attributes that are not yet in the PropertyLayer schema, and those get passed through on the relevant section rather than dropped. So treat every section as open: parse what you need and ignore the rest. The list above is not exhaustive.
Enrichments
External datasets joined onto every property by PropertyLayer.USDA Cropland Data Layer (CDL)
The CDL is updated annually by USDA and covers all US agricultural land. Useful for filtering properties by crop type or separating agricultural from developed land at scale.
FEMA flood zones
Zone
X indicates minimal flood hazard. Zones beginning with A or V indicate Special Flood Hazard Areas (SFHA) where federal flood insurance may be required.
Elevation and adjacency
adjacent_acreage_sameowner is useful for identifying large contiguous landholdings split across multiple parcel records.
Building footprints (building_footprints[])
Opt in withinclude_buildings: true. Each entry is one structure from the ORNL building footprint dataset.
The key is omitted entirely when
include_buildings was not requested, which says nothing about whether buildings exist.
building_footprints is ORNL footprint geometry and height. It is not the same as the assessor’s buildings array, which carries per-structure construction detail: bedrooms, baths, roof, HVAC, year built.Null values
A null or absent value means that data was not published for the property. PropertyLayer does not estimate, impute, or infer missing values. This is by design: a missing sale price means no sale was recorded, not that the property has never sold. A missingclassification.zoning means zoning was not published.
PropertyLayer retains all property records regardless of data completeness. Some competitors remove parcels that fall below a minimum field threshold, which makes their counts appear lower. PropertyLayer keeps every record a county publishes, so counts reflect what the county actually recorded.