Brick & Mortar · datasets

What has been permitted on the houses, not the shops

ONE FILE PER CITY, sharded by year underneath (invisible in the UI).

The file

397,338 permit rows since 2020 on parcels outside the commercial index — 370,463 distinct permits — from the Minneapolis and Saint Paul desks, one file per city. The exact complement of the commercial permits: nothing is in both.

397,338 rows

Counties in this file: Hennepin, Ramsey · 26 columns available · free, no account, no rate limit.

Joins to an address on lat, lon, so it can be pointed at one property rather than read whole.

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.

addressissuedkind (office's word)work (office's word)tradeapplicant (Minneapolis)contractor (Saint Paul)
1 27TH AVE S E2020-10-14MechanicalExistRessystemsMESPO HEATING AND COOLING INC—
3324 3RD AVE S2021-08-30ResMiscstructuralROOFS-R-US—
5105 OAKLAND AVE2022-12-16ResMiscstructuralMinnesota Rusco Inc—
814 35TH ST E2023-05-08ResMiscstructuralJay Wahi—
3412 5TH AVE S2024-11-25PlumbingRessystemsCenterPoint Energy Resource Corp—
3207 4TH ST N2026-08-12MechanicalExistRessystemsMetro Heating & Cooling LLC—
290 MISSISSIPPI RIVER BLVD S2021-10-25Mechanical PermitResidential Newsystems—TWIN CITY FIREPLACE & STO TWIN CITY FIREPLACE & STONE CO
1047 ARMSTRONG AVE2022-06-17Building PermitExpress Repairstructural—DICK PALMGREN / JOHN DALNES (MASONRY) LOOKING GLASS PROPERTIES LLC
574 SUMMIT AVE2023-01-17Building PermitRemodelstructural—TIM RASCHER RASCHER AND CO LLC
1930 COMO AVE2025-01-02Warm Air, Ventilation & General SheetCommercial Replacesystems—Saint Paul Public Schools

An em dash means the record is blank, and that is the source's gap rather than ours. Across the whole file: contractor (Saint Paul) is blank on 59.1% of rows, applicant (Minneapolis) is blank on 40.9% of rows, address is blank on 3.3% of rows.

The cuts of this file

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

2 scopes
CutRowsFile
Minneapolis 234,937 CSV
Saint Paul 162,401 CSV

Every column in this file

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

26 columns
ColumnWhat it isIn the default file
address address default
issued issued default
kind kind (office's word) default
work work (office's word) default
trade trade default
occupancy occupancy (Minneapolis) optional
sub_type sub type (Saint Paul) optional
status status optional
completed completed optional
fees_usd fees (Minneapolis) optional
value_usd declared value (Saint Paul) optional
applicant applicant (Minneapolis) default
applicant_address applicant mailing address optional
contractor contractor (Saint Paul) default
contractor_address contractor mailing address optional
use use (assessor class) optional
year_built year built optional
units_added units added optional
units_removed units removed optional
rows_per_permit rows per permit optional
permit_no permit number optional
parcel_id parcel id optional
city city optional
county county optional
lat latitude optional
lon longitude optional

Where it comes from

Minneapolis CCS_Permits and Saint Paul Approved_Building_Permits registers

Records retrieved 2026-09-08 — the oldest capture date among the layers behind this file, because data is no fresher than its stalest input.

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 City of Minneapolis, City of Saint Paul. 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=permits-residential&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=permits-residential&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.