The data - which columns matter

Download field-map.mdDownload the full skill (.zip)

Field map — what the comp process reads from the data

The dataset is a slimmed MLS export: 33 columns, sale and lease records side

by side. PropertyType separates the two markets, and the process never mixes

them in one comp set.

Required — the analysis cannot run without these

ColumnWhy it is required
StandardStatusOnly Closed listings become comps. Actives are asking prices, not evidence.
PropertyTypeSale vs lease — the market wall.
PropertySubTypeA condo is not a comp for a detached house.
CityMarket boundary.
BedroomsTotal / BathroomsTotalIntegerSelection filters and adjustments.
LivingAreaPrice-per-sqft, the size adjustment, the size band.
ClosePriceThe number everything derives from.
CloseDateThe lookback window.
YearBuiltAge filter and adjustment.
Latitude / LongitudeThe radius filter, distance ranking, and the map.

Matching — the columns behind the ranking rules

ColumnRole
SubdivisionNameThe tract. Tract-first ranking; near-model matches.
BuilderModelThe model, where present (sparse) — strongest possible match.
Levels / StoriesTotalA two-story is a different product from a single-level.
PropertyAttachedYN / CommonWallsThe attached/detached wall, even when subtype is sloppy.

Optional — improve the result, never block it

ColumnEffect if absent
ListingIdThe audit trail — every comp in a report carries it.
GarageSpaces, ViewYN, PoolPrivateYN, FurnishedTheir adjustments are skipped (unknown is not "no").
StreetNumberNumeric / StreetName / StreetSuffix / UnitNumberAddresses degrade.
ListPrice, OriginalListPrice, DaysOnMarket, LotSizeSquareFeet, PostalCode, MLSAreaMajorContext only.

Traps in this data — real, observed, and why the rules exist

1. Dates read MM/DD/YYYY 12:00:00 AM (sometimes M/D/YYYY H:MM).

Compare as dates, never as text — text-sorted, 01/04/2026 lands before

12/05/2025 and a lookback filter grabs the wrong year.

2. Condo complexes share one geocode. Several listings — sometimes

including the subject — carry identical coordinates because the MLS

geocodes the complex, not the unit. This is why the map fans out stacked

pins instead of letting them bury each other.

3. The same address closes more than once (especially leases). One

property with a history, not two properties — but it double-weights a comp

set, so say so when it happens.

4. Price-per-sqft outliers are real. The low end is usually a room rental

or partial lease; note them, do not silently drop them.

5. A raw 596-column export repeats some column names and most of its

columns are empty. The slim dataset avoids this; when handed a raw export,

use the copy of a duplicated column that actually has values.

6. BuilderModel is sparse (~5–10% populated). Treat a model match as a

bonus, never a requirement.