A self-managed board eventually asks whether it still needs to pay someone to keep the books. Every HOA accounting vendor gives the same answer: yes, we automate that. So does the next vendor, and the one after that.
A bookkeeper's month is not one task. It is recording payments, matching a bank statement against what the ledger already shows, reading an invoice, and deciding what to do with the ones that do not fit — in that order, every month, for as long as the association exists. Some of that is arithmetic. Some of it is a decision only a person should make. Both get sold under the word "automated."
What follows is what actually happens to each piece of that job on CommunityPay's ledger — not a percentage, a walk through the tasks themselves.
What Records Itself
When a resident pays dues online, the payment settles and the receipt posts to the ledger without anyone touching a keyboard. Nobody opens the accounting screen afterward and types in the unit, the amount, and the date. The system that collected the money is the same system that recorded it, so there is no second step where a number could be copied wrong.
This used to be manual, every time a payment arrived: taking a bank deposit and working out which owners it represents, one by one, every collection cycle. For an online payment, that step no longer happens — not faster, gone, because nothing was ever left unrecorded to begin with.
A check is a different animal. Someone still has to open the envelope, deposit it, and enter it against the right unit. Automation cannot open mail. What changes is that once it is entered, it lands in the same ledger, under the same rules, as every payment that arrived on its own.
Eight Ways to Find the Same Dollar
A bank statement still has to come from somewhere: someone downloads it from the bank and uploads the file. That has not changed. What happens after the file lands has.
The matching engine checks each line on the statement against eight different explanations for what it might be: a Stripe payout, a resident's payment, a bill paid to a vendor, a loan payment, a trust deposit or disbursement, a bank fee, or an entry already sitting in the ledger unreconciled. Each candidate carries a confidence score, from exact — within $0.02 of the expected amount — down to a low-confidence match still within $50 of it. A close match is not treated the same as a strained one.
None of that gets recorded on its own. The engine proposes; it does not persist. Every match, however confident, sits in front of a person until that person says yes. What used to be a search — find the transaction this line refers to — becomes a decision: confirm or reject what the system already found. The labor of searching disappears. The decision does not.
Reading Is Not Approving
A vendor invoice arrives as a photo or a PDF. The system reads it: invoice number, date, line-item amounts, the vendor's name. It checks that name against the association's vendor list and suggests which expense category the bill probably belongs to, the way a bookkeeper who has opened a hundred invoices from the same landscaper would recognize the next one on sight.
None of that creates a bill. It fills out a draft and hands it to a person, who still has to look at it and submit it as a real bill before it enters the approval queue like any other. The reading is automatic. The commitment behind it is not — and for a bill, the commitment is the part that matters. Getting the numbers off the page faster does not change who is responsible for deciding the expense was legitimate.
One Ledger, Every Report
Everything above feeds the same ledger, and the ledger is what the board packet is built from, not a spreadsheet assembled separately each month. The report catalog holds 31 reports: the balance sheet and income statement, receivables and payables aging, a delinquency report that states its own difference from the control accounts whether that difference is zero or not, the cash registers, the bank reconciliation summary, the budget-to-actual comparison, and the seven schedules an auditor asks for by name. A treasurer reading the packet in order sees cash position and the bank reconciliations first, then the statements, then the agings and delinquency, then the budget comparison, then the schedules — the same order every month, because it comes from the same source every month.
None of it is re-keyed. It is the same posted entries, read a different way for a different reader. The work a bookkeeper used to spend rebuilding by hand — pulling last month's numbers into a template, checking that the aging report and the balance sheet actually agree with each other — does not happen, because there is only one place the numbers live.
What Still Needs a Person
None of the above is automated the way a CPA's work is automated, which is to say, not at all. When the bank statement carries a transaction the matching engine cannot explain, a person has to find out why: a returned check, a fee nobody expected, a deposit that belongs to a different account entirely. When a bill trips a guard — over a spending threshold, against a vendor whose insurance lapsed, into a fund it should not touch — a person decides what happens next. The system's job is to make sure that decision gets made and recorded, not to make it. Approving an expense is a judgment about whether the association should spend the money, and no amount of automation moves that judgment onto software.
This is also where the argument stops. Everything above is the recurring, mechanical part of a bookkeeper's job: recording, matching, and reporting. It has nothing to do with a CPA's audit, review, or tax return, and it is not written for an association that already pays a CPA firm to keep its books — that firm is a partner CommunityPay hands a read-only portal to, not a role it is trying to replace. Cutting the bookkeeping labor a self-managed board does by hand is a different claim than cutting the judgment a CPA is retained for. The two should never be confused for each other.
The Part CommunityPay Still Sells
CommunityPay will, for $1,500 once, take whatever an association has today — a QuickBooks export, a set of spreadsheets, a binder — and turn it into a working chart of accounts, opening balances, and a reconciled first month, with a treasurer walkthrough before anything goes live. After that, the platform runs $1 per unit a month, with a $100 minimum, priced individually above 500 units.
That fee is not a quiet admission that a human is still required to keep the books going forward. It marks the actual boundary of what this piece is claiming. Everything described above is recurring labor — the same recording, matching, and reporting task, repeated every month for the life of the association — and automating it is what makes a flat monthly subscription, priced by unit count instead of hours worked, a real substitute for a bookkeeper's monthly retainer. Building the starting ledger is not recurring. It happens once, and it requires a person to look at whatever mess currently exists and decide how it maps onto a real chart of accounts. That is the part CommunityPay still sells, on purpose, because no amount of automation reads a binder.
The Decision Behind the Number
The claim here is not that the software is faster than a bookkeeper, though for the recurring work it is. It is that every entry behind these numbers — the dues receipt nobody typed, the bill a person approved from a suggested draft, the payment a person confirmed against a bank statement line — passed through the same posting interface and the same 18 enforcement guards before it was allowed to land, and each one left an immutable record of what was decided and by whom. Confirming most of those matches does not create anything new — it points at an entry that already passed through the same guards and says: this is the same dollar. A bank fee or interest payment is the exception: nothing was posted for it yet, so confirming that match creates the entry for the first time, through the same guards everything else already went through. I wrote about where that enforcement actually lives, down at the database layer, in Bare Metal.
That is the difference between automated and verified. Automated means the labor is gone. Verified means that even where the labor is gone, there is still a decision on record, and it can still be checked.
Scott Vuilleumier · Founder of CommunityPay, Inc.
Data science, investment banking, and financial systems engineering and ledger design.