Published:
12/16/2025

How We Used Geospatial Analysis to Understand St. Paul’s Rental Market

We took a look at St. Paul's rent control ordinance using multi-source data and geospatial analysis to map its actual reach across the rental market.

St. Paul, Minnesota is a city of 307,000 people, nearly half of whom are renters. Given this large renter population, rent control and tenant protection policies remain critical issues in the city. In late 2021, St. Paul passed a rent stabilization ordinance capping annual rent increases at 3%, though it has since been substantially rolled back to allow many exemptions, most notably for affordable housing developments and new construction. 

These policy considerations often center on shared goals, like housing affordability for renters, but measuring real-world impacts requires data that can be hard to come by. What often exists is a patchwork of incomplete and disjointed information that makes well-informed analysis difficult, a challenge not unique to St. Paul but common across cities grappling with similar policies affecting millions of renters nationwide.

At the Open Rent Initiative, our goal is to assemble and harmonize the data needed to inform better research, policy, and decision-making around rental housing. To this end, we examined St. Paul as our first use case, using data from public sources and our partners at HousingLink to identify which properties are exempt from the city’s rent control policy and understand the ordinance's actual reach.

Piecing the Data Together

In theory, this analysis should have been straightforward; to calculate the percentage of rental units subject to rent control, we just had to identify how many were either affordable housing or constructions built after 2004.

In reality, however, no single dataset contained all the requisite information we needed to do this identification. For example, one source provided the year a property was built but not whether it qualified as affordable housing; another identified whether a unit was a rental but not when it was built. This meant that we had to piece together multiple sources to build a comprehensive view of St. Paul's rental housing stock, which included the following:

  1. Ramsey County Parcel Data, which served as the underlying layer for property-level information 
  2. St. Paul Residential Fire Certificate of Occupancy Data, used to identify rental units and relevant data
  3. HousingLink’s Streams, a database of publicly-funded affordable rental properties in Minnesota

How We Addressed the Challenges

Merging these datasets together came with its own set of challenges. We first attempted to match the records across all three sources by their addresses. However, even after standardizing the address formats, we could not rely on textual matching alone due to frequent mismatches caused by inconsistent naming conventions, missing address components (such as directional indicators or unit numbers), and generic tagging that obscured which parcel a given record referenced.

So we pivoted to a more robust approach: geospatial matching. Using spatial operations in R, we created a small buffer zone around each address and matched it to any nearby parcels. We then evaluated the possible matches by comparing the address text using “fuzzy matching,” a method for detecting similarity despite spelling variations or incomplete information. Together, these linked location and text comparisons allowed us to more confidently reconcile records from separate datasets and assemble a more complete picture of each parcel’s characteristics.

Still, addresses were only one part of the problem. Data coding inconsistencies started to surface early on as well, which we could not fully resolve programmatically. For example, if two sources listed different unit counts for the same parcel, who could we trust to be more reliable—the state office or city office? Another major concern was determining the veracity of the “year built” field, since construction year dictates whether a property qualifies for the rent control exemption. 

We learned via an inquiry to the St Paul's Planning and Economic Development team that the singular “year built” value in the parcel data does not account for several important scenarios: when nonresidential structures within a parcel were converted into rental units, when existing residential buildings added new units over time, and when parcels contain multiple buildings constructed in different years but are represented by just one date. Since these changes are not consistently reflected in the data, we did our best to account for them by looking at the parcels’ use classes and dwell types to more accurately infer the number of rental units they contain.

What We Found (and What We're Still Uncertain About)

By our estimates, St. Paul has roughly 135,600 residential units, with 63,000 of them being rentals. This share is largely consistent with figures reported in the 2023 American Community Survey. After identifying newly built and affordable housing units, we found that approximately 24,000 rentals qualify for exemption under the amended rent control ordinance—just over a third of all rentals in the city, which is again consistent with city reports

But even with these sanity checks, uncertainties remain when we compare our estimates with other data sources. We identified about 5,000 rental units built after 2004 across affordable and private-market housing, yet HUD building-permit data indicate roughly 13,000 units built since 2004 in multifamily structures with three or more units, which are likely rentals. Such large discrepancies in the data can complicate efforts to make informed policy decisions that affect the lives of hundreds of thousands of residents.

Why This Matters

These gaps reveal just how difficult it is to stitch together siloed datasets that lack shared standards, definitions, and data structures. At the same time, working through these challenges gave us an important foundation for developing a methodology to estimate the likelihood that a property or unit is a rental using parcel data alone, something parcel datasets often do not explicitly identify. While still evolving, this approach offers a promising starting point for building clearer views of rental housing in other cities that face similar data constraints.

Ultimately, the challenges we encountered underscore why our mission at the Open Rent Initiative is so critical. Our goal is to make rent data transparent, accessible, and comprehensive, so that policymakers, researchers, and residents everywhere can easily answer basic questions about what rental housing exists, who it serves, and how policies affect affordability. By harmonizing disparate rental data sources into a single open-source platform, we hope to make this work simpler not just for St. Paul, but for every community facing similar gaps in information.

If you're working on similar questions or wrestling with related data challenges, we'd love to hear from you! Drop us a line at rent@citizencodex.com—we're happy to swap notes and share our data and code.

Author
Florina Sutanto
Data Analyst
Florina Sutanto

Contact the Newsroom

Get in touch with our team to learn more, share ideas, or just say hi!

EMAIL US
Citizen Codex

Sign up for our newsletter

Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.

View Newsletter ARchive