Custom Commercial Property Management Software: Service Charges and Leases
Founder & Lead Engineer, RAITHub
Build custom commercial property management software when your leases break the platform: service charges split across several schedules, one tenant on several units, rent reviews with caps and collars, or a year-end reconciliation rebuilt in spreadsheets. In Victoria, retail landlords owe an outgoings statement within three months of each accounting period's end; RICS expects full use of its service charge standard from 31 December 2026 year ends.
This guide is for commercial landlords, managing agents and PropTech founders in the UK, Australia and Canada who are deciding whether to build. It is written from the engineering side. RAITHub built PropDesk, a residential property management platform with a full lease lifecycle, Stripe rent collection and 1,024 automated tests. RAITHub has not shipped commercial service charge software, so everything below about service charges, outgoings and CAM is engineering guidance built on that lease engine, not a case study. Legal and accounting points are general information. Confirm them with your adviser, your accountant and the professional standards you work under.
When does custom commercial property software make sense?
When the lease is the product. Residential software is built around one tenancy, one unit and a monthly rent. Commercial portfolios break that assumption in predictable places, and the table shows where a platform usually copes and where teams start building.
| Your situation | Usually the better fit | Why |
|---|---|---|
| A small portfolio of single-let units on simple leases | Buy a platform | Rent, arrears and documents are standard features |
| Multi-let buildings with one service charge schedule | Buy, and test the year-end output with your accountant | Many platforms handle a single schedule |
| Mixed-use estates with several schedules, caps and exclusions per lease | Trial platforms first; build the service charge engine if none models your leases | Per-lease exceptions are where spreadsheets take over |
| Your platform does 90% of the job | Keep it; build an add-on through its API | You pay only for the missing piece |
| A PropTech startup selling to commercial landlords or agents | Build | The data model and roadmap must be yours |
If you are still weighing residential software, property management software development covers the general build, and building online rent collection covers the payment side.
How do service charges, outgoings and CAM differ between the UK, Australia and Canada?
The idea is the same everywhere: the landlord spends on shared costs and recovers a share from each tenant. The names, the paperwork and the rules differ, and the software has to produce the right document for each market.
| Market | Usual term | What governs it | What the software must produce |
|---|---|---|---|
| UK | Service charge | The lease, plus the RICS professional statement Service charges in commercial property (2nd edition) for RICS members and regulated firms | A budget before the year and a year-end certificate after it, issued "in a timely manner" |
| Australia (Victoria, retail) | Outgoings | The lease and the Retail Leases Act 2003 (Vic); other states have their own retail leases law | A written estimate, then an annual statement no later than three months after each accounting period |
| Canada | Common area maintenance (CAM), or operating costs as additional rent | Mainly the lease; area is often measured to a BOMA standard | Monthly estimates, then a year-end reconciliation per tenant |
For the UK, RICS says the 2nd edition "sets mandatory requirements for RICS members and RICS-regulated firms", is effective from 31 December 2025, and that full compliance is expected for service charges with 31 December 2026 year ends and beyond (RICS: Service charges in commercial property). Its stated aims include "best practice, uniformity, fairness and transparency" and budgets and year-end certificates "issued in a timely manner". Read the standard itself for the specific timings and content it requires; we have not reproduced them here.
For Victoria, the Victorian Small Business Commission says the landlord "must give the tenant a written estimate of the outgoings", must give the annual statement "no later than three months after the end of each accounting period", and that the statement must be audited unless the tenant pays only GST, utilities, council rates and insurance and the statement comes with proof of payment. For Canada, BOMA publishes floor measurement standards, including ANSI/BOMA Z65.1-2024 for office buildings, which define the rentable area many leases use to share costs (BOMA standards).
General information only. Rules differ by state, province and lease; confirm what applies to each property with your adviser and accountant.
How do you apportion a service charge fairly in code?
Split each schedule's cost by each unit's weight, in integer cents, with a rounding rule that makes the shares add up to the exact total. A schedule is a pool of costs shared by a defined set of units: the whole building, the office floors only, the car park. Each unit's weight is usually its area, sometimes a fixed percentage written into the lease.
A worked example, for an illustrative three-unit building in pounds:
| Unit | Area | Building schedule (£120,000) | Upper-floors schedule: lift and stairs (£18,000) | Total service charge |
|---|---|---|---|---|
| A: ground-floor retail | 4,500 m² | £60,000 | Not in this schedule | £60,000 |
| B: first-floor office | 3,000 m² | £40,000 | £12,000 | £52,000 |
| C: second-floor office (vacant) | 1,500 m² | £20,000 | £6,000 | £26,000, to the landlord's account |
Two rules matter more than the maths. First, a vacant unit keeps its weight: its share goes to a landlord line, never silently spread across the other tenants. Who bears a void share is set by the lease and the standards you follow, and the software should show it as a visible line. Second, rounding must be deterministic. Splitting £100,000.00 three ways cannot give three equal shares in pennies, so one unit gets the extra penny, and the same unit must get it every time the report is rerun.
A minimal TypeScript apportionment using largest-remainder rounding, with BigInt so large totals times large areas never lose precision:
// Apportion one schedule's cost across units by weight, in integer cents.
// Largest-remainder rounding: the shares always sum to the exact total,
// and ties break on unitId so a rerun gives the same answer.
export type Share = { unitId: string; weight: bigint } // e.g. area in m², or basis points from the lease
export function apportion(totalCents: bigint, shares: Share[]): Map<string, bigint> {
if (totalCents < 0n) throw new Error('apportion costs; handle credits as a separate line')
const totalWeight = shares.reduce((sum, s) => sum + s.weight, 0n)
if (totalWeight <= 0n) throw new Error('schedule has no weight to apportion against')
const rows = shares.map((s) => {
const product = totalCents * s.weight
return { unitId: s.unitId, cents: product / totalWeight, remainder: product % totalWeight }
})
let leftover = totalCents - rows.reduce((sum, r) => sum + r.cents, 0n)
rows.sort((a, b) =>
a.remainder === b.remainder ? a.unitId.localeCompare(b.unitId) : a.remainder > b.remainder ? -1 : 1,
)
for (const r of rows) {
if (leftover === 0n) break
r.cents += 1n
leftover -= 1n
}
return new Map(rows.map((r) => [r.unitId, r.cents]))
}
// apportion(10_000_000n, [{ unitId: 'A', weight: 1n }, { unitId: 'B', weight: 1n }, { unitId: 'C', weight: 1n }])
// gives A = 3,333,334 and B = C = 3,333,333 cents: £100,000.00 exactly.
Real leases add layers on top of this function: a cap on a tenant's contribution, excluded cost categories for one lease, a fixed percentage instead of area, a management fee calculated on the recoverable total. Each is a rule applied before or after apportionment, and each needs its own test. Money is stored in integer cents or pence, never floating point.
How should one lease over several units be modelled?
As a lease that links to many units over time, not a unit that owns a lease. Commercial tenants take extra floors, give some back at a break date, and pay different rent lines for different spaces under one agreement.
| Entity | What it holds | Why commercial needs it |
|---|---|---|
| Lease | Parties, term, break dates, review dates, deposit or guarantee | The legal agreement, independent of which units it covers |
| Lease unit (dated link) | Lease, unit, from date, to date | A tenant can add or surrender space mid-term without a new lease |
| Rent line | Type (base, car park, storage), amount, frequency, effective dates | One lease, several charges, each reviewed differently |
| Schedule membership | Unit, schedule, weight, effective dates | Weights change when space is re-measured or re-let |
| Lease rule | Cap, exclusion, fixed share, fee basis | The per-lease exceptions that break generic platforms |
Every row with money or weights carries effective dates, because a year-end certificate must be reproducible as it stood on the day it was issued. Changes are recorded, not overwritten; the pattern is in how to design a SaaS audit log.
How do you automate rent reviews: fixed, indexed and open market?
Store the mechanism with the review date, calculate what can be calculated, and route the rest to a person. The software should never guess an open market figure.
| Review type | What the software does | What stays with people |
|---|---|---|
| Fixed uplift | Applies the stated increase on the review date and notifies the tenant | Nothing, beyond checking the lease wording once |
| Indexed (for example CPI), with a collar and cap | Pulls the index values named in the lease, applies the floor and ceiling, drafts the notice | Confirming the index series and rounding rule the lease specifies |
| Open market | Diarises the review, tracks the interim rent and the negotiation status | The valuation and agreement, often with surveyors |
| Settled late | Calculates the backdated difference from the review date | Whether interest or other terms apply, per the lease |
An indexed review in integer maths, as engineering guidance. Index values are stored as integers (for example 133.9 stored as 1339), and increases are in basis points, where 100 basis points is 1%:
// Indexed rent review with a collar (floor) and cap (ceiling), all integers.
export function indexedRent(currentCents: bigint, indexOld: bigint, indexNew: bigint, collarBp: bigint, capBp: bigint): bigint {
let upliftBp = ((indexNew - indexOld) * 10000n) / indexOld // rounds toward zero; check the lease's rounding rule
if (upliftBp < collarBp) upliftBp = collarBp
if (upliftBp > capBp) upliftBp = capBp
return (currentCents * (10000n + upliftBp)) / 10000n
}
// £50,000 rent, index 1300 to 1352 (a 4% rise), collar 1%, cap 3%:
// indexedRent(5_000_000n, 1300n, 1352n, 100n, 300n) === 5_150_000n, so £51,500.
PropDesk already runs rent increases as one of its 5 daily automated jobs, alongside rent reminders, late fees and lease expiry alerts. A commercial review engine extends that idea with the mechanism, collar, cap and interim-rent states above.
What does year-end CAM or service charge reconciliation have to produce?
For each tenant: what was estimated and billed, what was actually spent and recoverable, their share of it, and the balancing charge or credit. The steps are the same in all three markets; the output document differs.
| Step | What the software must do |
|---|---|
| 1. Close the year's costs | Lock actual spend per schedule and cost category, with invoices attached |
| 2. Remove what isn't recoverable | Apply lease exclusions and any caps before apportionment |
| 3. Apportion | Split each schedule by the weights in force during the year, pro rata for part-year occupation |
| 4. Compare with estimates billed | Per tenant, per schedule: billed minus actual share |
| 5. Issue the statement | UK year-end certificate, Victorian outgoings statement, or Canadian CAM reconciliation, in the format your accountant or auditor signs off |
| 6. Settle | Raise balancing charges, credit overpayments, and keep the whole calculation reproducible |
Test this more than anything else. Year-end figures reach tenants, auditors and sometimes disputes, so every rule should have an automated test with a known answer, and every release should rerun last year's reconciliation to prove nothing moved. Regression testing after every deploy explains how, and testing payments and webhooks covers the collection side.
What working hours overlap with a Dhaka team from London, Sydney or Toronto?
Dhaka is UTC+6 with no daylight saving. On a 9:00 to 18:00 day at both ends, London shares about 3 hours in winter and 4 in summer, Sydney 4 to 5, Perth 7, and Toronto gets a fixed 2-hour window in the Dhaka evening.
| City | Shared hours | Window in local time | Window in Dhaka time |
|---|---|---|---|
| London (GMT, winter) | 3 | 09:00–12:00 | 15:00–18:00 |
| London (BST, summer) | 4 | 09:00–13:00 | 14:00–18:00 |
| Sydney or Melbourne (AEDT, October to April) | 4 | 14:00–18:00 | 09:00–13:00 |
| Sydney, Melbourne (AEST) or Brisbane | 5 | 13:00–18:00 | 09:00–14:00 |
| Perth (AWST) | 7 | 11:00–18:00 | 09:00–16:00 |
| Toronto (EST / EDT) | 2, fixed daily window | 08:00–10:00 / 09:00–11:00 | 19:00–21:00 |
Everything outside the window runs async, with a written handoff every day. The working week and any shift in hours are agreed per client when the engagement starts. Year-end is the one period where you want more live time with the team, so plan the reconciliation release well before your first statement is due.
What should the first release of a commercial property product include?
One portfolio's leases and one year-end, end to end. The illustrative hours below are assumptions to show where the effort goes, not a quote; the MVP cost estimator turns your own scope into a range, and pricing explains how RAITHub quotes.
| Module (illustrative) | Assumed hours | Why it sizes this way |
|---|---|---|
| Properties, units, multi-unit leases, rent lines | 150 | Dated links and several charges per lease |
| Rent invoicing and collection | 100 | Quarterly or monthly billing, arrears, payment matching |
| Service charge schedules, budgets and apportionment | 160 | Per-lease rules, caps and exclusions |
| Year-end reconciliation and statements | 120 | Reproducible documents in each market's format |
| Rent review engine | 70 | Fixed and indexed calculations; open market as a workflow |
| Tenant and landlord portals | 90 | Statements, invoices, documents and maintenance requests |
| Automated tests and QA | 160 | Known-answer tests for every money rule |
| Total | 850 |
The portal side is covered in tenant portal features tenants actually use, and maintenance routing in a maintenance request system that routes jobs to contractors.
Why RAITHub for this
- A lease engine already built and tested. PropDesk covers the full lease lifecycle, Stripe rent collection with automated late fees and payment plans, maintenance routing to contractors and move-in and move-out inspections, across 4 user roles, with 5 daily jobs and 1,024 automated tests (PropDesk case study).
- Money logic tested first. TheSkinProof, the founder's own marketplace venture, runs bKash, Nagad, SSLCommerz and cash on delivery with 750+ automated tests. Integer money, idempotent payments and known-answer tests are the default.
- Honest scope. RAITHub has not shipped commercial service charge, outgoings or CAM software. The quote treats those modules as new work, and your accountant or surveyor defines the rules they encode.
- Multi-tenant platforms for founders. The SaaS development service covers products sold to many landlords or agents, and the real estate industry page sets out what RAITHub builds for PropTech.
- Fixed scope and your IP. A free 15-minute technical audit, a fixed written quote, an NDA as standard, and all code assigned to you.
When you don't need us
- Your platform produces correct year-end statements. Keep it; switching or building costs more than the subscription.
- You want a vendor that has already shipped service charge accounting. Choose one with that track record.
- You need a UK, Australian or Canadian team on site. RAITHub works remotely from Dhaka and has no local office.
- You need native iOS or Android apps. RAITHub builds web applications and PWAs, not native mobile apps.
- You need legal, accounting or surveying advice. That is for your adviser, accountant or surveyor; RAITHub builds the software their rules run in.
- You need listing feeds or MLS data. RAITHub has not built MLS integrations.
Standards and regulator pages checked on 30 September 2026. General information only; confirm legal, accounting and professional-standard points with your advisers.
If your leases have outgrown your software, book the free 15-minute technical audit. Bring one anonymised lease summary, one year's service charge or CAM workings, and the markets you operate in.
Frequently asked questions
When does custom commercial property management software make sense?
When your leases break the platform: several service charge schedules per building, per-lease caps and exclusions, one tenant across several units, or indexed reviews with collars and caps. If a platform already produces correct year-end statements for your portfolio, keep it or build a small add-on instead.
What is the RICS service charge standard?
RICS publishes Service charges in commercial property, a professional statement now in its 2nd edition. It sets mandatory requirements for RICS members and RICS-regulated firms, took effect on 31 December 2025, and full compliance is expected for service charge years ending 31 December 2026 onwards. Read the standard for its specific requirements.
How should software apportion service charges between tenants?
Split each schedule's costs by each unit's weight, usually area, in integer cents, using a deterministic rounding rule such as largest remainder so shares sum exactly to the total. Keep vacant units in the calculation and show their share as a landlord line.
What is CAM reconciliation?
Common area maintenance reconciliation is the year-end comparison, common in Canadian and US leases, of the estimated operating costs each tenant paid against their actual share. The result is a balancing charge or a credit per tenant, calculated under the lease's exclusions, caps and area measurements.
When must a Victorian retail landlord give an outgoings statement?
The Victorian Small Business Commission says the annual statement is due no later than three months after the end of each accounting period, and it must be audited unless the tenant pays only GST, utilities, council rates and insurance with proof of payment. Confirm the rules for other states with your adviser.
Has RAITHub built commercial property software?
No. RAITHub built PropDesk, a residential property management platform with a full lease lifecycle, Stripe rent collection, 4 roles and 1,024 automated tests. Commercial service charge, outgoings and CAM modules would be new work, built on that lease engine and priced as such.
Related posts
Ready to discuss your project?
Book a free 15-minute technical audit with our engineering team.