Data Dictionary
Every field in the dataset, defined. Parquet files carry the full schema (including nested price and tax history); CSV files carry the flat columns.
| Column | Type | Description | Example |
|---|---|---|---|
| id | text | Stable Straply property id. Also a live API endpoint — GET /property/{id} on Straply returns this property's current data. | stp_a1b2c3d4 |
| street | text | Street address line (number + street name). | 742 Evergreen Ter |
| unit | text | Unit, apartment or suite designator, if any. | 4B |
| city | text | City / place name. | Miami |
| state | text | Two-letter U.S. state or territory code. | FL |
| zip | text | 5-digit ZIP code. | 33101 |
| lat | decimal | Latitude (WGS84). | 25.7617 |
| lng | decimal | Longitude (WGS84). | -80.1918 |
| property_type | enum | Standardized type: single_family, condo, townhouse, multi_family, manufactured, land, apartment, coop, other. | single_family |
| beds | integer | Number of bedrooms. | 3 |
| baths | decimal | Number of bathrooms (half-baths allowed). | 2.5 |
| sqft | integer | Living area, square feet. | 1840 |
| lot_sqft | integer | Lot size, square feet. | 6098 |
| year_built | integer | Year the structure was built. | 1998 |
| heating_type | enum | Heating system, normalized to one of forced_air, heat_pump, radiant, baseboard, wall, electric, gas, none, other. | forced_air |
| central_air | boolean | true if the property has central air conditioning; blank if not stated. | true |
| hoa_fee | integer (USD) | Homeowners-association fee, normalized to a monthly amount. | 250 |
| pool | boolean | true if the property has a pool; blank if not stated. | true |
| garage | boolean | true if the property has a garage; blank if not stated. | true |
| waterfront | boolean | true if the property is waterfront; blank if not stated. | true |
| fireplace | boolean | true if the property has a fireplace; blank if not stated. | true |
| basement | boolean | true if the property has a basement; blank if not stated. | true |
| listing_type | enum | Special listing category when applicable: auction, bank_owned, foreclosure, pre_foreclosure, new_construction, fsbo, coming_soon. | foreclosure |
| status | enum | Listing status, normalized to active, sold, or off_market. | active |
| list_price | integer (USD) | Most recent list price, when listed. | 525000 |
| last_sold_price | integer (USD) | Most recent recorded sale price. | 480000 |
| last_sold_date | date (YYYY-MM-DD) | Date of the most recent recorded sale. | 2023-06-14 |
| parcel_apn | text | Assessor's Parcel Number — the county's parcel identifier. | 01-3209-014-0230 |
| county_fips | text | 5-digit county FIPS code. | 12086 |
| source_count | integer | How many public records were reconciled into this row — a rough confidence signal. | 2 |
| price_history PARQUET | list<struct> | Chronological price events, each {date, event, price}. Parquet only. | [{2023-06-14, sold, 480000}] |
| tax_history PARQUET | list<struct> | Annual property-tax records, each {year, amount, assessment}. Parquet only. | [{2023, 5820, 461000}] |
Two formats, one schema
Parquet is the canonical file — all 32 columns, including the nested price_history and tax_history arrays. CSV is the flat convenience format: the same records minus the two nested history columns (30 columns). Every property carries a stable id; the rest are facts about the property, never about its owner.
Opening the files
Parquet reads natively in pandas (pd.read_parquet()), DuckDB (SELECT * FROM 'file.parquet'), Polars, Spark, and most analytics tools. CSV opens anywhere. See the license (CC0 — use it for anything).
From a row to a live lookup
Each row's id (e.g. stp_a1b2c3d4) is also a live endpoint on Straply: GET /property/stp_a1b2c3d4 returns that property's current state. A downloaded file is a snapshot; the id is how you re-check any row later.
Frequently asked
What's the difference between the Parquet and CSV files?
Are owner names included?
What does source_count mean?