README for Replication of "The Long Shadow of Housing Discrimination: Evidence from Racial Covenants" (Aradhya Sood, Kevin Ehrman-Solberg)

Introduction

This repository contains the code, data and, the output tables and figures used in the paper “The Long Shadow of Housing Discrimination: Evidence from Racial Covenants”, published in the Review of Economic Studies, by Aradhya Sood and Kevin Ehrman-Solberg.


Author

Aradhya Sood

aradhya.sood@rotman.utoronto.ca

https://www.aradhyasood.com


Directory Structure

racial-covenants/
├── run_order.txt                                      ← Pipeline execution order and instructions
├── README.md
│
├── Data/
│   ├── RAW/                                      ← Original source data (inputs to pipeline)
│   │   ├── 1940 ED Data/                         ← 1940 Enumeration District shapefiles
│   │   ├── AHS_Minneapolis_StPaul/               ← American Housing Survey files
│   │   │   └── [1974, 1977, 1981, 1985, 1989, 1993, 1998, 2007, 2013, 2017, 2021]/
│   │   ├── BLM/                                  ← BLM civil disturbance shapefiles
│   │   ├── Census Shape Files/                   ← Census boundary shapefiles by year
│   │   │   └── [1940, 1960, 1980, 1990, 2000, 2010, 2020]/
│   │   ├── Census non-spatial data/              ← Census tabular data
│   │   │   ├── 1940 Enumeration District/
│   │   │   ├── Census Block/
│   │   │   │   └── [1980, 1990, 2000, 2010, 2020]/
│   │   │   ├── Census Block Group/
│   │   │   │   └── [1990, 2000, 2010, 2020]/
│   │   │   ├── Census County/
│   │   │   │   └── [1940, 1960, 1980, 1990, 2000, 2010, 2020]/
│   │   │   └── Census Tract/
│   │   │       └── [1940, 1960, 1980, 1990, 2000, 2010, 2020]/
│   │   ├── City Boundary/                        ← Minneapolis city boundary shapefile
│   │   ├── Covenant Data/                        ← Racial covenant shapefiles and CSV
│   │   │   └── covshp/
│   │   ├── CPI/                                  ← Consumer Price Index data
│   │   ├── Election 1961 Shape Files/            ← 1961 ward and precinct shapefiles
│   │   ├── Election 1964 1968 Outcome/           ← General election results data
│   │   ├── Hennepin Altitude/                    ← Elevation data
│   │   ├── Lakes and Rivers/                     ← Metropolitan Council water features
│   │   ├── MLCCS/                                ← Minnesota Land Cover Classification System
│   │   ├── Mortgage/                             ← Sale and resale data
│   │   ├── OpenStreetMap/                        ← Minnesota OSM extract and travel time output
│   │   ├── Parcel Data/                          ← 2019 and 2020 Hennepin County parcel shapefiles
│   │   ├── Permit Cards/                         ← OCR output from historic building permit cards
│   │   ├── Roads/                                ← TIGER/Line primary and secondary roads
│   │   ├── Soil Quality/                         ← NRCS Web Soil Survey shapefiles
│   │   ├── Wetland/                              ← 1899 historical wetlands shapefile
│   │   ├── Zillow Characteristics/               ← Zillow building characteristics
│   │   ├── Zillow Value/                         ← Zillow assessed and sales value files
│   │   └── Zoning Data/                          ← Minneapolis zoning shapefile
│   │
│   └── MID/                                      ← Intermediate pipeline outputs
│       ├── Step 1/ – Step 15/                    ← Outputs from each data preparation step
│       ├── For Figures/                          ← Intermediate files used by figure scripts
│       │   ├── AHS_Minneapolis_StPaul/
│       │   ├── Counting Races/
│       │   └── fig2/
│       └── For Model Code/                       ← Intermediate files used by model scripts
│
├── Programs/
│   ├── 00_housekeeping.do                        ← Sets all global Stata directory paths
│   ├── Data Code/                                ← Steps 01–15f: constructs analysis_withcensus.dta
│   ├── Figures and Tables Code/
│   │   ├── Figures/                              ← One subfolder per figure in the paper
│   │   │   ├── Fig 2 (Expansion of New Construction and Racial Covenants)/
│   │   │   ├── Fig 3, C.1 (Covenants in Transition Neighbourhoods)/
│   │   │   ├── Fig 4, C.1 (Time to Build and Baseline Sample)/
│   │   │   ├── Fig 5 (Percentage of Minority Residents)/
│   │   │   ├── Fig 6 (Externality Effects of Racial Covenants)/
│   │   │   ├── Fig A.2 (Covenants Executed per Year)/
│   │   │   ├── Fig B.1 (Mean Number of Races Listed in Covenants Per Year)/
│   │   │   ├── Fig B.2 (Planned vs. Constructed Highways)/
│   │   │   ├── Fig C.2 (Segregation Externality Effects)/
│   │   │   ├── Fig C.3 (Property Tear Down Rate)/
│   │   │   └── helper files/
│   │   └── Tables/                               ← .texdoc files for each table; see Table Creation Master File.txt
│   └── Model Code/                               ← Stata .do files for all regressions and model output
│
└── Results/
    ├── figures/                                  ← Figure output (dated subfolders by run)
    └── tables/                                   ← Table output (.tex files, dated subfolders by run)

Repository Overview and Quick Start

The code in this replication package constructs the analysis file from 23 datasets using both Stata and Python (Jupyter notebooks). The code files listed under Programs/Data Code/ run all of the code to generate the data for analysis. The code files listed under Programs/Model Code/ generate the 5 figures and 5 tables in the paper, as well as all the online appendix tables and figures.

The repository does not use a single executable master script because the workflow alternates between Stata do-files and Jupyter notebooks. Instead, the file Programs\run_order.txt provides the exact execution order of all scripts required to reproduce the analysis. To reduce the number of individual files a replicator must run, convenience runner scripts have been added for Steps 4, 5–8, and 10–14b: 04_Data-Prep.py and 04_Data-Prep.do cover all Step 4 files; 05-08_Data-Prep.py covers Steps 5–8; and 10-14b_Data-Prep.do covers Steps 10–14b. Each runner executes its constituent scripts in the correct order and halts immediately on any error. The file (run_order.txt) outlines the steps to run all data code 15 steps (Steps 01 - 15f), producing the main analysis file analysis_withcensus. Model estimation and figure/table generation follow. Scripts must be executed sequentially and should not be run in parallel because later steps depend on intermediate files generated by earlier steps.

The replicator should expect the code to run for approximately 90-120 minutes on a standard desktop machine.


Data Details and Availability

Some data cannot be made publicly available. A summary of data availability is provided below. The data below is divided into 3 categories:

  1. Public use data collected by the authors
  2. Data sourced from elsewhere and not provided due to restrictions. See below on how to access this data. Note that restricted datasets are required only for constructing intermediate variables and do not prevent reproduction because derived variables are provided.
  3. Public use data sourced from elsewhere and provided

Statement about Rights

I certify that the authors of the manuscript have documented permission to redistribute/publish the data contained within this replication package. Appropriate permissions are documented below.

Data list for public use data collected by the authors

These files represent primary datasets created and extracted directly from historical archives, historical image or PDF maps, and historical documents; comprehensive instructions on how to access the original source media are provided within this replication package. These data were collected and processed by the authors and are available for public use. Specifically, the data repository consists of four types of primary data. First, it includes spatial shapefiles generated from historical maps. For these records, the exact source links to the original archival maps are detailed in the documentation, allowing future replicators to rasterize and digitize the map layouts independently if desired. Second, it includes comprehensive building permit records along with Hennepin County’s general election results from 1964 and 1968. These tabular attributes were systematically compiled by the authors from raw historical archives using an optical character recognition (OCR) program via the Amazon Textract software. Third, it includes data on the first sale of new houses built and their subsequent resale of these houses for a sample of houses in the data using the historical sale register. Fourth, it includes the car travel time between each parcel and its nearest highway exit calculated using Open Street Map (OSM).

  1. 1940 Enumeration District Map Shapefiles: The baseline spatial boundaries for the 1940 Enumeration District (ED) maps were digitized and geocoded by the authors from historical cartographic records procured via the National Archives Catalog. The original archival source images can be accessed and downloaded directly from the National Archives using the following six catalog identifiers: ID: 5833128 (https://catalog.archives.gov/id/5833128), ID: 5833129 (https://catalog.archives.gov/id/5833129), ID: 5833130 (https://catalog.archives.gov/id/5833130), ID: 5833131 (https://catalog.archives.gov/id/5833131), ID: 5833132 (https://catalog.archives.gov/id/5833132), and ID: 5833133 (https://catalog.archives.gov/id/5833133). The resulting digitized geographic shapefile, part of this replication package, was compiled by the authors, is intended for public use, and should be cited according to the framework established by Almagro et al. (2026). The processed spatial data layers have been deposited in the "1940 Minneapolis ED Maps Shapefiles" repository on GitHub at https://github.com/aradhyasood1/Hennepin-County-1940-Enumeration-District-Boundaries, where they are made available under a Creative Commons Attribution-NonCommercial (CC BY-NC) license.
  2. 1961 Minneapolis Electoral Ward and Precinct Map: The baseline spatial boundaries were digitized and geocoded from historical cartographic records procured via the Minnesota Historical Society. The raw image files are omitted from this replication package, however, the original archival source images can be accessed and downloaded directly from the Minnesota Historical Society Collection Record (https://www.mnhs.org/collection-record?uuid=3d69a61d-e388-487c-8b81-a49c8941012f). The resulting digitized geographic shapefile included in this replication package was compiled by the author, is intended for public use, and should be cited according to the framework established by Sood (2026a). The processed spatial dataset supporting the findings of this study has been deposited in the "1961 Minneapolis Electoral Ward and Precinct Map" repository on GitHub at https://github.com/aradhyasood1/1961-Minneapolis-Electoral-Ward-and-Precinct-Map. These data files were developed and structured by the author and are made available under a Creative Commons Attribution-NonCommercial (CC BY-NC) license.
  3. Hennepin County 1964 and 1968 General Election Results: The baseline historical election data was obtained from the Minnesota Legislative Reference Library’s Elections of Interest archive https://www.lrl.mn.gov/mngov/electionresults. The specific source material includes the November 3, 1964 General Election Manual (https://www.lrl.mn.gov/archive/sessions/electionresults/1964-11-03-g-man.pdf) and the November 5, 1968 General Election Manual (https://www.lrl.mn.gov/archive/sessions/electionresults/1968-11-05-g-man.pdf). The digitized spreadsheet outputs generated from these raw reports were systematically compiled by the author, are intended for public use, and should be cited according to the framework established by Sood (2026b). The processed historical dataset supporting the findings of this study has been deposited in the "Hennepin County 1964 and 1968 General Election Results Data" repository on GitHub at https://github.com/aradhyasood1/Hennepin-County-1964-and-1968-General-Election-Results-Data. These data files were collected and structured by the author and are made available under a Creative Commons Attribution-NonCommercial (CC BY-NC) license.
  4. Minneapolis Historic Building Permits Index Cards: The baseline historical records were sourced from the Hennepin County Library Digital Collections. The raw archival media files (consisting of individual document scans) are omitted from this replication package; future researchers wishing to rebuild the image cache must download the cards from the repository manually or deploy an automated scraping script using the link: https://digitalcollections.hclib.org/digital/collection/PermitCards/search. Following acquisition, the textual fields can be processed manually or using optical character recognition (OCR) via Amazon Textract or an equivalent automated text extraction pipeline. The processed tabular dataset generated through Textract was compiled by the author, Aradhya Sood, is approved for public use, and has been deposited in the “Minneapolis Historic Building Permits Data” repository on GitHub at https://github.com/aradhyasood1/Minneapolis-Historic-Building-Permits-Data. These data are available under a Creative Commons Attribution-NonCommercial (CC BY-NC) license and should be cited according to the framework established by Sood (2026c).
  5. Sale and Resale Data: The sale and resale data was collected manually by the author from Hennepin County’s property records system by linking parcel identification numbers (PIDs) in the assessor shapefile (Data #10) to historical land records of the county using the link: https://recordeasepro.hennepin.mn.wcicloud.com/login.aspx?ReturnUrl=%2f. The author searched property records using parcel information such as subdivision (addition) name, block number, lot number, build year, and land registration type (Torrens or Abstract) to identify the transaction associated with the property's initial sale. The author then went down the register to see if there was resale recorded in the register and note the date if it was. This dataset compiled by the author, Aradhya Sood, is made available as part of this replication package, is approved for public use, and is available for download at this replication repository itself https://github.com/aradhyasood1/The-Long-Shadow-of-Housing-Discrimination-Evidence-from-Racial-Covenants. These data are available under a Creative Commons Attribution-NonCommercial (CC BY-NC) license and should be cited according to the framework established by Sood (2026d).
  6. Travel Time through Open Street Map Data: For variable “travel_time_s1100,” travel time in a car from a parcel identification numbers (PIDs) in the assessor shapefile (Data #10) to the nearest highway exit is calculated by the author using the OpenStreetMap (OSM) geographic data extracts for Minnesota, obtained from the Open Street Map (Open Street Map and Geofabrik, 2025) server using the link: https://opendata.minneapolismn.gov/datasets/city-boundary/about/, and cross-referenced with the US Census Bureau TIGER/Line Roads file (Data #16). The workflow was executed in several stages: first, raw Minnesota OSM data was filtered using "osmium-tool" to isolate motorway junctions, exit links, and main highway lines. Using "geopandas," these extracted exit nodes were spatially joined with the TIGER shapefile to filter strictly for MTFCC code S1100, which designates limited-access Primary Roads and Interstates. To pair the 435,765 parcels with their closest validated highway exit, a SciPy "cKDTree" was utilized for an instant, straight-line spatial lookup. Finally, the exact driving times between each parcel and its matched exit were calculated using the Open Source Routing Machine (OSRM) query API. Because the public OSRM server is a volunteer-funded, non-profit resource, heavy automated querying violates acceptable use policies and triggers automatic IP bans. To comply with these limits, the script implemented a deliberate throttle delay, meaning the travel times for all 435,765 parcels took over 3 weeks of continuous execution to compile. The compiled raw travel time dataset by the author, Aradhya Sood, is made available as part of this replication package for direct download. These data are approved for public use under a Creative Commons Attribution-NonCommercial (CC BY-NC) license and should be cited according to the framework established by Sood (2026d). Future replicators looking to regenerate this variable from scratch can bypass the over 3-week external API restriction by utilizing third-party paid commercial services, if they so choose.

Data sourced from elsewhere and not provided due to restrictions

Four restricted data files are omitted from the public replication package. Three of these files contain proprietary data from other authors; the README provides details on who to contact for these files. The fourth file contains Zillow ZTRAX data, which must now be accessed via restricted clearance through the University of Michigan’s Inter-university Consortium for Political and Social Research (ICPSR). Detailed access instructions for all four datasets are provided in the README and listed below. Restricted datasets are required only for constructing intermediate variables and do not prevent reproduction because derived variables are provided.

  1. Mapping Prejudice Non-Public Racial Covenants Data: Additional racial covenant data was obtained directly from Penny Peterson of the Mapping Prejudice project. Because these records are not part of the publicly available dataset, the raw file is omitted from this replication package. Researchers interested in acquiring this specific file should contact Mapping Prejudice directly at mapprejudice@umn.edu.
  2. Zoning Data: The municipal zoning dataset was compiled and shared by MaryJo Webster and Michael Corey for their August 7, 2021, Minneapolis Star Tribune article analyzing metropolitan housing rules (Webster & Corey, 2021). This file is not included in the package; future replicators must contact the authors or the Star Tribune directly to request access to the data. Star tribune article retrieved on https://www2.startribune.com/how-twin-cities-housing-rules-keep-the-metro-segregated/600081529/ from August 7, 2021.
  3. Historical Wetlands Data: The 1899 historical wetlands shapefile was sourced from Almagro and Sood (2026). The digitized spatial data from this original map is proprietary and is not included in this replication package. Replicators should reach out directly to the coauthors to request the digitized shapefile.
  4. Zillow ZTRAX Data: Property assessments, transaction values, and building characteristics were sourced from the Zillow Transaction and Assessment Database (Zillow Group, 2019). While this data was originally provided free of charge under an academic research license, Zillow officially discontinued the ZTRAX program in 2023. These files cannot be included in this replication package. Instead, researchers can obtain access to this exact dataset by applying for restricted-access clearance through the Inter-university Consortium for Political and Social Research (ICPSR) at the University of Michigan (Study 39652).https://www.icpsr.umich.edu/web/ICPSR/studies/39652?utm_source=news&utm_medium=news&utm_campaign=news&utm_id=news.

Public use data sourced from elsewhere and provided

  1. 2019 Parcel Asessor Data: Property boundaries and geographic features were extracted from the 2019 Hennepin County parcel dataset (Hennepin County GIS Office, 2019). This data was obtained from the Hennepin County GIS Hub and is included directly within this replication package. Link: https://gis-hennepin.hub.arcgis.com/datasets/7975aabf6e1e42998a40a4b085ffefdf_1/explore.
  2. Mapping Prejudice Public Racial Covenants Data: Baseline racial covenant data was sourced from the Mapping Prejudice project repository via the University of Minnesota Conservancy (Ehrman-Solberg et al., 2020). The specific snapshot used in this analysis was downloaded on August 8, 2020, and the data file is included in this package. Link: https://conservancy.umn.edu/items/16b494dc-ef78-4cbf-90b3-40ebe886c13f.
  3. Minnesota Land Cover Classification System (MLCCS): This data defines the water body system in Minnesota and is sourced from the Minnesota Department of Natural Resources (Minnesota Department of Natural Resources, 2014). This dataset can be downloaded directly from the Minnesota Geospatial Commons at https://gisdata.mn.gov/dataset/biota-landcover-mlccs. This shapefile is included in the replication package. Additional note on data availability: The Minnesota Geospatial Commons is migrating to a modernized platform (gis.data.mn.gov). While some publishers are still transitioning resources, the legacy links provided in this package remain accurate for replication but may undergo domain updates.
  4. Lakes and Rivers Shapefile: This data provides the open water features for lakes and rivers sourced from the Metropolitan Council (Metropolitan Council, 2019). This layer is used to cross-check lakes within the MLCCS file and can be downloaded from the Minnesota Geospatial Commons at https://gisdata.mn.gov/dataset/us-mn-state-metc-water-lakes-rivers. This shapefile is included in the replication package. Additional note on data availability: The Minnesota Geospatial Commons is migrating to a modernized platform (gis.data.mn.gov). While some publishers are still transitioning resources, the legacy links provided in this package remain accurate for replication but may undergo domain updates.
  5. TIGER Roads Shapefile: The primary and secondary road network (highways) for Minnesota were obtained from the U.S. Census Bureau's 2021 TIGER/Line Shapefiles database (U.S. Census Bureau, 2021). This shapefile file is included in the replication package.
  6. Minneapolis Minor Disturbances Data: Data regarding minor property disturbances awas sourced from the City of Minneapolis Open Data Portal (City of Minneapolis, 2020). The specific snapshot utilized is the March 8, 2022, version, and the file is included in this package. Link: https://opendata.minneapolismn.gov/datasets/cityoflakes::damaged-properties-public/about.
  7. Consumer Price Index (CPI) Data: The CPI for All Urban Consumers was retrieved from the Federal Reserve Bank of St. Louis FRED database, originally produced by the U.S. Bureau of Labor Statistics (BLS, 2022). This macroeconomic series is included in the package. https://fred.stlouisfed.org/series/CPIAUCSL.
  8. Minneapolis City Boundary: The official municipal corporate limits were sourced from the City Boundary dataset on the City of Minneapolis Open Data Portal (City of Minneapolis, 2021). This spatial shapefile is included in the replication package. https://opendata.minneapolismn.gov/datasets/city-boundary/about/.
  9. Hennepin Altitude Data: The elevation data utilized in this study are sourced from Hennepin County GIS (Hennepin County GIS, 2018). The complete dataset is available for download through the Hennepin County GIS Open Data Portal at https://gis-hennepin.hub.arcgis.com/maps/87b53a073e33481db564305f9cab035b/about. This spatial shapefile is included in the replication package.
  10. Soil and Land Quality Data: Hennepin County soil and land characteristics were obtained from the Web Soil Survey platform, produced by the Soil Survey Staff of the Natural Resources Conservation Service under the U.S. Department of Agriculture (Soil Survey Staff, NRCS, 2022). The Hennepin County, Minnesota localized soil map unit shapefile is soilmu_a_mn053.shp and mapping attribute matrix is muaggatt.txt. This data file is included within this replication package. Link: https://websoilsurvey.sc.egov.usda.gov/App/HomePage.htm?TARGET_APP=Web_Soil_Survey_application_r2la4we05xarzj23misxitgi.
  11. Census boundary shapefiles: This replication package utilizes Census boundary shapefiles spanning several decades from 1960 through 2020. Specifically, the historical boundaries for 1960 and 1980, as well as the contemporary boundaries for 2020, are sourced from the Integrated Public Use Microdata Series National Historical Geographic Information System (IPUMS NHGIS; Manson, 2023), available for download at https://www.nhgis.org. The boundaries for 2000 and 2010 are sourced directly from the official US Census Bureau TIGER/Line shapefiles (Census, 2010a; Census, 2010b), which can be accessed via the Census Bureau's portal at https://www.census.gov/geographies/mapping-files/time-series/geo/tiger-line-file.html. The 1990 census boundaries are obtained via the Minnesota Geospatial Commons from the Metropolitan Council (2014), which can be downloaded at https://gisdata.mn.gov/dataset/us-mn-state-metc-society-census1990tlg. Additional note on data availability: The Minnesota Geospatial Commons is migrating to a modernized platform (gis.data.mn.gov). While some publishers are still transitioning resources, the legacy links provided in this package remain accurate for replication but may undergo domain updates.
  12. Census Demographic and Socioeconomic Data: Historical datasets for the 1940 Enumeration Districts (Manson, 2023), as well as Census Tract data for 1960, 1980, and 1990 (Manson, 2023), are sourced from IPUMS NHGIS at https://www.nhgis.org. In addition, 1940, 1960, and 1980 through 2020 Hennepin County population data also comes from IPUMS NHGIS. Other tract-level data are pulled from official U.S. Census Bureau resources: the 2000 data are retrieved via https://data.census.gov (Census, 2000), and the 2010 metrics are sourced from the American Community Survey (ACS; Census, 2010c). Tract-level socioeconomics for 2020 (Census, 2020c) are similarly compiled from the ACS (Census, 2020b), though their operational inclusion in the final models may vary depending on specification cross-checks. Block Group metrics for 1990 and 2010 are pulled from IPUMS NHGIS (Manson, 2023), while the 2000 and 2020 Block Group parameters are extracted directly from the U.S. Census Bureau portals at https://data.census.gov (Census, 2000; Census, 2020b; Census, 2020c). The 1980 and 1990 baseline block-level files are sourced from NHGIS (Manson, 2023), whereas the 2000, 2010, and 2020 blocks are compiled via the main Census data platform (Census, 2000; Census, 2010d; Census, 2020c). This includes specific 2020 block-level demographic attributes such as age profile cohorts derived from parallel ACS summary tables (Census, 2020b).
  13. American Housing Survey Data: The American Housing Survey for 1974, 1977, 1981, 1985, 1989, 1993, 1998, 2007, 2013, and 2017 (U.S. Census Bureau & U.S. Department of Housing and Urban Development, 1974–2017) can be downloaded from https://www.census.gov/programs-surveys/ahs/data.html. This data file is included within this replication package.

Table of Data Files

Data Name Data Files Location Provided Citation
2019 Parcel Data hennepin_county_parcels.shp {raw}Parcel Data/ Yes GIS Office, Hennepin County, Minnesota
Covenants Data Hennepin_All_Joined_Final_Del_Identical_8_21_2020.shp; more_covenants.csv {raw}Covenant Data/ Yes; No Mapping Prejudice direct download; Mapping Prejudice email request
Assessed and Sales Value and Building Characteristics from Zillow run_order.txt; Value.txt; Building.txt; BKManagedSpecific.txt; BuildingAreas.txt; TypeConstruction.txt; Layout.xlsx; building_characteristic_cols.csv {raw}Zillow Value/; {raw}Zillow Characteristics/ No Zillow
MLCCS Data Minnesota_Land_Cover_Classification_System_(MLCCS).shp {raw}MLCCS/ Yes MLCCS, Minnesota DNR
Lakes and Rivers Shapefile LakesAndRivers.shp {raw}Lakes and Rivers/ Yes Minnesota Metropolitan Council
TIGER Roads Shapefile tl_2021_27_prisecroads.shp {raw}Roads/ Yes U.S. Census Bureau
BLM Minor Disturbances Data DamagedProperties.shp {raw}BLM/ Yes City of Minneapolis Open Data Portal
1960–2020 Census Boundary Shapefiles Shapefiles in year subfolders {raw}Census Shape Files/ Yes U.S. Census Bureau and NHGIS and Minnesota Geospatial Commons
1940–2020 Census Block Data Files in year subfolders {raw}Census non-spatial data/Census Block/ Yes NHGIS and U.S. Census Bureau
1940–2020 Census Tract Data Files in year subfolders {raw}Census non-spatial data/Census Tract/ Yes NHGIS and U.S. Census Bureau
1990–2020 Census Block Group Data Files in year subfolders {raw}Census non-spatial data/Census Block Group/ Yes NHGIS and U.S. Census Bureau
1940 Enumeration District Data ED_1940_Suburbs_v9.shp {raw}1940 ED Data/ Yes Almagro, Ehrman-Solberg, and Sood (2026)
1940 Enumeration District Census Data Files in subfolders {raw}Census non-spatial data/1940 Enumeration District/ Yes NHGIS
NHGIS 1960 Tract Data nhgis0007_ds92_1960_tract.csv {raw}Census non-spatial data/Census Tract/1960/ Yes NHGIS
Tract Immigrant and Foreign Origin 1940 and 1960 Data Files in year subfolders {raw}Census non-spatial data/Census Tract/ Yes NHGIS
1980–2020 Education Data Files in year subfolders {raw}Census non-spatial data/ Yes NHGIS
1980–2020 Income Data Files in year subfolders {raw}Census non-spatial data/ Yes NHGIS
CPI Data CPIAUCSL.csv {raw}CPI/ Yes U.S. Bureau of Labor Statistics
Minneapolis City Boundary City_Boundary.shp {raw}City Boundary/ Yes City of Minneapolis Open Data Portal
1961 Election Ward and Precinct Shapefile 1961 precinct.shp {raw}Election 1961 Shape Files/ Yes Sood (2026a)
1964 and 1968 Election Outcomes Hennepin Data.xlsx {raw}Election 1964 1968 Outcome/ Yes Sood (2026b)
Index Building Permit Cards df2_batch*.csv; df3_batch*.csv {raw}Permit Cards/ Yes Sood (2026c)
OSM Travel Time Data minnesota-latest.osm.pbf; housing_tt_s1100.csv {raw}OpenStreetMap/ Yes Sood (2026d)
Hennepin Altitude Data hennepin_lots_altitude_slope.shp {raw}Hennepin Altitude/ Yes Hennepin County GIS
Historical Wetlands Data HENNEPIN_wetlands.shp {raw}Wetland/ No Almagro and Sood (2026)
Soil Quality Data HC_NRCS_Soils.shp {raw}Soil Quality/ Yes Soil Survey Staff, Natural Resources Conservation Service, USDA
Sale and Resale Data Completed_mortgage_file.csv {raw}Mortgage/ Yes Sood (2026d)
American Housing Survey Data Files in year subfolders (1974, 1981, 2013) {raw}AHS_Minneapolis_StPaul/ Yes U.S. Census Bureau & HUD
Zoning Data county_all_parcels_with_demo.shp {raw}Zoning Data/ No Webster & Corey, 2021

Protacted and Manually Cleaned Data Files: Step 3b of the data pipeline includes a manual annotation process to classify lakes not originally seen in both MLCCS and Lakes and Rivers shapefiles. The results of the google search process to determine lakes is written directly into the code file as part of the repication package.

Step 9 of the data pipeline uses permit card OCR data (df2_batch*.csv and df3_batch*.csv) generated from the Minneapolis Historic Building Permits Index Cards housed at the Hennepin County Library Digital Collections. The raw archival image files are omitted from this replication package; future researchers wishing to rebuild the image cache must download the cards manually or via an automated scraping script, then process them using OCR (e.g., Amazon Textract or equivalent). The processed tabular output is included in this replication package. In addition, some OCR output was not complete and needed to be manually read and updated and is written directly into the code file as part of the repication package.

Step 10 of the data pipeline uses housing_tt_s1100.csv which is the outcome of mapping the travel time from each parcel to the nearest highway exit using Open Street Map data. This process took over 3 weeks of continuous execution due to API limits on the public OSRM server. The resulting file is included in the replication package for direct download, but future replicators can bypass the over 3-week external API restriction by utilizing third-party paid commercial services, if they so choose.


Reproducibility Statement

The replication package does not rely on a single executable script. Because the workflow alternates between Stata and Jupyter notebooks, replication is orchestrated through the file Programs\run_order.txt, which specifies the exact order in which all scripts should be executed.

Some data cannot be made publicly available. Note that restricted datasets are required only for constructing intermediate variables and do not prevent reproduction because derived variables are provided.


Data Pipeline

Raw data
    ↓
Programs/Data Code (Steps 01–15f)
    ↓
analysis_withcensus.dta
pretrend_variables.dta
    ↓
Programs/Model Code
    ↓
Programs/Figures and Tables Code
    ↓
Results/
├── tables/
└── figures/

Description of Data Code

These 45 code files construct the analysis dataset from raw data across 15 numbered steps. Full execution order and descriptions are in run_order.txt.

Programs

Step File Description
1 01_Data-Prep.ipynb Joins residential parcels with racial covenant data
2 02_Data-Prep.ipynb Merges Zillow building characteristics with parcel-covenant data
3a 03a_Data-Prep.ipynb Identifies lakes from MLCCS and Met Council shapefiles for manual review
3b 03b_Data-Prep.do Confirms ambiguous water bodies as lakes or ponds
3c 03c_Data-Prep.ipynb Calculates distance from each parcel to nearest lake and highway
3d 03d_Data-Prep.ipynb Calculates distance to nearest river; updates overall nearest-water variable
3e 03e-Data_Prep.ipynb Merges BLM civil disturbance data with parcels via spatial join
4 04_Data-Prep.py (runner) Executes all Step 4 notebooks in order (run before 04_Data-Prep.do)
4 04_Data-Prep.do (runner) Executes all Step 4 Stata files (run after 04_Data-Prep.py)
4 04_Data-Prep.ipynb Spatially links parcels to census geographies (blocks, tracts, EDs) for 1940–2020
4 04-1940_Data-Prep.ipynb Merges 1940 census demographic data by enumeration district
4 04-1960_Data-Prep.ipynb Merges 1960 census demographic data by tract
4 04-1980_Data-Prep.ipynb Merges 1980 census demographic data by block and tract
4 04-1990_Data-Prep.ipynb Merges 1990 census demographic data by block and block group
4 04-2000_Data-Prep.ipynb Merges 2000 census demographic data by block and block group
4 04-2010_Data-Prep.ipynb Merges 2010 census demographic data by block and block group
4 04-2020_Data-Prep.ipynb Merges 2020 census demographic data by block and block group
4 04-Income_Data-Prep.ipynb Merges census tract-level income data (2000–2020)
4 04-Value_Rent_Data-Prep.ipynb Merges median home value and rent by block group and tract (1980–2020)
4 04-1960-NHGIS_Data-Prep.do Prepares 1960 NHGIS tract-level data for merge
4 04-Immigrant_Data-Prep.do Merges immigrant and foreign-origin share data by census tract for 1940 and 1960
5–8 05-08_Data-Prep.py (runner) Executes Steps 5–8 notebooks in order
5 05_Data_Prep.ipynb Merges and CPI-deflates 2019 and 2020 Zillow assessor values
6 06_Data-Prep.ipynb Matches parcels with Minneapolis zoning data
7 07_Data-Prep.ipynb Calculates distance from each parcel to the Minneapolis city boundary
8 08_Data-Prep.ipynb Spatially joins parcels with 1961 election ward and precinct boundaries
9a 09a_Data-Prep.ipynb Loads and prepares parcel address data for building permit matching
9b 09b_Data-Prep.do Cleans parcel street addresses
9c 09c_Data-Prep.do Imports and appends raw permit card OCR batches
9d 09d_Data-Prep.do Appends and cleans all permit card records
9e 09e_Data-Prep.ipynb First round of address matching between permits and parcels
9f 09f_Data-Prep.do Processes first-round matched and unmatched permit records
9g 09g_Data-Prep.do Prepares unmatched permits for second-round matching
9h 09h_Data-Prep.ipynb Second round of address matching for remaining unmatched permits
9i 09i_Data-Prep.do Finalizes permit-parcel matches after both matching rounds
10–14b 10-14b_Data-Prep.do (runner) Executes Steps 10–14b Stata files in order
10 10_Data-Prep.do Converts OSM travel time CSV to Stata format and merges with dataset
11 11_Data-Prep.do Merges 1964 and 1968 Hennepin County general election results
12 12_Data-Prep.do Cleans and harmonizes education attainment data (1980–2020) by census geography
13 13_Data-Prep.do Cleans 1980 and 1990 census income data by tract
14a 14a_Data-Prep.do Combines all intermediate datasets into a single pre-analysis file
14b 14b_Data-Prep.do Merges census, zoning, permit, and election data into the main dataset
15a1 15a1_Data-Prep.ipynb Loads parcel-level altitude data from RAW
15a2 15a2_Data-Prep.do Saves altitude data at PID and block levels
15b 15b_Data-Prep.ipynb Merges wetland data at PID and block levels
15c 15c_Data-Prep.ipynb Spatially joins wetland boundaries with parcel centroids
15d 15d_Data-Prep.ipynb Calculates soil quality at block and PID levels
15e 15e_Data-Prep.do Merges soil quality data at parcel level
15f 15f_Data-Prep.do Merges all geographic controls; outputs final analysis_withcensus.dta

Analysis datasets

The final analysis datasets analysis_withcensus.dta and pretrend_variables.dta are fully reproducible from raw data in approximately 90 minutes. Both are included in this replication package.

File Location Description
analysis_withcensus.dta Data/MID/ Final analysis dataset used by all model code
pretrend_variables.dta Data/MID/ Pre-trend geographic and demographic variables

Description of Model Code

These code files generate the 5 main tables, 5 figures, and all online appendix tables and figures in the paper. Three scripts, Block_Level_Data_Creation.do, Robustness_Sorting_Prices.do, and IVReg_Data_Creation.do, create intermediate datasets and must be run before the others.

Programs

File Tables
Block_Level_Data_Creation.do (intermediate dataset generator, first run through Table 3 via Table3.texdoc)
Robustness_Sorting_Prices.do (intermediate dataset generator, first run through Table 3 via Table3.texdoc)
IVReg_Data_Creation.do (intermediate dataset generator, first run through Table C.11 via TableC11.texdoc)
Balance_Tests.do Table 1
House_Char_Baseline_Falsification.do Table 2, Table C.1, Table C.4
Elections_Civil_Rights.do Table 2
Neighborhood_Amenities.do Table 2, Table C.10
Baseline_Sorting.do Table 3, Table 5, Table C.2, Table C.5, Table C.6, Table C.8
BLM_2020.do Table 4
Baseline_Price_House_Level.do Table 4, Table 5, Table C.3
Sale_Resale_Yeargap.do Table A.1
Summary_Stats_Construction.do Table A.2, Table A.3
Population_by_Race.do Table A.4
Price_Covenant_Language.do Table C.3
ebal_Sorting_Falsification.do Table C.7
Sorting_Placebo_Timelines.do Table C.9
Prices_Placebo_Timelines.do Table C.9
Sorting_IVReg.do Table C.11
Price_IVReg.do Table C.11

Additional datasets arrived from analysis datasets

Model Code also produces several intermediate datasets used for specific analyses and robustness checks. The main analysis dataset analysis_withcensus.dta is the starting point for all model code, and the year-conditional datasets are used for specific robustness checks and alternative specifications.

File Location Description
analysis_withcensus_cond_XXXX.dta (XXXX=1980–2020) Data/MID/For Model Code/ Analysis dataset conditioned on census year XXXX
analysis_withcensus_cond_XXXX_missing4748.dta (XXXX=1980–2020) Data/MID/For Model Code/ Year-conditional dataset excluding years 1947–48; generated by Robustness_Sorting_Prices.do
analysis_withcensus_cond_alt_XXXX.dta (XXXX=1980–2020) Data/MID/For Model Code/ Alternative specification year-conditional dataset
analysis_withcensus_cov3_XXXX.dta (XXXX=1980–2020) Data/MID/For Model Code/ Year-conditional dataset using covenant-3 treatment definition
population_race_XXXX.dta (XXXX=1940–2020) Data/MID/For Model Code/ Population by race for each census year

Description of Figure and Table Code

Tables

File Table(s)
Tables/Table1.texdoc Table 1
Tables/Table2.texdoc Table 2
Tables/Table3.texdoc Table 3
Tables/Table4.texdoc Table 4
Tables/Table5.texdoc Table 5
Tables/TableA1.texdoc Table A.1
Tables/TableA2_A3.texdoc Table A.2, Table A.3
Tables/TableA4.texdoc Table A.4
Tables/TableC1_C4.texdoc Table C.1, Table C.4
Tables/TableC2.texdoc Table C.2
Tables/TableC3.texdoc Table C.3
Tables/TableC5.texdoc Table C.5
Tables/TableC6.texdoc Table C.6
Tables/TableC7.texdoc Table C.7
Tables/TableC8.texdoc Table C.8
Tables/TableC9.texdoc Table C.9
Tables/TableC10.texdoc Table C.10
Tables/TableC11.texdoc Table C.11

Figures

File Figure(s)
Figures/Fig 2 (Expansion of New Construction and Racial Covenants)/Data selection for maps.do Figure 2
Figures/Fig 2 (Expansion of New Construction and Racial Covenants)/new_construction_racial_cov_map.ipynb Figure 2
Figures/Fig 3, C.1 (Covenants in Transition Neighbourhoods)/Cov_Boundary_Distance.do Figure 3
Figures/Fig 3, C.1 (Covenants in Transition Neighbourhoods)/Transition_Zones_1940ED.do Figure 3, Figure C.1
Figures/Fig 4, C.1 (Time to Build and Baseline Sample)/ex_build_yeargap.do Figure 4
Figures/Fig 4, C.1 (Time to Build and Baseline Sample)/graph_covenants_overtime_edited.do Figure 4
Figures/Fig 4, C.1 (Time to Build and Baseline Sample)/Distribution of Covenant Enforceability.do Figure 4, Figure C.1
Figures/Fig 5 (Percentage of Minority Residents)/2026_1960_Tract_analysis.do Figure 5
Figures/Fig 6 (Externality Effects of Racial Covenants)/Externality_Price_Analysis.do Figure 6
Figures/Fig A.2 (Covenants Executed per Year)/Exyear_prob.do Figure A.2
Figures/Fig B.1 (Mean Number of Races Listed in Covenants Per Year)/counting_races.ipynb Figure B.1
Figures/Fig B.1 (Mean Number of Races Listed in Covenants Per Year)/plotting_raceslisted_peryear.do Figure B.1
Figures/Fig B.2 (Planned vs. Constructed Highways)/highway_map.ipynb Figure B.2
Figures/Fig C.2 (Segregation Externality Effects)/Sorting Treatment Dummy Graph.do Figure C.2
Figures/Fig C.3 (Property Tear Down Rate)/2025_AHS_timeseries.do Figure C.3

Computational Requirements

Software Requirements

Memory, Runtime, Storage Requirements

Summary Time to Reproduce

Approximate time needed to reproduce the analyses on a standard (2025) desktop machine:

Summary of Required Storage Space

Approximate storage space needed:

Computational Details

The code was last run on a 2023 MacBook Pro with 36GB of memory.


Instructions for Replication

Step 1. Set Up the Repository

All project paths are defined relative to the repository root. Before running any code, set Stata's working directory to the cloned repository.

Mac/Linux cd "/path/to/The-Long-Shadow-of-Housing-Discrimination-Evidence-from-Racial-Covenants"

Windows cd "C:\path\to\The-Long-Shadow-of-Housing-Discrimination-Evidence-from-Racial-Covenants"

Then run:

do 00_housekeeping.do

The housekeeping script automatically defines all project directories relative to the repository root:

global root "`c(pwd)'/"

As a result, users do not need to edit any file paths after cloning the repository.

Step 2. Obtain the Data

Download all raw data sources listed in the Data Details and Availability section and place them in the appropriate subdirectories under Data/ as specified in 00_housekeeping.do.

To replicate the full analysis pipeline, authorized researchers must separately obtain the following restricted datasets and place them manually into their corresponding directories:

Zoning Data Data/RAW/Zoning Data/county_all_parcels_with_demo.*

Zillow Data Data/RAW/Zillow Value/ Data/RAW/Zillow Characteristics/

Wetland Data Data/RAW/Wetland/HENNEPIN_wetlands.*

Covenant Data (Restricted Supplement) Data/RAW/Covenant Data/more_covenants.csv

Step 3. Unzip Large Files

Several files exceed GitHub's size limits and are stored as compressed archives. Unzip the following files before running any code.

Hennepin Altitude Data Data/RAW/Hennepin Altitude/hennepin_lots_altitude_slope.dbf.zip → Data/RAW/Hennepin Altitude/hennepin_lots_altitude_slope.dbf

Required by Step 15a1 of the data pipeline.

1940 Enumeration District Data Data/RAW/Census non-spatial data/1940 Enumeration District/usa_00001.csv.zip → Data/RAW/Census non-spatial data/1940 Enumeration District/usa_00001.csv

Required by the 1940 census data processing scripts.

Figure 2 Intermediate File Data/MID/For Figures/fig2/combined_with_mark.dbf.zip → Data/MID/For Figures/fig2/combined_with_mark.dbf

Required to reproduce Figure 2.

1960 Census Intermediate File Data/MID/Step 4/census_data_pid_1960.csv.zip → Data/MID/Step 4/census_data_pid_1960.csv

Required by Step 4 of the data pipeline.

Step 4. Install Software

Ensure that Stata and Python are installed and available on your system PATH. Install all Python packages listed in the software requirements section before executing the code.

The runner scripts (04_Data-Prep.py, 05-08_Data-Prep.py) execute notebooks programmatically via nbconvert. After installing the Python packages, register your Python installation as a Jupyter kernel so the runners can find it:

pip install nbconvert nbformat ipykernel
python3 -m ipykernel install --user --name python3 --display-name "Python 3"

Step 5. Run the Full Pipeline

Use run_order.txt to execute the data pipeline in the prescribed order (Steps 1–15f). Running these scripts produces the final analysis dataset:

analysis_withcensus.dta

After the analysis dataset has been generated, run the figure and table scripts to reproduce all results reported in the paper.

The run_order.txt file provides detailed instructions regarding the execution order and dependencies of all scripts.

Details on Various Programs


List of Table and Figure Programs

The provided code reproduces all numbers provided in text in the paper as well as all tables and figures in the paper.

Tables are generated by running the .texdoc helper files, which in turn call the relevant model code scripts. The .texdoc files are located in Programs/Figures and Tables Code/Tables/. Output .tex files are written to {results}tables/. Figure scripts are located in Programs/Figures and Tables Code/Figures/ and output is written to {results}figures/.

Tables

Table Model Code Script(s) .texdoc file Output
Table 1 Programs/Model Code/Balance_Tests.do Table1.texdoc {results}tables/
Table 2 Programs/Model Code/House_Char_Baseline_Falsification.do; Elections_Civil_Rights.do; Neighborhood_Amenities.do Table2.texdoc {results}tables/
Table 3 Programs/Model Code/Baseline_Sorting.do Table3.texdoc {results}tables/
Table 4 Programs/Model Code/BLM_2020.do; Baseline_Price_House_Level.do Table4.texdoc {results}tables/
Table 5 Programs/Model Code/Baseline_Sorting.do; Baseline_Price_House_Level.do Table5.texdoc {results}tables/
Table A.1 Programs/Model Code/Sale_Resale_Yeargap.do TableA1.texdoc {results}tables/
Table A.2 Programs/Model Code/Summary_Stats_Construction.do TableA2_A3.texdoc {results}tables/
Table A.3 Programs/Model Code/Summary_Stats_Construction.do TableA2_A3.texdoc {results}tables/
Table A.4 Programs/Model Code/Population_by_Race.do TableA4.texdoc {results}tables/
Table C.1 Programs/Model Code/House_Char_Baseline_Falsification.do TableC1_C4.texdoc {results}tables/
Table C.2 Programs/Model Code/Baseline_Sorting.do TableC2.texdoc {results}tables/
Table C.3 Programs/Model Code/Baseline_Price_House_Level.do; Price_Covenant_Language.do TableC3.texdoc {results}tables/
Table C.4 Programs/Model Code/House_Char_Baseline_Falsification.do TableC1_C4.texdoc {results}tables/
Table C.5 Programs/Model Code/Baseline_Sorting.do TableC5.texdoc {results}tables/
Table C.6 Programs/Model Code/Baseline_Sorting.do TableC6.texdoc {results}tables/
Table C.7 Programs/Model Code/ebal_Sorting_Falsification.do TableC7.texdoc {results}tables/
Table C.8 Programs/Model Code/Baseline_Sorting.do TableC8.texdoc {results}tables/
Table C.9 Programs/Model Code/Sorting_Placebo_Timelines.do; Prices_Placebo_Timelines.do TableC9.texdoc {results}tables/
Table C.10 Programs/Model Code/Neighborhood_Amenities.do TableC10.texdoc {results}tables/
Table C.11 Programs/Model Code/Sorting_IVReg.do; Price_IVReg.do TableC11.texdoc {results}tables/

Figures

Figure Script(s) Output
Figure 1
Figure 2 Programs/Figures and Tables Code/Figures/Fig 2 (Expansion of New Construction and Racial Covenants)/Data selection for maps.do; new_construction_racial_cov_map.ipynb {results}figures/
Figure 3 Programs/Figures and Tables Code/Figures/Fig 3, C.1 (Covenants in Transition Neighbourhoods)/Cov_Boundary_Distance.do; Transition_Zones_1940ED.do {results}figures/
Figure 4 Programs/Figures and Tables Code/Figures/Fig 4, C.1 (Time to Build and Baseline Sample)/ex_build_yeargap.do; graph_covenants_overtime_edited.do; Distribution of Covenant Enforceability.do {results}figures/
Figure 5 Programs/Figures and Tables Code/Figures/Fig 5 (Percentage of Minority Residents)/2024_1960_Tract_analysis.do {results}figures/
Figure 6 Programs/Figures and Tables Code/Figures/Fig 6 (Externality Effects of Racial Covenants)/Externality_Price_Analysis.do {results}figures/
Figure A.2 Programs/Figures and Tables Code/Figures/Fig A.2 (Covenants Executed per Year)/Exyear_prob.do {results}figures/
Figure B.1 Programs/Figures and Tables Code/Figures/Fig B.1 (Mean Number of Races Listed in Covenants Per Year)/counting_races.ipynb; plotting_raceslisted_peryear.do {results}figures/
Figure B.2 Programs/Figures and Tables Code/Figures/Fig B.2 (Planned vs. Constructed Highways)/highway_map.ipynb {results}figures/
Figure C.1 Programs/Figures and Tables Code/Figures/Fig 3, C.1 (Covenants in Transition Neighbourhoods)/Transition_Zones_1940ED.do; Fig 4, C.1 (Time to Build and Baseline Sample)/Distribution of Covenant Enforceability.do {results}figures/
Figure C.2 Programs/Figures and Tables Code/Figures/Fig C.2 (Segregation Externality Effects)/Sorting Treatment Dummy Graph.do {results}figures/
Figure C.3 Programs/Figures and Tables Code/Figures/Fig C.3 (Property Tear Down Rate)/2025_AHS_timeseries.do {results}figures/

Citation

If using this replication package, please cite:

Sood, Aradhya, and Kevin Ehrman-Solberg. "The Long Shadow of Housing Discrimination: Evidence from Racial Covenants." Review of Economic Studies, forthcoming.


References

  1. Ehrman-Solberg, Kevin, Penny Petersen, Marguerite Mills, Kirsten Delegard, and Ryan Mattke. 2020. Racial Covenants in Hennepin County. Data Repository for the University of Minnesota (DRUM). https://doi.org/10.13020/a88t-yb14.

  2. U.S. Bureau of Labor Statistics. 2022. Consumer Price Index for All Urban Consumers: All Items in U.S. City Average [CPIAUCSL]. FRED, Federal Reserve Bank of St. Louis. Accessed June 25, 2022. https://fred.stlouisfed.org/series/CPIAUCSL.

  3. City of Minneapolis. 2020. Damaged Properties. Minneapolis Open Data Portal. Accessed May 11, 2025. https://opendata.minneapolismn.gov/datasets/cityoflakes::damaged-properties-public/about.

  4. Manson, Steven, Jonathan Schroeder, David Van Riper, Kathryn Knowles, Sarah Kugler, Finn Roberts, and Steven Ruggles. 2023. IPUMS National Historical Geographic Information System: Version 18.0 [Data set]. IPUMS. https://doi.org/10.18128/D050.V18.0.

  5. U.S. Census Bureau. 2021. TIGER/Line Shapefiles: Roads. U.S. Department of Commerce. https://www.census.gov/geographies/mapping-files/time-series/geo/tiger-line-file.html.

  6. U.S. Census Bureau. 2010a. TIGER/Line Shapefiles: 2000 Census Blocks. U.S. Department of Commerce. https://www.census.gov/geographies/mapping-files/time-series/geo/tiger-line-file.html.

  7. U.S. Census Bureau. 2010b. TIGER/Line Shapefiles: 2010 Census Blocks. U.S. Department of Commerce. https://www.census.gov/geographies/mapping-files/time-series/geo/tiger-line-file.html.

  8. U.S. Census Bureau. 2020a. TIGER/Line Shapefiles: 2020 Census Blocks. U.S. Department of Commerce. https://www.census.gov/geographies/mapping-files/time-series/geo/tiger-line-file.html.

  9. U.S. Census Bureau. 2020b. American Community Survey 5-Year Estimates. U.S. Department of Commerce, data.census.gov. Accessed December 30, 2022. https://data.census.gov/.

  10. U.S. Census Bureau. 2010c. American Community Survey 5-Year Estimates. U.S. Department of Commerce, data.census.gov. Accessed December 30, 2022. https://data.census.gov/.

  11. U.S. Census Bureau. 2000. Decennial Census. U.S. Department of Commerce, data.census.gov. Accessed July 29, 2022. https://data.census.gov/.

  12. U.S. Census Bureau. 2010d. Decennial Census. U.S. Department of Commerce, data.census.gov. Accessed July 29, 2022. https://data.census.gov/.

  13. U.S. Census Bureau. 2020c. Decennial Census. U.S. Department of Commerce, data.census.gov. Accessed November 23, 2022. https://data.census.gov/.

  14. Metropolitan Council. 2014. Census TIGER/Line Files, 1990 - Twin Cities Metropolitan Area [Data set]. Minnesota Geospatial Commons. Accessed November 18, 2020. https://gisdata.mn.gov/dataset/us-mn-state-metc-society-census1990tlg.

  15. Soil Survey Staff. 2022. Web Soil Survey. Natural Resources Conservation Service, U.S. Department of Agriculture. Accessed November 21, 2022. https://websoilsurvey.sc.egov.usda.gov/.

  16. OpenStreetMap contributors, and Geofabrik GmbH. 2025. OpenStreetMap Data Extracts for Minnesota, USA. Geofabrik Download Server. Accessed March 11, 2025. https://download.geofabrik.de/north-america/us/minnesota.html.

  17. City of Minneapolis. 2021. City Boundary. Minneapolis Open Data Portal. Accessed December 22, 2026. https://opendata.minneapolismn.gov/datasets/city-boundary/about/.

  18. Hennepin County GIS Office. 2019. Hennepin County Parcels 2019 [Data set]. Hennepin County GIS Hub. Accessed July 11, 2029. https://gis-hennepin.hub.arcgis.com/datasets/7975aabf6e1e42998a40a4b085ffefdf_1/explore.

  19. Zillow Group, Inc. 2019. Zillow Transaction and Assessment Database (ZTRAX): 2019 Version. https://www.zillow.com/ztrax.

  20. Almagro, Milena, and Aradhya Sood. 2026. “Choices or Constraints? Disentangling Preferences from Restrictions in Housing Markets.” Working Paper.

  21. Webster, MaryJo, and Michael Corey. 2021. “How Twin Cities Housing Rules Keep the Metro Segregated.” Star Tribune, July 2021.

  22. Sood, Aradhya. 2026c. Minneapolis Historic Building Permits Data. Retrieved from GitHub. https://github.com/aradhyasood1/Minneapolis-Historic-Building-Permits-Data.

  23. Sood, Aradhya. 2026a. 1961 Minneapolis Electoral Ward and Precinct Map. Retrieved from GitHub. https://github.com/aradhyasood1/1961-Minneapolis-Electoral-Ward-and-Precinct-Map.

  24. Sood, Aradhya. 2026b. Hennepin County 1964 and 1968 General Election Results Data. Retrieved from GitHub. https://github.com/aradhyasood1/Hennepin-County-1964-and-1968-General-Election-Results-Data.

  25. Almagro, Milena, Kevin Ehrman-Solberg, and Aradhya Sood. 2026. Hennepin County 1940 Enumeration District Boundaries. Retrieved from GitHub. https://github.com/aradhyasood1/Hennepin-County-1940-Enumeration-District-Boundaries.

  26. Metropolitan Council. 2019. Lakes and Rivers - Open Water Features [Data set]. Minnesota Geospatial Commons. https://gisdata.mn.gov/dataset/us-mn-state-metc-water-lakes-rivers.

  27. Minnesota Department of Natural Resources. 2014. Minnesota Land Cover Classification System (MLCCS) [Data set]. Minnesota Geospatial Commons. https://gisdata.mn.gov/dataset/biota-landcover-mlccs.

  28. Hennepin County GIS. 2018. Elevation Contours [Data set]. Hennepin County GIS Open Data Portal. https://gis-hennepin.hub.arcgis.com/maps/87b53a073e33481db564305f9cab035b/about.

  29. U.S. Census Bureau, and U.S. Department of Housing and Urban Development. 1974–2017. American Housing Survey (AHS) Public Use Files (1974, 1977, 1981, 1985, 1989, 1993, 1998, 2007, 2013, 2017) [Data sets]. U.S. Census Bureau Portal. https://www.census.gov/programs-surveys/ahs/data.html.

  30. Sood, Aradhya. 2026d. Replication of “The Long Shadow of Housing Discrimination: Evidence from Racial Covenants.” Retrieved from GitHub. https://github.com/aradhyasood1/The-Long-Shadow-of-Housing-Discrimination-Evidence-from-Racial-Covenants.


Acknowledgements

Template structure adapted from the Social Science Data Editors template README, contributed to by Lars Vilhuber, Miklós Koren, Joan Llull, Marie Connolly, Florian Oswald, and Peter Morrow.