Rentals, tenants, and
299 AED/ month | Includes 1 user | +49 AED / extra seat
Property records, lease agreements, tenant portal, maintenance tickets, meter readings, owner statements — every operational flow auto-posts the matching accounting journal. Built for landlords, brokers, and small property-management companies in the UAE.
- Buildings → Floors → Units catalogue with owner FK + amenities
- Lease lifecycle: activation posts security-deposit liability; termination refunds/forfeits
- Work orders auto-route by `costBorneBy`: operator → Bill, tenant → Invoice, owner → statement
- Meter readings pass through to tenants as Utility Recovery Revenue invoices
- Owner statements raise an A/P Bill against the owner-as-vendor (auto-PaymentMade on settle)
- Recurring rent cron raises cycle Invoices with deterministic idempotency keys
Your portfolio, one screen.
Track properties (buildings, villas, plots) and the units inside them. Each unit carries type (1BR / 2BR / shop / office), size, price, photos, and current lease status. The portfolio view shows occupancy at a glance.
- Properties → Units hierarchy
- Unit attributes: type, size, photos, parking, balcony, etc.
- Occupancy dashboard with vacant / leased / under-renovation
- Per-unit historical rent + tenant turnover
Sign once. Bill forever. Auto-journal everywhere.
A lease binds a unit, a tenant, a rent amount, and a payment cadence. Activation posts a security-deposit journal (DR Bank / CR Tenant Security Deposits 2230) and, when the lease carries a commission, raises a separate Invoice routed to Lease Commission Revenue (4310). Termination clears the deposit per disposition: refund (CR Bank) or forfeit (CR Other Income). Cheque-by-cheque payment tracking with bounce + replace flow.
- Activate → security-deposit liability journal (J-LEASE-DEP-{id})
- Terminate with disposition: refund / forfeit / carry (operator picks)
- Cheque cadence + auto-PaymentReceived on markCleared
- Bounce a cheque → replacement cheque tracked separately
- Lease end-date alerts 60 / 30 / 7 days out
A login for the people paying rent.
Each tenant gets a portal: see their lease, download invoices, pay online (when payment gateway is wired), file maintenance tickets, view ticket status. Reduces the "can I get a copy of my Ejari?" emails by 90%.
- Self-service invoice download
- Maintenance ticket submission with photos
- Lease document download (Ejari, contract)
- Online payment, when a payment gateway is wired
Tickets that don't fall through. Cost that routes itself.
Tenant files a maintenance request, it gets assigned to a vendor, completion captures actualCost + costBorneBy. The accounting subscriber then routes the journal automatically: `operator` → Bill against the vendor (line expense = Repairs & Maintenance 6250); `tenant` → Invoice against the active-lease customer (Utility Recovery Revenue 4500); `owner` → no immediate post, the cost flows onto the next owner statement.
- Per-trade vendor assignment (plumber, electrician, AC, cleaning)
- Cost-borne-by routing: operator→Bill, tenant→Invoice, owner→statement
- Photo attachments, tenant + operator notifications
- Idempotent on B-WO-{id} / INV-WO-{id} — re-runs are no-ops
DEWA, SEWA, AADC, FEWA — pass-through invoicing.
Record monthly utility meter readings per unit (electricity, water, cooling, gas). When you flip a reading to `pass_through_to_tenant`, the accounting handler raises an Invoice against the unit's active tenant for consumption × unitCost, revenue routed to Utility Recovery Revenue. The reading row stamps back the linked invoiceId so you can drill from meter → invoice in one click.
- DEWA / SEWA / AADC / ADDC / FEWA / EMPOWER / TABREED providers
- Unit-cost snapshot per reading (historical tariff preservation)
- pass_through_to_tenant flips trigger Invoice MTR-{id}
- Active-lease resolution: invoice goes to the current tenant automatically
Pay the owner. Automatically.
Periodic owner statements roll up gross revenue, operator expenses, management fees, net payout. Issuing a statement raises a Bill against the owner-as-vendor (the PropertyOwner.vendorId satellite link). Marking it paid creates a PaymentMade against that bill. Voiding voids the bill. Your A/P shows exactly what you owe each owner without manual journal entry.
- Issued → Bill OWN-STMT-{id} against PropertyOwner.vendorId
- Mark paid → PaymentMade against the bill (back-stamps statement.paymentMadeId)
- Multi-currency: book in your base, pay owner in their preferred currency
- Voiding from issued state cleanly voids the underlying Bill
The boring parts, automated. The accounting parts, too.