If you're the treasurer or committee member responsible for maintenance billing, you already know the routine: build a spreadsheet, copy last month's numbers, manually update who's paid, send out WhatsApp reminders one by one, and spend at least one weekend a month chasing down the residents who "definitely already paid." It works — barely — for a 20-unit building. By the time a complex crosses 60 or 80 units, it doesn't work at all.
This guide walks through how to actually set up maintenance billing properly: defining your fee structure, setting a billing cycle, handling multiple currencies correctly, automating reminders, and getting through that first awkward transition month. None of this requires an accounting background — just about an hour of setup.
Why manual and spreadsheet billing breaks down as you grow
A spreadsheet is fine for ten rows. The problem is that maintenance billing software needs more than a static number in a cell — it needs a history. Once a complex has more than a few dozen units, three things start failing at the same time:
- No single source of truth. If two committee members both have "the" spreadsheet on their laptops, you now have two truths and no way to reconcile them without a phone call.
- Reminders don't scale. Manually messaging 90 residents every month, tracking who replied, and remembering who you already nudged twice is a part-time job nobody signed up for.
- Disputes have no evidence. "I already paid" becomes a 20-minute back-and-forth because there's no timestamped, immutable record either side can point to.
None of this is a discipline problem — it's a tooling problem. Fixing it starts with defining your billing structure properly, not with finding a better spreadsheet template.
Step 1: Define your maintenance or service-charge structure
Before you bill anyone, decide how charges are calculated. Most communities use one of three models, and it's worth picking deliberately rather than defaulting to whatever the last committee did:
- Flat per-unit fee. Every unit pays the same amount regardless of size — simplest to administer, common in smaller or more uniform complexes.
- Size-based (per-square-foot or per-square-metre). Larger units pay proportionally more. This is the fairest model for mixed-size complexes and the one most residents expect once unit sizes vary significantly.
- Category-based. Different unit types — studio, 2-bed, penthouse, commercial/retail units on the ground floor — carry different flat rates. Useful when a complex has genuinely different amenity access or usage patterns by category.
Whichever model you choose, write it down as a formal policy the committee approves, not an informal understanding. When your billing platform can encode this structure directly — flat, size-based, or category-based, per unit type — you set it up once and every invoice for every future cycle calculates itself correctly, with no manual recalculation when a new unit type is added. Take a look at the full feature set to see how rules like these get configured once and then run themselves.
Step 2: Set your billing cycle and due dates
Most societies bill monthly, but the details matter more than people expect:
- Pick a consistent invoice date — the 1st of the month is the most common choice, since it aligns with how most residents budget.
- Set a due date with a real grace period — 7 to 10 days is typical. Too short and you generate needless late-fee disputes; too long and collection slows down.
- Decide on late fees upfront and apply them consistently. A late fee that's enforced for some residents and waived for others quietly destroys trust faster than almost anything else a committee does.
- Automate the recurring invoice generation. Once the cycle and structure are set, invoices should generate themselves every month — no one should have to remember to "run billing" manually, because eventually someone will forget.
Step 3: Let the system handle currency — don't think about it
This one surprises people the first time they see it, so it's worth explaining precisely. If your complex is in Dubai, invoices should show AED. In Toronto, CAD. In Manila, PHP. A platform built for global communities should auto-detect the correct currency from the complex's registered country the moment you set it up — no dropdown to hunt through, no symbol to remember to change.
Just as important is what it doesn't do: it never silently converts stored amounts. A charge entered as 15,000 in your local currency stays 15,000 on the record forever — it isn't recalculated against a floating exchange rate every time someone opens the ledger. That matters enormously for audit trails and for GAAP-compliant reporting, where a number needs to mean the same thing a year from now that it meant the day it was billed. Currency, in other words, should be a display setting tied to your complex's location — not something baked into every transaction as a conversion risk. This is one of the areas purpose-built maintenance billing software handles fundamentally differently from a generic invoicing tool built for a single home market.
See multi-currency billing running on a real complex
Two months free, no credit card, set up in an afternoon.
Start Free — 2 Months on UsStep 4: Automate WhatsApp and push payment reminders
The single biggest lever for improving your collection rate isn't chasing harder — it's chasing consistently, without a human having to do it. Set up a reminder sequence once and let it run every cycle:
- On invoice day — a push notification and WhatsApp message with the amount due and a one-tap payment link.
- Two or three days before the due date — a gentle nudge for anyone who hasn't paid yet.
- On the due date and a few days after — a firmer reminder, and where relevant, a note that a late fee is now applying.
Residents respond far faster to a WhatsApp message or phone notification than to an email they'll open three days later, or a notice pinned to a board in the lobby. And because it's automated, the treasurer stops being the person who has to remember to send it — the schedule does that instead, every month, without fail or favoritism.
Step 5: Use digital receipts to end "I already paid" disputes
Every payment should generate an instant, timestamped digital receipt the resident can see immediately in their app or inbox — and the committee should be able to see the same record on their side. This single change eliminates most of the classic maintenance billing disputes, because there's no longer a version where the resident says they paid and the committee has no record, or vice versa. Both sides are looking at the same ledger entry, generated automatically the moment payment clears, not manually entered by whoever happened to be free that evening.
Step 6: Handle partial payments, discounts, and outstanding dues cleanly
Real communities are messier than a textbook billing cycle, so your setup needs to handle the exceptions gracefully, not just the happy path:
- Partial payments should reduce the outstanding balance and stay visible as "partially paid" rather than either vanishing or getting logged as a full payment by mistake.
- Discounts — for early payment, hardship cases, or committee-approved waivers — should be recorded as a distinct line item with a reason, not just a manually reduced invoice total that leaves no explanation for the next committee.
- Outstanding dues should roll forward automatically and stay clearly flagged, so nothing quietly falls off the books when a unit changes hands or a resident moves out mid-dispute.
The goal is that six months from now, anyone on the committee — including someone who wasn't there when the discount was approved — can look at a unit's ledger and understand exactly what happened and why.
Step 7: Get through the first transition month
The first billing cycle after switching off spreadsheets is always a little awkward, and it helps to expect that rather than be surprised by it. A few things that make it smoother:
- Migrate opening balances honestly. Enter each unit's actual outstanding balance as of the switch date, even if it's messy — don't zero everyone out to make the launch look clean.
- Over-communicate the change once, clearly. A single WhatsApp broadcast and a notice explaining "bills will now arrive via the app, here's what to expect" heads off most confusion before it starts.
- Expect a few "why is my amount different" questions. Usually it's because the new system is calculating size-based or category-based charges correctly for the first time — that's worth explaining patiently, since it's often the old spreadsheet that was wrong, not the new bill.
- Keep the old records accessible, not deleted. You'll want to cross-reference the final spreadsheet against the first digital cycle for a month or two, just as a sanity check.
Before, I spent every Sunday updating a spreadsheet and still couldn't tell you, off the top of my head, who owed what. Now I open the app and it's just there — paid, unpaid, partial, all of it, without me touching a single formula.
That's really the whole point of setting this up properly: not a fancier-looking bill, but a treasurer who gets their Sundays back and a committee that can answer "who owes what" in five seconds instead of twenty minutes of spreadsheet archaeology. Once your structure, cycle, and reminders are configured, maintenance billing stops being a monthly project and just becomes something that happens — correctly, in the right currency, on schedule, every single month.