A rental-property workflow in Obsidian: one note per record, Dataview does the rest

Disclaimer

  • Open source: Not applicable — this post shares a workflow and query pattern rather than a code project.
  • Completely free: Yes — everything described here is free to reproduce.
  • AI beyond the author’s ability to comprehend: No. AI assisted with implementation and QA; the workflow and queries were reviewed and tested.

I built this workflow for self-managing landlords who are caught between subscription software and a spreadsheet that never quite becomes a system. The constraint I cared about most was simple: tenant and financial records should remain local, plain-text files.

The pattern that made the system click was one note = one record. Each property, lease, tenant, maintenance ticket, and monthly ledger is a Markdown note with structured properties. The dashboards are Dataview queries over those notes, so the rent roll, lease-expiration warnings, open tickets, and cash-flow views update from the source records rather than being maintained separately.

The most useful technique is logging one transaction per list item with inline fields:

- 03-01 Rent — Unit A [in:: 1850] [cat:: rents]

A query can then use FLATTEN file.lists AS L to work at the transaction level. For tax-oriented views, L.cat != "principal" excludes mortgage principal from deductible totals, while the cash-flow view can still count the outgoing payment. That distinction is easy to blur in a spreadsheet, but it becomes explicit in the data model.


The structure is free to borrow. Happy to answer questions about the queries or share more of the underlying pattern — the lease-expiration and vendor-cost views use the same approach.

1 Like