Property Management — User Manual
This is the app your leasing, facilities, and finance teams use every day. It walks a rental relationship through its full life cycle — from listing a property to paying the landlord — while every invoice and payment lands in ERPNext's standard accounting exactly like any other transaction.
Throughout this manual, examples use neutral placeholder names (e.g. Harborview Properties Ltd, Greenfield Tower, unit A-101, tenant Jane Doe). Substitute your own company, properties, and people.
What you'll need
- Your login and the correct Company selected wherever a Company field appears (see Switching Company).
- A Property Manager, Property Accountant, or Accounts User role, depending on the step.
- Billing Items (Rent, Service Charge, Parking, Utility, Penalty) mapped once by your System Manager under Property Management Settings — ask if these look missing.
Open the app from the Desk home tile Property Management, or search property in the Awesomebar.

The rental life cycle at a glance
Property → Property Unit → Tenant (Customer) + Landlord (Supplier)
→ Lease → (auto) Sales Invoice → Payment Entry (receipt)
→ Security Deposit → Deductions → Refund
→ Utility Meter → Meter Reading → billed on the rent Sales Invoice
→ Landlord Disbursement (payout to landlord, net of fee + WHT)
→ Broker Commission (payout to agent)
→ Facility Work Order (maintenance)
→ Inspection (move-in / move-out / routine)
Everything above is native ERPNext underneath: a Tenant is a Customer, a Landlord/Broker is a Supplier, rent is a Sales Invoice, a receipt is a Payment Entry, and withholding tax posts a real Journal Entry through ERPNext's Tax Withholding Category. The app automates the industry-specific parts (escalation, proration, retention of deposits, landlord net payout) and hands the result to the ledger you already trust.
1. Import or create Properties (blocks, floors, units)
Create one Property
- Go to Property Management → New Property (or Awesomebar:
new property). - Fill in:
- Property Code and Property Name — e.g.
GT-01, "Greenfield Tower". - Property Type — Portfolio, Estate, Building, Block, Standalone, Commercial, Mixed Use, or Land. Use Portfolio/Estate for a grouping record and Building/Block for the physical asset under it (set Parent Property to nest them — this is how you model blocks → floors).
- Status — Active, Under Construction, Inactive, or Sold.
- Landlord — link to the owning Supplier record (create the Supplier first if new — see Step 3).
- Property Manager — the staff User responsible.
- Company — the company that owns/manages this property.
- Address section — Address Line 1/2, City/Town, County/Region, Postal Code, Country, and optionally GPS Latitude/Longitude and Land Title / LR Number.
- Property Code and Property Name — e.g.
- Optionally attach Photos and add Notes.
- Save.
Bulk-import properties and units
For an initial load of many blocks, floors, and units, use ERPNext's native Data Import rather than typing each one:
- Awesomebar:
Data Import→ New. - Document Type =
Property(then repeat forProperty Unit). - Download the template, fill in one row per property (or unit), upload, Start Import.
See the native Data Import manual. Import Properties first, then Property Units (units link back to their property).
Property Code GT-01, "Greenfield Tower", Type Building, Parent Property North Estate (Portfolio), Landlord Harborview Holdings (Supplier), Company Harborview Properties Ltd.
2. Add Property Units
- From the Property record, or via New Property Unit.
- Fill in:
- Property — link back to the parent Property.
- Unit Code / Unit Name / Floor — e.g.
A-101, floor1. - Unit Type — Studio, Bedsitter, 1–4+ Bedroom, Maisonette, Bungalow, Villa, Apartment, Shop, Office, Warehouse, Godown, Stall, Parking, Room, Other.
- Availability Status — Vacant, Occupied, Under Maintenance, Reserved, Not Available. This updates automatically as leases start and end, but you can also set it manually.
- Specifications — Floor Area (sqm/sqft), Bedrooms, Bathrooms, Furnishing, Parking Slots.
- Commercials — Monthly Rent, Deposit, Service Charge, Parking Charge (these become the lease defaults for the unit).
- Utilities — Water Meter No / Electricity Meter No, if the unit has its own meter.
- Save. The unit now appears on the Property's unit list, in the Rent Roll report, and in the Occupancy and Vacancy report.
3. Set up the Tenant and Landlord
Tenant = a standard ERPNext Customer (with property fields)
Create the tenant via New Customer. Beyond the usual name and contact details, the app adds a Property / Tenant Details section to every Customer:
- Is Tenant — tick this.
- Tenant Status — Prospective, Active, Notice Given, Vacated, or Blacklisted (use Prospective for a lead you haven't leased to yet).
- ID Type (National ID / Passport / Alien ID / Company Reg) + ID Number + ID Document (attach a scan/photo of the document).
- KRA PIN / Tax ID — use the native Customer Tax ID field for the tenant's tax PIN.
- Emergency Contact name + phone, and Guarantor name / phone / ID number.
- Blacklisted + Blacklist Reason — to flag a tenant you won't lease to again.
- Move In / Out Checklist — a table where you tick off handover items (keys, meter photos, signed inventory, etc.) at move-in and move-out.
Attach any additional documents (lease copy, references) using the standard Attachments sidebar on the Customer.
Landlord = a standard ERPNext Supplier (with owner fields)
The Landlord is a Supplier, already linked on the Property in Step 1. The app adds a Property / Landlord Details section:
- Is Landlord — tick this. Landlord Status — Active / Inactive.
- ID Type / ID Number / ID Document — the owner's identification.
- Management Fee % — your default management commission on this landlord's collections (used later in the Landlord Disbursement).
- Is Broker / Agent — tick if this Supplier is also (or instead) a letting agent.
- Property Ownership table — one row per property with an Ownership %, for co-owned properties.
- Bank details — use the native Supplier Bank Account to store the landlord's payout account.
The commercial terms of your management appointment (fee %, ownership split) live on the fields above. If you also keep a signed management agreement PDF, attach it to the Supplier or the Property via the standard Attachments sidebar. A dedicated management-agreement document type is not part of this app (see the coverage notes).
4. Opening balances
Before go-live, load opening balances for tenants (arrears), landlords, suppliers, and deposits using standard ERPNext:
- Tenant / landlord / supplier opening balances — via an Opening Journal Entry or the Accounting Opening Invoice Creation Tool. See native Opening Balance.
- Held security deposits — create a Security Deposit record (Step 7) per active lease, and post the matching deposit liability via the opening Journal Entry.
Reconcile opening figures to your signed source documents before enabling automatic billing.
5. Create a Lease
- New Lease (Awesomebar:
new lease). - Fill in:
- Tenant (Customer), Property, Unit.
- Status — starts as Draft; set to Active once signed. Later values: Notice Given, Expired, Terminated.
- Company, Currency.
- Term — Start Date, End Date, Billing Day of Month (the day rent invoices generate each month), Notice Period (days), Auto-Renew Reminder.
- Rent & Charges (monthly) — Monthly Rent, Service Charge, Parking Charge, Security Deposit amount. Each is billed as its own line on the rent invoice (and utilities ride the same invoice — see Step 8), so a tenant sees rent, service charge, parking, and utilities as separate terms.
- Escalation & Arrears — Escalation % and Escalate Every (months) for periodic rent increases; Grace Days and Late Penalty % for overdue rent. If you set an escalation % but leave the cycle blank, it defaults to the system-wide cycle in Settings.
- Broker / Agent (optional) — link the Broker (Supplier) and choose a Commission Basis (One Month Rent / Percent of Annual Rent / Fixed Amount) and value — this feeds the Broker Commission step below.
- Submit the lease, then set Status = Active. Submitting is what makes the lease eligible for automatic rent generation.
Tenant Jane Doe, Unit Greenfield Tower – A-101 (2 Bedroom), Monthly Rent 80,000, Service Charge 6,000, Parking 4,000, Deposit 80,000, Billing Day 1, Escalation 5% every 12 months, Grace 5 days, Late Penalty 2%, Broker Summit Realty (Supplier), Commission Basis One Month Rent. (Amounts in your base currency.)
6. Rent billing — automatic, with escalation and proration
The app owns a purpose-built rent-invoice generator (it does not use ERPNext Auto Repeat, which cannot escalate or prorate). Once Enable Automatic Rent Invoicing is on in Property Management Settings, a daily background job:
- Expires any lease whose end/termination date has passed, and frees its unit.
- For every Active (and Notice Given) lease, generates the Sales Invoice(s) due up to today, one per billing period, from the lease's Billing Day.
- Applies one-time late penalties to overdue, unpaid rent invoices.
Each generated invoice carries separate lines for Rent, Service Charge, Parking, and any unbilled Utility readings, using the Items mapped in Settings. If Auto-Submit Generated Invoices is on, they post straight to the tenant's ledger; otherwise they sit as drafts for review first.
Escalation — rent compounds automatically every Escalate Every (months) from the lease start (e.g. +5% each year), with no manual rent edit.
Proration — the first and last billing periods are prorated by days (days in the partial period ÷ days in the full billing cycle). A tenant who moves in on the 15th is billed only for the days occupied; a tenant leaving mid-month is billed only to their exit. Service charge and parking prorate the same way.
Billing cursor — the lease's Last Invoiced Upto field tracks how far billing has run, so a period is never double-billed even if the job runs twice.
Generate rent manually (on demand)
You don't have to wait for the nightly job. On any submitted Active lease, click Generate Rent Invoice (Property Manager / Property Accountant only). It creates every invoice due up to today and returns the list — handy for a new lease or a catch-up. It is fully idempotent: running it again creates nothing if already up to date.
7. Collecting rent (receipts)
- Open the Sales Invoice and click Create → Payment, or go to Accounting → Payment Entry.
- Record the receipt against the invoice — see Payment Entry. The tenant's outstanding balance and the Tenant Ledger report update immediately.
One payment split across several charges — a single Payment Entry can be allocated across multiple invoices (rent, service charge, parking, utilities, penalties, arrears) in its References table. Enter the received amount, then set the allocated amount against each outstanding invoice. This is standard ERPNext allocation.
Partial receipts — allocate less than the invoice total; the invoice stays partly outstanding and continues to age.
Unidentified / on-account receipts — if money arrives before you know which invoice it settles, record the Payment Entry without references (leave it unallocated / on account). Later, open the Payment Entry and allocate it, or use Accounting → Payment Reconciliation to match it to the right invoices. See native Payment Reconciliation.
Automatic receipt confirmations — if the Payment Receipts app is installed, submitting a customer Payment Entry automatically sends the tenant an Email/SMS/WhatsApp receipt (see M-Pesa Daraja and the Payment Receipts guide).
Arrears aging
- Per tenant — the Tenant Ledger report (Step 13) shows a tenant's invoices, payments, and running balance.
- Aged buckets (current / 30 / 60 / 90 / 90+) — use ERPNext's native Accounts Receivable / Accounts Receivable Summary report, filtered by Customer Group or Company, with ageing ranges set to
30, 60, 90. See native Accounts Receivable.
8. Security Deposit
- New Security Deposit, linked to the Lease, Tenant, and Unit.
- Amount, Received Date, Payment Reference. Status moves Draft → Received → Held.
- On move-out, add rows to the Deductions table (each with a Description and Amount — e.g. damage repairs found at inspection). The record auto-calculates Total Deductions and Balance.
- Set status to Partially Deducted, Refunded, or Forfeited, and process any refund via a normal Payment Entry.
Move-out inspection findings with an estimated cost (Step 12) are the natural source of a deduction line.
9. Utility billing (water / electricity)
- New Utility Meter per unit — Meter Type (Water/Electricity/Gas/Other), Meter Number, Unit of Measure, Rate per Unit, and Active checkbox.
- Each cycle, capture a Meter Reading: Meter, Reading Date, Previous Reading, Current Reading. The record computes Consumption and Amount (consumption × rate).
- You don't invoice the reading separately — the next rent invoice for that unit automatically picks up all unbilled readings dated on or before the period end and adds them as Utility lines, then marks each reading Billed and links it to that Sales Invoice.
Water meter WTR-A101, Rate 250/m³, Previous 1,204, Current 1,219 → Consumption 15 m³ → Amount 3,750, added to the tenant's next rent invoice as a Utility line.
10. Landlord Disbursement — paying the owner
This is how you pay a landlord their share of collected rent, after your fee and tax.
- New Landlord Disbursement for the Landlord and Property, with a Period From / To.
- Add the period's collected rent invoices to the Collections table (each row: Sales Invoice, Lease, Unit, Invoice Total, Collected Amount) — this rolls up to Gross Collected.
- Add any deductions (maintenance recharges, repairs paid on the landlord's behalf) to the Deductions table — Description + Amount — rolling up to Total Deductions.
- Set Management Fee % (defaults from the landlord's Management Fee %) — the system computes Management Fee.
- In the Withholding Tax section, pick the native Tax Withholding Category, confirm the WHT %; the record computes WHT Amount and posts a native Journal Entry (WHT Journal Entry) exactly the way your accountant already handles WHT elsewhere in ERPNext.
- The record computes Net Payable:
Net Payable = Gross Collected − Total Deductions − Management Fee − WHT Amount
- Pay the landlord via a Payment Entry, linked back to the disbursement's Payment Entry field. The invoices it settled record the disbursed amount on their Disbursed to Landlord field, so nothing is paid out twice.
Period: one month, 9 units, Gross Collected 585,000. Deductions (plumbing repair) 12,000. Management Fee 10% → 58,500. WHT 5% → 26,175. Net Payable = 585,000 − 12,000 − 58,500 − 26,175 = 488,325, paid to the landlord's bank account.
11. Broker Commission
- New Broker Commission — Broker (Supplier), Commission Type (Rental or Sales), source Lease or Property/Unit.
- Commission Basis — One Month Rent, Percent of Annual Rent, Percent of Sale Value, or Fixed Amount — with Basis Amount and Rate / Value; the record computes Commission Amount.
- Pay via a Payment Entry, linked in the Payment Entry field.
A lease with a Broker + Commission Basis set (Step 5) can generate its commission directly from the lease.
12. Facility Work Order — maintenance
- New Facility Work Order — Subject, Property, Unit, Category (Plumbing, Electrical, Structural, Painting, HVAC, Security, Cleaning, Landscaping, Appliance, Other), Priority (Low/Medium/High/Urgent).
- Description, Reported By (Tenant), Assigned To (staff User — manager/technician), Scheduled Date.
- Tick Preventive (PPM) for scheduled preventive maintenance and optionally link an Asset.
- Track Labor Cost / Material Cost — the record totals Total Cost. For materials issued from your store, use a native Stock Entry (Material Issue) and record the cost here.
- Move Status through Open → In Progress → On Hold / Completed, with Resolution Notes and Completion Date.
Photos — attach before/after photos using the Attachments sidebar; tenants can also raise a request (with a description) from the Tenant Portal (Step 14), which creates a Work Order in Open status assigned to the unit.
Contractor costs — where an outside contractor does the work, capture their charge under Material/Labor cost, and settle them as a native Supplier via a Purchase Invoice/Payment Entry.
Comparing several contractor quotations before awarding, and automatic preventive-schedule / service-contract / insurance / statutory reminders, are not built into this app. Use native ERPNext Request for Quotation → Supplier Quotation comparison for quotes, and native Notifications for date-based reminders. See the coverage notes.
13. Inspections (move-in / move-out / routine)
- New Inspection — Type (Move-In, Move-Out, Routine), Unit, Property, Lease, Tenant, Inspector, Inspection Date.
- Add each finding to the Snags table — Area/Item, Condition (Good/Fair/Damaged/Missing), Action Required, Est. Cost, and an optional Photo. The record totals Total Estimated Cost.
- Capture meter readings at move-in/move-out via a Meter Reading (Step 9).
- Record Sign-off — Signed Off By, Sign-off Date.
Move-out snags with an estimated cost feed directly into a Security Deposit deduction (Step 8), and from there to the deposit refund.
14. Portals — tenant, landlord, and broker self-service
The app ships three secure, self-service web portals. A user is linked to their party through their Contact record, so a landlord only ever sees their own properties, and one landlord can never see another's data (party-scoped, session-derived isolation). Portal menu links appear once the user has the matching role.
| Portal | URL | Role | What the user sees |
|---|---|---|---|
| Tenant Portal | /tenant-portal | Property Tenant | Their leases, their rent invoices, their payment history, their total outstanding balance, their maintenance requests — and a form to raise a new maintenance request (creates a Facility Work Order) |
| Landlord Portal | /landlord-portal | Property Landlord | Their properties and units (occupancy), and their landlord disbursements (collections, fees, WHT, net paid) |
| Broker Portal | /broker-portal | Property Broker | Their commissions (earned/paid), the leases they introduced, and total earned |
Set up a portal user:
- Create/confirm a Contact for the tenant/landlord/broker and link it to their Customer/Supplier.
- Create a Website User (or invite the person) and set the same email on the Contact so the portal can resolve their party.
- Assign the matching role (Property Tenant / Landlord / Broker).
- Ask them to log in and open the portal URL.
To prove isolation, log in as landlord A and confirm only A's properties and disbursements appear; log in as landlord B and confirm B sees only B's. Because the portal derives the party from the logged-in user's Contact, neither can reach the other's records — even by URL.
The portals are mobile-responsive (they reflow for phone screens).
15. Reports
All under Property Management → Reports (or search the report name in the Awesomebar):
| Report | What it shows | Daniel's ask covered |
|---|---|---|
| Rent Roll | Every unit, its current lease, tenant, and current (escalated) monthly rent — your one-page occupancy + revenue snapshot | rent roll (occupied/vacant/notice) |
| Tenant Ledger | A tenant's invoices, payments, and outstanding balance | tenant statement / arrears per tenant |
| Landlord Statement | A landlord's disbursement history — collections, fees, WHT, net payouts | landlord statement (collected/expenses/fees/net) |
| Occupancy and Vacancy | Vacant vs occupied vs under-maintenance units, by property | vacant + upcoming-vacant display |
| Deposit Register | Every Security Deposit, its status, and balance | deposit tracking |
| Broker Commission Statement | Commissions earned and paid, by broker | agent commissions |
For per-property / per-landlord profitability and consolidated views, tag each transaction with the property (rent invoices carry the property/unit automatically) and use native ERPNext Profit and Loss / General Ledger filtered by the property Cost Center or Accounting Dimension, plus the Landlord Statement for owner-level P&L.

Accounting & controls
- Per-property / per-landlord accounting — rent Sales Invoices are stamped with the property and unit; combine with a Cost Center or Accounting Dimension per property to get property-level P&L in native financial reports.
- Credit note / invoice reversal with audit trail — never edit a posted invoice to fix a lease. Use ERPNext's Cancel + Amend (creates an "Amended From" trail) or issue a Credit Note (Return) against the Sales Invoice. Both leave a full audit trail. See native Credit Note.
- Statements — Tenant Ledger (tenant), Landlord Statement (landlord), native Supplier Ledger (supplier).
What this app does not do
To set expectations honestly, these adjacent items are not part of the Property Management app today and use native ERPNext or are on the roadmap:
- Contractor quotation comparison before awarding maintenance → use native RFQ → Supplier Quotation.
- Preventive-schedule / service-contract / insurance / statutory reminders → the Preventive (PPM) flag exists on a Work Order, but automatic recurring reminders use native Notifications.
- Automatic lease-expiry reminder notifications → the lease auto-marks Expired and has an Auto-Renew flag, but proactive reminder emails use native Notifications.
- Payment plans / instalment schedules for arrears → record instalment receipts as partial Payment Entries; a structured instalment plan is not built in.
- A full leasing pipeline (enquiry → viewing → application conversion) → the Prospective tenant status exists; a viewing/application workflow is not part of this app.
- Service-charge budget-vs-actual and common-cost apportionment across units → service charge is billed per lease; automatic budget-vs-actual reconciliation is not built in.
- A signed management-agreement document type → fee %, ownership %, and bank details are captured on the landlord Supplier; attach the signed PDF to the record.
Troubleshooting
| Problem | Likely cause | Fix |
|---|---|---|
| No rent invoice generated on Billing Day | Lease not submitted/Active, or auto-invoicing off | Check the lease is submitted and Active; ask System Manager to confirm Enable Automatic Rent Invoicing in Settings; or click Generate Rent Invoice manually |
| Rent amount looks too small on a new lease | First period was prorated for a mid-month start | This is correct — the tenant is billed only for days occupied |
| Rent didn't increase on the anniversary | Escalation % or "Escalate Every (months)" not set | Set both on the lease; escalation compounds from the lease start date |
| Unit still shows "Occupied" after tenant left | Lease not Expired/Terminated | Set the lease to Terminated or let the daily job Expire it |
| Landlord Disbursement net payable looks wrong | A collection or deduction row missing | Re-check the Collections and Deductions tables line by line |
| Can't see the Property Management tile | Missing role or license issue | Ask System Manager; see Licensing |
| A landlord sees no data in their portal | Their Contact isn't linked to the Supplier, or wrong role | Confirm the Contact's email matches the Website User and the Property Landlord role is assigned |
See also
- Overview · Getting Started
- Construction & Site Management
- Kenya eTIMS — rent Sales Invoices transmit to KRA the same way as any other invoice
- M-Pesa Daraja — collect rent by M-Pesa STK push against a rent invoice
- Native ERPNext: Customer · Supplier · Sales Invoice · Payment Entry · Data Import · Chart of Accounts