bricks self-service data platform · Twin Cities

Brick & Mortar · datasets

What a commercial foot has traded at, half-year by half-year

One row per half-year: what the middle sale in this market went for per square foot of building, with the count behind it and the quartiles either side. The index column is that median expressed against 2019 H1 = 100, which is the comparison the file is for — a level in dollars per foot means little on its own and a great deal against where it was six half-years ago. Read the count with the median every time: a half-year is six months of one metro, and the quartile spread here is wide because a downtown office foot and a suburban warehouse foot are both in it.

A row here is six months of a whole market, not a place. Inside one radius a half-year holds a sale or two, and a median of two sales is just one of them — the series would become noise with a trend line drawn through it. For the sales themselves around one address, use the comp file.

The file

14 half-years · 2,820 usable comps with a building area · 2019 H1–2025 H2

14 rows

Counties in this file: Anoka, Carver, Dakota, Hennepin, Ramsey, Scott, Washington · 17 columns available · free, no account, no rate limit.

What the rows look like

10 real rows from this file, spread evenly across it rather than taken off the top — every file here is written in some order, so its first rows are never a fair sample of it. These are the default columns, which is what the download button hands over.

half-yearsalesmedian $/building sqftindex (2019 H1 = 100)lower quartile $/sqftupper quartile $/sqftmedian price
2019 H1189121.95100.077.9199.86900,000
2019 H2182112.6392.473.09204.311,025,250
2020 H2179119.4497.979.51186.83940,000
2021 H1209126.64103.883.78199.73760,000
2022 H1217144.85118.8100.19236.511,270,000
2022 H2246151.89124.6107.6233.011,363,166
2023 H2208139.5114.495.52252.831,016,000
2024 H1169150.0123.0100.35260.861,150,000
2025 H1171151.9124.6106.75261.781,150,000
2025 H2252157.81129.4113.41266.681,262,500

The cuts of this file

Every cut is the same columns, filtered. Pick one and the row count changes; the file does not.

3 scopes
CutRowsFile
every half-year 14 CSV
2019 H1 against 2025 H2 2 CSV
since rates moved, 2022 on 8 CSV

Every column in this file

Columns marked default come down unless you pick your own with &columns=.

17 columns
ColumnWhat it isIn the default file
half_year half-year default
sales sales default
median_price_per_building_sqft median $/building sqft default
index_base_100 index (2019 H1 = 100) default
p25_price_per_building_sqft lower quartile $/sqft default
p75_price_per_building_sqft upper quartile $/sqft default
median_price median price default
commercial_sales commercial sales optional
commercial_median_ppsf commercial median $/sqft optional
industrial_sales industrial sales optional
industrial_median_ppsf industrial median $/sqft optional
unclassified_sales class not readable optional
median_price_per_lot_sqft median $/lot sqft optional
median_building_sqft median building sqft optional
total_price total recorded price optional
first_month from optional
last_month to optional

Where it comes from

Hennepin County, Ramsey County, Dakota County, Anoka County, Washington County, Scott County and Carver County assessor sale of record

This source does not stamp the day it was published, so we cannot honestly date our copy of it and will not guess. The period the records themselves cover is on the system card.

What this layer cannot answer is stated in full on the system card — read it before quoting a figure.

What you may do with it

Creative Commons Attribution 4.0 International (CC BY 4.0). Share it, change it, build a product on it, sell that product — all fine. The one condition is credit: say it came from Brick & Mortar and link back.

Records published by county assessors. Government data held by a Minnesota state agency or political subdivision, presumed public under the Minnesota Government Data Practices Act (Minn. Stat. ch. 13) and published by the agency itself.

Read the full licence · how we license every dataset, and the two we do not

Without the page

/api/export?dataset=cre-price-index&format=csv returns the same file. Call /api/export with no arguments for the whole catalogue.

Point an AI at it

Every file carries its own source, its capture date and the layer's own warnings in the header, so a model reading one gets the caveats with the numbers rather than the numbers alone. Paste this at an assistant that can fetch a URL:

Read https://brickandmortar.dev/api/export?dataset=cre-price-index&format=csv
Everything above the header row is provenance and limits. Read it first,
then answer using only what the rows support.

llms.txt describes the whole warehouse the same way — what each dataset holds, which counties it really covers, and what it cannot answer.