Reviewed by the Excel & Access Developers team, drawing on 15+ years building property, portfolio, and real estate database systems. Updated August 2026.
Quick answer: Yes, Microsoft Access can run full property and portfolio operations, including tenant records, lease tracking, maintenance requests, and rent rolls. It is built for small-to-midsize property managers who have outgrown spreadsheets but do not need, or do not want to pay for, a full property-management SaaS platform. Where it falls short: tenant-facing portals, automated online rent collection, and dozens of people editing at once.
Key takeaways
- Access comfortably handles tenant records, leases, maintenance requests, and rent rolls for portfolios in roughly the dozens-to-low-hundreds of units.
- Splitting the database into a front end (forms and reports) and back end (data only) is what makes it reliable for more than one editor.
- Access is not built for tenant portals or online rent payments; pair it with a payment processor, or plan a PMS upgrade, for that piece.
- The leading cause of "Access is unreliable" complaints in property offices is an unsplit file shared over Wi-Fi or email, not Access itself.
- Most property teams outgrow Excel long before they outgrow Access. It is usually the practical next step, not the final one.
If your current system is a folder of Excel workbooks (one per property, one for vacancies, one for work orders), Access is typically that next step. For the general Excel spreadsheet vs access database decision, start there. For a production example of portfolio-style work, see the real estate portfolio manager case study.
Why Property Managers & Real Estate Firms Still Use Microsoft Access
Property management is relationship-heavy data by nature: one property has many units, one unit has many leases over time, one lease has many payments, and maintenance tickets tie back to a unit, not to a single flat row. Access models those relationships once and reuses them across forms, queries, and reports, which a spreadsheet cannot do cleanly.
Familiar Windows tooling already in Microsoft 365
Access ships with several Microsoft 365 Business plans on Windows, so leasing staff are often already licensed for it. They enter data through forms; owners get printable rent rolls and aging reports. There is no separate browser-based product to license, learn, or maintain for internal-only screens.
Custom workflows without SaaS lock-in
Need a lease-renewal checklist field, a local ordinance flag, or a commission split that no PMS template supports? In Access, that is a new field, a form control, and a report column, not a feature request sitting in a vendor backlog.
Fits small portfolios and internal ops tools
Access is a strong fit for a handful of concurrent users and a few dozen to a few hundred units, running on the office LAN or a well-managed remote desktop. When you outgrow that, or every tenant expects a self-service portal, you plan an upgrade path deliberately instead of hitting a wall. Scaling pitfalls are covered in common mistakes when scaling an Access database.
No per-unit monthly fee
Most dedicated PMS platforms bill per unit, per month. An Access system has a one-time build cost, whether in-house time or a developer, and no recurring per-door charge, which is why many small operators keep it even after they could technically afford a SaaS tool.
What Property Management Tasks Can You Run in Access?
A well-designed property database replaces "find the right tab in the right workbook" with forms and queries that do the lookup for you.
Tenant records
Store legal name, contact info, emergency contacts, move-in and move-out history, and notes in a Tenants table, linked to leases rather than copied onto every payment row. Forms keep phone numbers and emails consistent when a tenant renews or transfers units.
Lease tracking
Leases need start and end dates, rent amount, deposit, status (Active, Notice, Expired), and the unit and tenant foreign keys. A single query answers "what expires in the next 60 days" instantly, instead of scanning three spreadsheets by hand.
Maintenance requests
A MaintenanceRequests table (unit, date opened, category, priority, status, vendor, cost) gives you open-ticket lists and turnaround-time reports. Intake forms stop blank categories and missing unit IDs from breaking your reporting later.
Rent rolls and payment history
Payments belong in their own table (lease, payment date, amount, method, period covered). A rent-roll query joins active leases to units and properties; an aging query finds balances still open past the due date. That structure is what makes Access more trustworthy than a monthly Excel paste.
Vendor and work-order management
If you use contractors, add a Vendors table (name, trade, contact, insurance expiry) and link it to MaintenanceRequests by VendorID. This lets you report on cost per vendor and response time, which is useful when an owner asks why the plumbing bill jumped.
Microsoft Access vs Excel for Rental Property Tracking
This is usually the first fork in the road, before PMS software is even on the table. Excel keeps everything in flat rows on one sheet, so a tenant name and a property address get retyped on every payment row, which is easy to mistype and easy to break with a bad filter or sort.
| Excel | Access | |
|---|---|---|
| Data structure | One flat sheet (or several disconnected ones) | Linked tables (Properties, Units, Tenants, Leases, Payments) |
| Multiple editors | Risky, prone to overwrites and "final_v3" files | Safe when split into front end and back end |
| Reporting | Manual pivot tables, rebuilt often | Saved queries and reports, reusable |
| Data integrity | Nothing stops a typo or duplicate | Relationships and validation rules enforce it |
| Best for | A handful of units, one person updating it | Dozens to a few hundred units, small team |
For the deeper decision framework, including the signs you have outgrown spreadsheets entirely, see signs your business has outgrown Excel and the full Excel vs Access comparison.
Microsoft Access vs Dedicated Property Management Software (AppFolio, Buildium, etc.)
Access is a database platform you shape yourself. Tools like AppFolio, Buildium, or similar PMS products are finished products with tenant portals, banking integrations, and accounting modules built in. Neither is universally better; they solve different constraints, and the right choice depends on portfolio size and how tenant-facing you need to be.
| Need | Prefer Access | Prefer dedicated PMS |
|---|---|---|
| Custom internal tracking | Strong, you own the schema and forms | Constrained to vendor templates |
| Tenant portals / online payments | Weak without heavy custom work | Built-in |
| Small team, Windows desktop | Strong, no per-unit fee | Often overkill or higher monthly cost |
| Large multi-property accounting | Risky past modest scale | Stronger GL, AP, owner statements |
| Time to launch | Fast for a simple version, longer for a polished one | Fast, templates exist out of the box |
Common Problems Property Managers Hit With Access
Most "Access is unreliable" stories from property offices are really file-sharing and design problems: one mega `.accdb` file on a flaky Wi-Fi share, no split front end and back end, or a spreadsheet-shaped table everyone edits at once.
When something breaks, these are the direct fixes:
- File will not open → [Access database will not open](/blog/access-database-wont-open-fix)
- Locked for editing → [Access database locked for editing](/blog/access-database-locked-for-editing-fix)
- Corruption → [corruption recovery](/blog/access-database-corruption-recovery) and [prevention](/blog/prevent-access-database-from-corruption)
- Slow with more units or history → [multi-user best practices](/blog/access-database-multi-user-best-practices) and [why Access slows with large data](/blog/why-access-slow-large-data)
- Outgrowing the current design → [scaling mistakes](/blog/common-mistakes-when-scaling-ms-access-database)
Split front end and back end issues
Put data tables in a back-end file on a stable server share; give each workstation a front-end copy with forms, queries, reports, and VBA. Linked-table path failures are a top cause of "database will not open" tickets after a server rename or a drive letter change.
Concurrent editors and locking
Several people editing the same unsplit file over Wi-Fi is how property desks hit locks and corruption. Split the database, keep the back end on wired storage where possible, and stop emailing the "master" `.accdb` file around.
Spreadsheet-shaped "databases"
One table with PropertyAddress, TenantName, Rent, JanPaid, FebPaid, and so on looks familiar and fails the first time a tenant pays mid-month or a unit turns over. Separate entities and keys properly. See how to design an Access database and table relationships.
How to Set Up a Property Management Database in Access
You do not need every feature of a commercial PMS on day one. You need a clean data model, forms staff will actually use, and the handful of reports owners ask for every month.
Step 1: Define properties, units, tenants, and leases as separate tables
| Table | One row means |
|---|---|
| Properties | One building or site |
| Units | One rentable unit in a property |
| Tenants | One person or company |
| Leases | One lease agreement for a unit and tenant |
| Payments | One payment applied to a lease |
| MaintenanceRequests | One work ticket for a unit |
Keep addresses on Properties and Units, people on Tenants, and money on Payments. That separation is the entire point of moving off Excel.
Step 2: Set primary keys and relationships
Give every table an AutoNumber primary key (`PropertyID`, `UnitID`, `TenantID`, `LeaseID`, and so on). Put foreign keys on the "many" side (`Units.PropertyID`, `Leases.UnitID`, `Leases.TenantID`, `Payments.LeaseID`). Enforce referential integrity in the Relationships window so a lease row cannot be deleted while payments still point to it.
Step 3: Build forms for leasing and maintenance intake
Use a main form and subform pattern: lease header on top, payments or documents in a subform. Maintenance intake should require UnitID, category, and priority before it will save. Light VBA speeds up navigation and stamps default values:
Open the lease form for the selected tenant (button on a tenant form):
Private Sub cmdOpenLeases_Click()
On Error GoTo Handler
If IsNull(Me!TenantID) Then
MsgBox "Save the tenant record first.", vbExclamation
Exit Sub
End If
DoCmd.OpenForm "frmLeases", _
WhereCondition:="TenantID = " & Me!TenantID
Exit Sub
Handler:
If Err.Number = 2501 Then
' Open canceled — missing form name, Cancel=True, or bad filter
Debug.Print "OpenForm canceled: " & Err.Description
Else
MsgBox "Could not open leases: " & Err.Number & " — " & Err.Description, vbCritical
End If
End SubCreate a maintenance ticket with defaults (new-record button on a unit form):
Private Sub cmdNewWorkOrder_Click()
On Error GoTo Handler
Dim unitId As Long
If IsNull(Me!UnitID) Then
MsgBox "Select a unit first.", vbExclamation
Exit Sub
End If
unitId = CLng(Me!UnitID)
DoCmd.OpenForm "frmMaintenanceRequests", DataMode:=acFormAdd
Forms!frmMaintenanceRequests!UnitID = unitId
Forms!frmMaintenanceRequests!DateOpened = Date
Forms!frmMaintenanceRequests!Status = "Open"
Forms!frmMaintenanceRequests!Priority = "Normal"
Exit Sub
Handler:
MsgBox "Could not create work order: " & Err.Number & " — " & Err.Description, vbCritical
End SubStep 4: Add rent-roll and aging reports
Build a query of active leases joined to Units and Properties (Status = "Active", and LeaseEnd >= Date() or no end date, depending on your rules). Base the rent-roll report on that query.
For balances, either maintain a Charges table or compute outstanding rent in a query that sums Payments per lease. This form-level helper uses `DSum` and `Nz` so null payments do not throw errors:
Private Function LeaseBalance(leaseId As Long) As Currency
Dim charged As Currency
Dim paid As Currency
' Example: monthly rent × months elapsed — replace with a Charges table if you have one
charged = Nz(DLookup("MonthlyRent", "Leases", "LeaseID = " & leaseId), 0)
paid = Nz(DSum("Amount", "Payments", "LeaseID = " & leaseId), 0)
' Demo only: one-period snapshot. Production systems track period charges explicitly.
LeaseBalance = charged - paid
End Function
Private Sub Form_Current()
On Error Resume Next
If Not IsNull(Me!LeaseID) Then
Me!txtBalance = LeaseBalance(CLng(Me!LeaseID))
Else
Me!txtBalance = 0
End If
End SubFlag overdue active leases (run from a nightly macro or an admin button; test on a copy first):
Public Sub FlagOverdueLeases()
On Error GoTo Handler
Dim db As DAO.Database
Dim sql As String
Set db = CurrentDb
' Example rule: active lease, due day has passed, this month's payments below rent
sql = "UPDATE Leases SET PastDue = True " & _
"WHERE Status = 'Active' " & _
"AND DueDay < Day(Date()) " & _
"AND Nz((SELECT Sum(Amount) FROM Payments " & _
" WHERE Payments.LeaseID = Leases.LeaseID " & _
" AND Year(PaymentDate) = Year(Date()) " & _
" AND Month(PaymentDate) = Month(Date())), 0) < MonthlyRent"
db.Execute sql, dbFailOnError
MsgBox db.RecordsAffected & " lease(s) flagged past due.", vbInformation
Exit Sub
Handler:
MsgBox "FlagOverdueLeases failed: " & Err.Number & " — " & Err.Description, vbCritical
End SubStep 5: Export rent rolls and owner reports to Excel or PDF
Owners rarely want to open Access itself; they want a file. `DoCmd.OutputTo` sends a saved query or report straight to Excel or PDF with one click:
Public Sub ExportRentRollToExcel()
On Error GoTo Handler
Dim exportPath As String
exportPath = CurrentProject.Path & "\RentRoll_" & Format(Date, "yyyy-mm-dd") & ".xlsx"
DoCmd.OutputTo acOutputQuery, "qryActiveRentRoll", acFormatXLSX, exportPath, False
MsgBox "Rent roll exported to:" & vbCrLf & exportPath, vbInformation
Exit Sub
Handler:
MsgBox "Export failed: " & Err.Number & " — " & Err.Description, vbCritical
End SubSwap `acFormatXLSX` for `acFormatPDF` and point at a report instead of a query to send owners a clean PDF statement instead.
Those snippets are starting patterns, not a full accounting engine. Production portfolios usually add an explicit Charges or Ledger table so mid-month moves and partial payments stay auditable.
When to Bring in a Developer or Upgrade Your System
Stay DIY when one person owns the file, the portfolio is small, and a wrong weekend experiment will not stop rent collection.
Bring in a developer when leasing and maintenance staff must edit at the same time, you need reliable linked tables, custom VBA, or a migration from Excel that preserves history without losing records. Start with Access database design and development, the broader Access development hub, or VBA automation if the goal is mainly automating existing workflows.
Plan a PMS, or hybrid, upgrade when tenants need online portals and payments, accounting must feed a full general ledger, or concurrent users and data volume push past what a well-split Access app can comfortably carry. Many firms keep Access for internal operations while a SaaS tool handles the resident-facing pieces; just do not run two conflicting sources of truth for the same lease.
See Real Estate Access & Excel Work
Managing a portfolio in spreadsheets or a fragile Access file? Review how we approach real estate systems, and a related portfolio case study, then book a consult if you want a production-ready build.
Real Estate SolutionsRelated case study: Real Estate Portfolio Manager.
Frequently Asked Questions
Yes. Many property managers and small-to-midsize portfolios run tenant records, leases, units, rent payments, and maintenance requests in Microsoft Access when a full property-management suite is more than they need. It works best as an internal Windows desktop system with clear tables, forms, and reports, not as a tenant-facing portal or online payment system.
At minimum: Properties, Units, Tenants, Leases, Payments (or RentTransactions), and MaintenanceRequests, each in its own table, linked by primary and foreign keys. Add a Vendors or WorkOrders table if you track contractors. Avoid a single spreadsheet-style table that repeats the property address and tenant name on every payment row.
It depends on what you need. Access wins for custom internal workflows, a small office team, and avoiding a per-unit monthly fee. Dedicated PMS platforms win when you need tenant portals, automated online rent collection, full trust accounting, or dozens of people logging in at once.
Access itself is not usually a separate purchase, since it is included with several Microsoft 365 Business plans on Windows. It is not available on Mac, and not every Microsoft 365 plan includes it, so check your specific plan. Beyond licensing, budget time, or a developer, to design the tables, forms, and reports correctly.
Comfortably into the thousands of records, since row count is rarely the limiting factor for a property database. The real constraints are the 2GB file-size limit per `.accdb` file and how many people need to edit it at once. Most single-office property teams stay well within those limits for years.
Yes, if it is built correctly. Split the database into a back-end file that holds only the data, stored on a stable server, and give each workstation a front-end copy with forms, queries, and reports. An unsplit file shared over Wi-Fi or email is the most common cause of locking and corruption in property offices.
Excel stores everything in flat rows on a single sheet, so tenant names, addresses, and payment history get duplicated and are easy to break. Access separates that data into linked tables, where one property has many units and one unit has many leases, so records stay consistent as the portfolio grows. Most property teams outgrow Excel before they outgrow Access.
Hire help when more than one person must edit the database daily, lease or billing rules get complex, the file keeps locking or corrupting, you need a proper split front-end and back-end setup, or you are migrating off Excel and cannot risk losing tenant history. A developer leaves you clean relationships, tested forms, and VBA automation instead of a fragile DIY file.
Next Steps
Map your entities, properties to units to leases to payments, on paper before you open Access. Decide whether you are building a contained internal app or genuinely need a full PMS. For industry context, start with real estate solutions and the portfolio manager case study. If you want a production database built correctly the first time, contact us for a free consultation.
Need help moving from advice to implementation?
We can review the workbook, Access database, or workflow behind this article and tell you the safest next step before you spend time fixing the wrong thing.