PBooksPro is now BuilderOnesame company, same team, a much bigger product. What this means

BuilderOne

Property accounting

A chart of accounts for a property developer

A property developer’s chart of accounts has to hold things a trading company’s never does: retention owed to contractors, advances paid to them, deposits held for tenants, money owed to property owners, and capital put in by project investors. This is one way to structure it, using the chart BuilderOne seeds as the example — not as a rule.

Last revised

What is different about a property developer’s books

A trading company’s chart of accounts is mostly about stock, sales and overhead. A property developer’s has to hold balances a trading company never sees: money paid to contractors before they have done the work, money withheld from contractors after they have, deposits that belong to tenants, rent collected that belongs to property owners, and capital that belongs to the investors in a particular project. Each of those is somebody else’s money passing through the business, and each needs an account that says so.

The other difference is dimension. A developer wants every one of those balances by project, and often by property or unit. That is not a reason to create a set of accounts per project — see why a project dimension beats accounts-per-project — but it does shape what the accounts themselves need to be.

The seeded chart, as an example

When a company is set up in BuilderOne’s Accounting module it receives a default chart: headers to group, posting accounts to post to, and control accounts that only governed postings may touch. Codes are four digits by convention; the structure is what matters.

The seeded default chart of accounts
CodeAccountKindWhat posts here
1000Assetsheader
1100Current Assetsheader
1110Cash on HandpostingPetty cash and cash receipts.
1120BankpostingBank accounts; each treasury account is linked to a GL account.
1140Advances to ContractorspostingMobilisation and material advances paid, recovered against bills.
1150Owner ReceivablepostingWhat a property owner owes the business when charges exceed collections.
1200Accounts ReceivablecontrolCustomer invoices (instalments, rent) until collected.
1300Non-Current Assetsheader
1310Fixed AssetspostingThe asset register’s ledger side.
2000Liabilitiesheader
2100Current Liabilitiesheader
2110Accounts PayablecontrolContractor and vendor bills accrued, until paid.
2140Tenant Security DepositspostingDeposits held for tenants — never income.
2160Retention PayablepostingRetention withheld from contractor bills, until released.
3000Equityheader
3100Share CapitalpostingThe owners’ capital.
3200Retained EarningspostingAccumulated results.
3300Opening Balance EquitypostingThe balancing side of opening balances at migration.
3400Investor EquitycontrolInvestor capital and allocated profit, by investor and project.
3450Investor Profit Allocation ClearingcontrolThe debit side of a profit allocation, cleared by payout.
4000Revenueheader
4100Sales RevenuepostingInstalment and rent invoices.
4150Owner Service Charge IncomepostingThe management charge to property owners.
4160Tenant Service Charge IncomepostingService charges billed to tenants.
5000Expensesheader
5100Cost of SalespostingProject cost: contractor bills, vendor bills, owner cost.
5200Operating ExpensespostingOverheads.

Modules add their own accounts when first used — HR & Payroll seeds its payroll payable, Project Management its fee accounts — and every module’s posting adapter can be mapped to a different account than the default. The seeded codes are a shared contract: a code the template uses is one a module can rely on, which is also why a new account is added at a free code rather than a convenient one.

The balances that are not the business’s money

Four accounts in that chart exist because the business holds money for someone else, and the discipline of a developer’s books is keeping each of them clean:

Third-party balances and how each moves
BalanceIncreases whenDecreases whenNever
Advances to Contractors (asset)An advance is paid: Dr 1140 / Cr Bank.A certified bill recovers it: Dr Accounts Payable / Cr 1140.Charged to project cost — the cost comes with the bill, not the advance.
Retention Payable (liability)A hold is applied to a certified bill: Dr Accounts Payable / Cr 2160.A release is paid: Dr 2160 / Cr Bank.Treated as income or as a reduction of cost.
Tenant Security Deposits (liability)A deposit is received: Dr Bank / Cr 2140.Refunded or applied at the end of the tenancy.Recognised as rent or as owner money.
Owner Receivable / owner payableCharges to an owner exceed collections on their behalf.The owner is paid out or pays in.Netted invisibly against the business’s own revenue.

The contractor billing guide walks the first two through a worked example; the owner statements guide covers how an owner’s balance is derived from six sources rather than stored.

Project cost: expense account plus project dimension

The seeded chart has no work-in-progress asset account, and that is a deliberate starting position rather than an oversight. A certified contractor bill posts its debit to a cost-of-sales or expense account — 5100 by default — carrying the project on every line. The project’s accumulated cost is therefore a question the ledger answers by dimension (cost of sales, filtered to Project A) rather than by account (a “WIP — Project A” balance).

Whether that cost should instead be carried as an asset until units are sold is an accounting-policy decision, and one the chart can accommodate: add a WIP account under current assets and post to it through a manual journal. What the product will not do is make that decision for you — see what BuilderOne does and does not do about WIP.

Designing your own: five rules

  1. Separate control accounts from posting accounts. Receivables, payables and investor equity should only ever be moved by the documents that own them; a manual journal to a control account is a reconciliation break waiting to happen. BuilderOne restricts ungoverned manual posting to control accounts for exactly this reason.
  2. One account per kind of obligation, not per counterparty. “Retention Payable — ABC Contractors” multiplies with every contract; one Retention Payable account with the contractor on the document does not.
  3. Put projects, properties and departments on the line, not in the code. Dimensions filter; accounts classify. Mixing them is how a chart reaches four hundred accounts nobody can map to a statement.
  4. Give migration its own equity account. Opening balances loaded at cutover need a balancing side that is obviously transitional — Opening Balance Equity — so it can be cleared, not hidden in retained earnings.
  5. Keep the seeded codes stable. Module defaults, report mappings and other companies in the same system depend on them; add new accounts at free codes and remap a module rather than renumbering.

See it on your own numbers

The fastest way to judge whether this is how your software should work is to put a real project through it. Tell us what you run and we will set your company up.