Every lease, one table
Our signed leases were PDFs. Nobody could answer simple questions like which leases allow pets or how late fees were worded without opening documents one by one. I turned every signed lease into structured, searchable terms.
The problem
Lease terms only existed inside PDFs. Every question about our own contracts meant opening files by hand, so most questions simply didn't get asked.
Constraints
Real contracts
Accuracy mattered more than speed. Every extracted term had to trace back to its document.
Many versions
Templates had changed across years and cities, so the same clause appeared in different wording.
Access
Files had to be pulled through the property system's API, not downloaded by hand.
Key decisions
Extract exact clause text, not summaries.
Each term keeps the original wording alongside the structured value, so a person can check it in seconds.
Group by phrasing.
Instead of reviewing every document, the team reviews about 24 recurring patterns, which surfaces outliers immediately.
Store it with the core data.
Terms link to the same property and unit records as everything else, so they can be joined to rents, owners and renewals.
How it works
Outcome
- Every signed lease became structured terms in one queryable table.
- 156 phrasings were found, condensed into about 24 patterns for the leasing team to review.
- Variances that nobody could see before became visible in one place.
What I'd do differently
- Agree the list of terms with the leasing lead before extracting, so the first pass answers the questions they care about most.