Work sample 11 / 14Accounting clean-up

Xero clean-up and unbilled hire-day check for an equipment hire group

How I'd approach a year of loosely coded Xero invoices, duplicate customers and a paper asset log for an equipment hire group, so every asset on hire has an invoice line or sits on an unbilled hire-day report, and every change is logged.

Worked example on representative data.

Area
Accounting clean-up
Tools
Xero · Asset register · Airtable (optional)
Typical scope
US$2,000–4,000
Timeline
About 4 weeks · 4 fixed milestones

01Context

An established equipment hire group with several branches and a mixed fleet. It has a year of loosely coded Xero invoices, customers that exist more than once across branches, and an asset log kept on paper.

The systems in play

In the example the group wants to know how many hire days go unbilled, and to give the accountant a ledger that can be trusted.

Table 1Who uses what
SystemWhat it does for the business
XeroInvoices, contacts and the chart of accounts. Hire revenue, delivery and recoveries are mixed in one or two accounts.
Asset log (before)A paper log of what went out, to whom and when it came back.
Asset register (after)A table of every asset, branch and hire dates, checked against what was invoiced. An Airtable app is an optional extra that drafts hire invoices for approval.
AccountantNeeds revenue by type and branch, and needs changes to be traceable.

02Problem

What the owner sees

  1. Hire days that went out but were never invoiced
  2. Revenue that cannot be split into hire, delivery and recoveries
  3. The same customer entered at two branches
  4. No one able to say what was changed in the ledger and why

Clean-up work fails when it is done by hand with no record. Each change has to be made by rule where possible, reviewed where not, and logged.

Table 2Where the drift starts
Everyday situationWhat goes wrong
Generic codingHire, delivery, fuel and damage charges all go to one sales account
Duplicate customersTwo contacts for one customer, each with part of the history
Hire extended by phoneThe asset stays out, the invoice is not extended
Off-hire not recordedAn asset is back on the lot, but still shown as out
Transfers between branchesAn asset moves branch mid-hire and the revenue goes to the wrong one
Locked periodsAn old invoice cannot be edited, so a correction is made in the wrong place

03Approach

Four steps, in this order. Each one ends with a result that is checked.

  1. LookA read-only export of a year of invoice lines, contacts and the asset log. Nothing is changed.
  2. Agree the rulesThe target chart of accounts, the coding rules and the merge rules are written down and approved.
  3. Clean upLines are re-coded by rule with a review queue, duplicates are merged after sign-off, and the asset log becomes a register.
  4. CheckEvery asset on hire has an invoice line, or appears on an unbilled hire-day report, and every change is logged.
Table 3Coding rules agreed in writing (example settings)
If the line description containsCode to
hire, day rate, weekly rateHire revenue: equipment
delivery, cartage, pick-upDelivery income
fuelFuel recharge
damage, cleaning, missingDamage and cleaning recoveries
no rule, or more than one ruleReview queue

04What the setup includes

What the setup includes, and why each piece is there. The detail of how it is configured is agreed in the scoping call.

Show the setup, layer by layer
Table 4The setup, layer by layer
LayerWhat is set up and why
Backup and baselineA full export of contacts, invoices and reports before anything changes, so every change can be compared to the original.
Chart of accountsHire revenue split by type, with branch as a tracking category.
Re-coding by ruleInvoice lines matched to the coding rules. Lines that match none or several go to a review queue for a person.
Duplicate contactsPossible duplicates are listed with the evidence. A merge happens only after sign-off, because a merge in Xero cannot be undone.
Asset registerEach asset with branch, day rate, on-hire and off-hire dates and the invoice that covers them.
Unbilled hire-day reportFor each asset, hire days on the register compared to days invoiced. The gap is the report.
Change logEvery re-code and merge is logged with the before and after, the user and the date.

How the data moves

  1. Export and baseline
  2. Rules approved
  3. Lines re-coded
  4. Review queue cleared
  5. Duplicates merged after sign-off
  6. Register checked against invoices
  7. Unbilled hire-day report

05Edge cases

These are agreed with the accountant and tested on a copy of the data before anything is changed in Xero.

Table 5Edge cases and how each is handled
SituationHow it is handled
Invoice in a locked periodNot edited. A journal in the open period, approved by the accountant, moves the amount.
Reconciled or paid invoiceRe-coded only where Xero allows it, and the payment and bank match are left as they are
Contacts with the same name at different companiesKept separate. Matching also uses email, phone and address.
Merge of two contactsBacked up first and signed off by the owner of the account. It cannot be undone in Xero.
Hire extended after the invoiceThe extra days appear as unbilled on the report until a further invoice or an approved credit covers them
Minimum hire period or weekend rateDay counts follow the rate rules in writing, so the register and the invoice use the same count
Transfer between branches mid-hireRevenue follows the branch that held the asset on each day
Bond or deposit heldRecorded as a liability, not as revenue, and released against the final invoice
Credit noteCounted against the days it covers, so a credited day is not reported as unbilled
Invoice-number conflictsNumbers are never changed by the clean-up. A conflict is listed for a person to resolve.
Who changed whatEvery change is in the change log, with the user, the date and the reason

06Worked example

The tables below use representative data for one fleet. They show the shape of the checks, not a client result.

Table 6Re-coding run (sample data)
StepLines
Invoice lines reviewed2,400
Coded by rule2,052
Sent to the review queue348
Queue: re-coded by a person301
Queue: left as they were, with a note47
Table 7Duplicate contacts (sample data)
StepPairs or contacts
Possible duplicate pairs found126
Merged after sign-off98
Kept separate (different companies, same name)28
Contacts before1,340
Contacts after1,242
Table 8Hire days against invoices, September (sample data)
AssetBranchDay rate (US$)Hire daysDays invoicedUnbilled daysUnbilled value (US$)
A-101 Mini excavatorNorth210141400
A-114 GeneratorSouth8528217595
A-122 Scissor liftNorth140131300
A-130 TrailerEast6016106360
A-141 CompactorSouth957700
A-150 Light towerEast120110111,320
Total8965242,275

07How the result is checked

Each stage has its own check, and the change log lets the accountant compare any figure to the baseline.

Table 9Checks and pass conditions
CheckHowPass condition
Totals unchangedInvoice totals and tax before and after re-codingEqual. Only the account and tracking change.
CoverageEvery invoice line compared to a rule or a review decisionNo line left uncoded
MergesContact history before and after each mergeEvery invoice still belongs to one contact
Register to invoicesHire days on the register compared to days invoicedEvery on-hire asset has an invoice line or sits on the unbilled report
Accountant reviewA sample of changes compared to the baselineDifferences explained
Change logEvery change has a before and afterComplete

08Scope and milestones

A fixed scope agreed in writing before anything starts. Each milestone is paid when you sign off its deliverable.

Table 10Scope: what a project like this covers
AreaIncluded
Health CheckRead-only export and review of invoices, contacts and the asset log, a 45-minute call, written findings and a fixed quote
RulesTarget accounts, coding rules and merge rules, approved in writing
Re-codingInvoice lines re-coded by rule, with a review queue
ContactsDuplicates listed, merged after sign-off, with a backup first
Asset registerBuilt from the paper log and checked branch by branch against invoices
Unbilled reportA hire-day report and a repeatable weekly check
Optional extraAn Airtable app that drafts hire invoices for approval, quoted separately
HandoverWritten SOPs, a recorded walkthrough and files you own, plus 14 days of fixes after go-live
Not includedTax filing or payroll.
Also outside the scopeChanging past tax or filings. Moving to different accounting software. Software subscriptions (billed to you by the vendors).
Table 11Fixed milestones
MilestoneDeliverableTimingShare
M1 Health Check and rulesFindings, a fixed quote, backup and rules in writingWeek 120%
M2 Re-coding and review queueLines coded by rule, queue cleared, change log in placeWeeks 2 to 335%
M3 Contacts and registerDuplicates merged after sign-off, register builtWeek 330%
M4 Unbilled report and handoverReport, SOPs, walkthrough, 14 days of fixesWeek 415%

Typical scope for this kind of project: US$2,000–4,000

About 4 weeks across 4 fixed milestones. The Systems Health Check (US$300, fixed) comes first and confirms the scope.

Describe what is going wrong between your job system and your books, and I'll say where I'd look first.

Send a short note through the form on the home page. I will reply with where I would start, and whether the US$300 Systems Health Check is the right first step.