Chasing Your Own Debtor Book
Pull five fields, sort into four buckets, rank by amount at risk, and leave every call with a date. Free to implement, with everything you need below. Or skip the build: every business with a debtor book does this, so we built the standard into a product, Get Paid on Office Voice.
Used by
- Accounts Receivable Officer
- Bookkeeper
- Office Manager
- Finance Manager
Written by Andrew, AI Pathway · CC BY 4.0 · Not legal advice
Using Claude? This standard installs as a skill. Guides for ServiceM8, Xero and Simpro.
How to get this live in your business
Done for you: Get PaidDebtor chasing is common enough that we built this standard into a product. Get Paid does it for you on your Xero book.The build
Pull, sort, rank, open. Five fields, four buckets, amount at risk, and one question that takes a date.
The hard part
Not the automation. A promise to pay has to become an object with a date on it, or the follow-up is guesswork.
Where to stop
The moment it rings somebody. Calling hours, the register, disclosure and a record that survives.
Honest caveat
A self-built version works and is worth building. It stops working the week the person who built it takes leave, which is section 8.
Nobody has a receivables problem because they forgot to send a reminder. They have one because the reminders went out, were ignored, and nothing happened next. The gap is not the email. It is that the follow-up after the email needs a person, and the person has a day job.
The method, end to end
- Start with the aged receivables export.
- Pull five fields.
- Sort into four buckets.
- Rank by amount at risk.
- The gate, which is the part we sell: cleared to ring? If no, there is no call and the reason is on the record. If yes, continue.
- Call: disclose, then one question.
- Date agreed? If yes, the promise is recorded with a date on it and the run ends. If no, schedule the next touch with a date, which goes back through the gate before it rings.
Take the spec to Claude, ChatGPT or Copilot. The sentence to paste is one click away.
Done for you: Get Paid
Every business with a debtor book does this job, so we built this standard into a standalone product: Get Paid on Office Voice. It reads your Xero debtor book, rings each customer on a real line inside the gate in section 10, and records what was agreed as a date. It is held to the pass test in section 12 like any other build.
What it does today
- Rings customers with invoices 30 or more days overdue, one call per customer covering every invoice they owe, on a real Australian line, and says it is an AI at the start of every call.
- Holds calling hours (9am to 8pm weekdays, 9am to 5pm Saturdays, no Sundays) in the debtor’s own state, and that state’s public holidays.
- Re-reads every invoice from Xero just before the dial. A paid, voided or deleted invoice is not rung, and the audit row names the read.
- Checks promises, disputes and opt-outs again just before every dial, and records a promise to pay as a date, with the follow-up moved to it.
- Reads the balance out, can text a payment link mid-call, and captures a dispute for a person.
- Places your list in your order when you send one, and keeps a recording and a record of every call.
Start a 30-day free trial, connect Xero and switch Get Paid on; prices are on the pricing page. If you would rather we set it up for you, that is a fixed-price set-up: pick a time.
Rather build it yourself? Everything you need is below, free. Joining it to your own inbox, ledger or a bigger workflow? See joining it to your own system. Get Paid is held to the pass tests on this page like anything else.
1. What You Actually Need Off the Ledger
Export the aged receivables report and ignore most of it. Five fields carry the method:
- Customer. The unit of the conversation. Not the invoice, which is the mistake in section 3.
- Amount outstanding, per invoice. You need them separately to talk about them, and summed to rank.
- Days past due. Off the due date, not the issue date. A 30-day account issued four weeks ago is not late.
- A mobile number. The field that decides whether any of this is workable. Most ledgers hold a billing email and an office landline, which is the wrong end of the building.
- Last contact, and what was said. Almost never in the ledger. Section 5 is about making this exist.
Run the coverage check before anything else. If two thirds of your overdue rows have no mobile, you do not have a chasing problem yet, you have a data problem, and the fix is a field on the account-setup form rather than anything on this page.
2. Four Buckets, Not One Reminder Run
A single overdue list treats a customer who is four days late the same as one who broke a promise in June. They need opposite conversations.
- Just late, 1 to 14 days. Almost always an oversight: the invoice is in someone’s inbox behind forty others. A short, friendly nudge clears most of it, and the tone matters more here than anywhere else because these are customers who are about to pay you.
- Drifting, 15 to 44 days. The bucket that decides your debtor days. Nothing is wrong yet, which is exactly why nobody deals with it, and it is the one that quietly becomes the 90-day problem.
- Hard, 45 days and over with no contact logged. Something is going on and you do not know what. The job of the first call is to find out which: cash flow, a dispute nobody told you about, or a purchase order you never had.
- Broken promise. A date was given and it passed. This outranks every other bucket, because it is the only one where you already have a commitment to refer back to, and referring back to it is most of the call.
3. Which Invoice Gets Chased First
This is the section that matters, and the one most builds get wrong twice.
The first mistake is ranking by age. Age tells you how bad a row is. It does not tell you what fixing it is worth. A three-month-old $400 invoice will always sort above a three-week-old $40,000 one, and you will spend your week on the wrong end of the book. Rank by amount at risk, and let age break ties.
The second mistake is ranking invoices instead of customers. One customer with six overdue invoices is one conversation, not six. Ringing them six times is how a collections process turns into a complaint, and it also loses you the only leverage you have, which is the total.
One more rule, and it is a judgement rather than a formula: flag any customer whose balance is a large enough share of the book that chasing them is a relationship decision. Those are not collections calls and should not be automated. Someone who knows the account rings them.
4. The Opener Decides Whether You Get a Date
The purpose of the call is not to be paid on the call. It is to leave with a date. Everything in the opener should serve that.
- Name the invoice and the number. Vagueness reads as a mass mailout and gets treated like one.
- Say how far past due, without editorialising. “Thirty-eight days” is a fact. “Significantly overdue” is an opinion they can argue with.
- Ask one question that takes a date as an answer. “When can we expect it?” beats “Can you pay this?”, which takes yes or no and gets you neither.
- Do not apologise for calling. You are asking for money you are owed.
- Do not mention interest, fees or consequences unless they are real, written into your terms, and you intend to apply them. An empty threat is worse than no threat and it is the fastest way to a dispute.
The most useful thing an opener can do is make it easy to say the real reason. A large share of “we will get to it” is actually a dispute, a missing purchase order, or an invoice that went to the wrong person, and none of those get solved by another reminder.
Builders: the same call, on a stage invoice. Name the stage and the invoice number, say how many days past the date on it, and ask for a payment date. The call does not price anything, does not approve a variation, and does not go near anything under Security of Payment, which stays with you and your advisor. An unsigned variation is chased for the signature before the work starts, on its own call.
5. A Promise Is an Object, Not a Feeling
This is the part that separates a build that works from one that feels busy. When somebody says they will pay, that has to become a record with fields, not a sentence in a note:
- An amount, which may legitimately be empty. “I will sort it this week” is a real outcome with no number in it, and forcing a number invents one.
- A date. The whole point. No date means you did not get a promise, you got a deflection, and the follow-up should be scheduled accordingly.
- A method, if offered. Bank transfer, card link, cheque in the post. It tells you when to stop expecting it.
- When it was captured, so a promise made in March is not still driving behaviour in June.
Then the promised date becomes the follow-up date. This sounds obvious and it is the single most common gap: a system records the promise, leaves the chase schedule where it was, and rings the customer the next morning anyway. Nothing destroys the credibility of an automated chase faster.
And a promise has to survive the next conversation. If a dispute was logged in April, a promise recorded in May must not overwrite it.
6. What It Is Worth
Directions, not figures. The standard derives no numbers, so these name which levers move. How far they move will differ on your own ledger, starting with how many overdue rows carry a mobile number.
Every one
Overdue row in one of four buckets
Just late, drifting, hard, and broken promise. Broken promise outranks every other bucket.
Amount first
Ranked by amount at risk
Age tells you how bad a row is. Amount tells you what fixing it is worth, so age only breaks ties.
A date
On every promise to pay
A promise becomes a record with a date, and that date becomes the follow-up date, not tomorrow.
The largest gain is the drifting bucket, the 15 to 44 day rows where nothing is wrong yet, which is why nobody deals with them and why they become the 90 day problem.
7. Parts That Are Harder Than They Look
Not warnings. These are the four places a working build usually stalls, so you can recognise them as normal rather than as a sign you got it wrong.
- Mobile coverage is the binding constraint. Ledgers hold billing emails and office landlines. The fix is upstream, on the account-setup form and in conversation, and it takes months to pay off, which is why section 1 says check it first.
- Part payments break your buckets. A customer pays half. Is that invoice still overdue, still the same age, still the same bucket? Decide before it happens, because it will happen in the first week.
- Disputes hide inside “we will get to it”. Until you capture the reason, your aged report says the problem is time when it is actually a missing purchase order or a job somebody is unhappy with.
- Stop-on-payment is harder than it sounds. Off a nightly export you will ring somebody the morning after they paid, and that single call costs more goodwill than the other forty earned.
8. What Breaks After It Works
This section is the honest one, and it is the reason a build standard is worth publishing at all. A self-built version of everything above genuinely works. Here is what happens to it over time.
- It leaves with whoever built it. The rules live in one person’s head and one spreadsheet under their login, and this is a role that turns over.
- Nobody knows whether it ran. A quiet week and a broken week look identical from the outside. Receivables is the worst place for that, because the number moves slowly enough that you will not notice for a month.
- It degrades without failing. An export changes a column name, the broken-promise bucket matches nothing, and the system cheerfully reports zero broken promises. A false negative is worse than an error, because an error gets looked at.
- The gate is the first thing to rot. Not because anyone removes it, but because a holiday table goes stale, or a new workflow is added beside it rather than under it, and nobody re-runs the pass test in section 10.
None of that is an argument against building it. It is an argument for knowing which parts you want to still be true after you stop paying attention to them.
9. What Stays With a Person
Not a conservative default. Each of these is a decision where being wrong costs more than the call was ever worth, and none of them gets better for being made quickly.
- The relationship-sized account. Section 3. If chasing them is a commercial decision about the account rather than a collections call, someone who knows the account rings them.
- Any dispute, the moment it is named. The job of the automated call is to find out that one exists and to stop. Arguing the merits of a job somebody is unhappy with is not a chase.
- Interest, fees, stop-credit and anything resembling a consequence. Only if it is real, written into your terms, and you intend to apply it. That is a judgement about the customer, not a field.
- Write-offs, payment plans and hardship. A plan is a new agreement. Recording one somebody else made is fine; making one is not.
- Every exception to the gate in section 10, named, with whose authority, in the record.
- Anything a lawyer would call a demand. Collections escalation is a regulated conversation and it is not this.
The machine does not decide any of the above. It finds them, stops, and hands over with what it already knows.
10 · The gate as a service · This is the part we sell
Everything above is a weekend of work. This part is not, and the reason is not difficulty.
You should build it. Each of these, though, is a rule that has to hold on every single contact, including the one made at 8:04pm by a script nobody has looked at since March.
- Calling hours in the debtor’s timezone, not yours and not the server’s. Australia has three, and more in summer.
- The Do Not Call Register, and knowing which of your debtors are exempt and why. An existing-business-relationship exemption is real and it has to be recorded as claimed, not assumed.
- Public holidays, which are per state and are not a lookup you want to maintain by hand.
- Disclosure when the caller is an AI, every time, at the start.
- A stop on payment. The invoice clears at 9am and nothing should ring at 10. This needs to be driven off the ledger, not off a nightly export.
- A record that survives: what was said, when, on whose authority, and which human approved any exception.
The gate has to sit underneath the ranking, not beside it. If a high score can promote a debtor past a check, the check is advice rather than a rule, and the first time that matters will be the time somebody is looking.
You can build this. What you cannot easily build is the part where it is still true in eight months, after the model changed, the script was edited by someone else, and the person who wrote the gate moved on.
Where the Office Voice gate stands today. AI disclosure at the start of every call, the Do Not Call Register, and calling hours of 9am to 8pm on weekdays and 9am to 5pm on Saturdays, nothing on Sundays, judged in the debtor’s own state (from the Xero contact’s region or postcode; where neither is known, your business’s timezone, with an audit row saying so). Every invoice is re-read from the ledger at dial time: one paid, voided or deleted since it was queued is not rung, and the audit row names the read. Public holidays are blocked for the debtor’s state, national and state.
The pass test. Take your top-ranked debtor, mark the invoice paid in the ledger, and let the chase run anyway. They must not be rung, and the audit trail must tell you why not. Run it again with the invoice still open and the clock at 8:30pm, and it must hold until morning. Both take a minute to stage from your own data. Run the same two against whatever you built yourself, and against any provider, us included. If it rings, the gate is advice rather than a rule, which is this section in one sentence. Office Voice today holds the 8:30pm run. It does not yet pass the paid-invoice leg on its own: see the note below.
11 to 13 · Build it
Hand this half to whoever is building
The method above is yours whatever you decide. This is what the hosted call does and does not do today, the shape of the run, and the checklist to hold the result to.
11. Join It to Your Own System: Hand Over the Call
Everything above leaves you with a ranked list and an opener for each name. If you want the calls made by Office Voice, which holds the parts of the gate in section 10 that are marked as held, you send it the names and it queues the calls. Build against a stub first. The conformance kit has no live mapping for this standard yet, so the provider line below does not switch your run to a live line. Not yet.
Calls are placed in the order you send them, so your ranking stands. A promise, a dispute or an opt-out is checked again just before every dial, including a call already queued when the promise arrives. The queue matches invoices 30 or more days overdue; a name you send with nothing that old comes back as unmatched and is not called.
For your developer. Show the provider config and key scopes
provider: stub: local.mock_ledger production: office_voice.recover # Office Voice / Recover, sold as Get Paid default: stub # no live mapping in the conformance kit yet scopes: contacts:read the open book: what is outstanding and still needs a decision contacts:write record a promise to pay. Contacts nobody campaigns:read chase runs, and how many were skipped campaigns:initiate queue the calls. Off by default on a new key audit:read read back why each contact was or was not lawful
Keys are minted in the product, by an account owner. If you are a bookkeeping or accounting practice, one key reads your whole client book, and you can narrow a key to named client orgs when you create it. That narrowing only ever subtracts: an org that later leaves the account stops being reachable by an old key. Connecting an account does not grant campaigns:initiate. To queue calls, mint the key at office-voice.com/app/keys with that scope switched on.
For your developer. Show the API commands
# What is still open, across every client org the key reaches.
curl -H "Authorization: Bearer ovk_live_..." \
"https://office-voice.com/api/v1/contacts?kind=lapsed_promise&limit=100"
# The debtor rang YOUR office and gave a date. Send it back, so the
# follow-up moves with it and no call rings before that date, including
# calls already queued through the API.
curl -X POST https://office-voice.com/api/v1/promises \
-H "Authorization: Bearer ovk_live_..." \
-H "Content-Type: application/json" \
-d '{"tenant_id":"...","thread_ref":"INV-1042","amount":2400,
"date":"2026-09-30","method":"bank_transfer"}'
# Queue calls for named customers in one client org, in your ranked order.
# Needs campaigns:initiate. Only invoices 30+ days overdue match; anything
# else comes back as unmatched.
curl -X POST https://office-voice.com/api/v1/campaigns \
-H "Authorization: Bearer ovk_live_..." \
-H "Content-Type: application/json" \
-d '{"tenant_id":"...","query_key":"invoices_overdue_30d",
"customer_external_ids":["...","..."]}'Dialling stays in the product, and every queued call goes through the gate at dial time: AI disclosure, DNCR, calling hours in the debtor’s own state, and a fresh read of the ledger and of any promise. A single named customer also needs a basis (callback, existing_job, existing_invoice or they_asked). The full reference is at office-voice.com/help/api.
12. The Run, Step by Step
Everything above, in the order a build actually does it. Steps 1 to 7 are yours whatever you decide about section 11. Step 8 is the one that decides whether any of it may happen.
- Pull the five fields in section 1. Run the mobile coverage check before anything else, and stop here if it fails.
- Drop every row that is not past its due date. A 30-day account issued four weeks ago is not late.
- Sort each invoice into one of the four buckets in section 2.
- Collapse invoices to one row per customer, summing what they owe. One customer is one conversation.
- Rank by amount at risk, with age breaking ties. Never by age alone.
- Lift any customer whose balance is a relationship-sized share of the book out of the automated run entirely.
- Draft the opener for each row: the invoice number, the days past due as a fact, and one question that takes a date as an answer.
- Run the gate in section 10 on every row at dial time, underneath the ranking and never beside it.
- Make the call, or write the ranked list out and make them yourself.
- Record the outcome as the promise object in section 5, with a date, or as the reason there is no date.
- Move the next follow-up to the promised date. Not to tomorrow.
- Stop on payment, driven off the ledger rather than a nightly export.
13. A checklist to hold any build or supplier to
Hold a DIY build or a vendor to this. If a box is empty, it is not in production.
- 1. Mobile coverage was checked first. You know what share of the overdue book is reachable, and it was measured before anything was built.
- 2. Overdue is measured off the due date. Not the issue date. Terms are respected before a single row is called late.
- 3. Four buckets, not one list. Just late, drifting, hard, and broken promise. A four-day-late customer and a June broken promise get different conversations.
- 4. Broken promise outranks everything. It is the only bucket where a prior commitment exists to refer back to.
- 5. Ranking is by amount at risk. Age breaks ties and nothing else. A build that sorts by age is chasing the wrong end of the book by design.
- 6. One customer is one conversation. Invoices are summed per customer before ranking. Nobody is rung six times for six invoices.
- 7. Relationship-sized balances are out of the run. Flagged, excluded, and routed to a named person rather than scored.
- 8. A promise is an object with a date. Amount may be empty, date may not. Captured with a timestamp, and it does not overwrite a logged dispute.
- 9. The promised date is the follow-up date. The schedule moves with the promise. Nothing rings the next morning anyway.
- 10. The gate sits underneath the ranking. Calling hours in the debtor's timezone, the Do Not Call Register with the exemption recorded as claimed, state public holidays, AI disclosure, and a ledger-driven stop on payment. No score promotes a row past any of it.
- 11. Exceptions are named and attributable. What was said, when, on whose authority, and which human approved the exception.
- 12. The pass test passes. Section 10. A paid invoice does not ring and the audit says why; an 8:30pm run holds until morning.
- 1
Hold the build to the checklist
The checks in this standard are what a working build looks like. Implement it yourself, hand it to a developer, or hand the page to an AI with the button below.
- 2
Do not hand-roll
Office Voice is the step not to hand-roll: live Xero on the call, a payment link mid-conversation, promise-to-pay tracked.
- 3
If you are stuck
Exceptions, three systems, a team that will not maintain a Zap, or an owner who wants it done. We implement when it has to survive the business.
Building this on Microsoft 365: the lists, the flows and the measures.
Facts that can change, and when we checked them
Checked as at 18 September 2026
Do Not Call Register Act 2006 (Cth), administered by ACMA. A calling list must be washed against the register within 30 days before it is called, and a wash result is good for 30 days from when it is returned. The obligation sits with the business making or commissioning the calls, so outsourcing the dialling does not move it. Keep the evidence of every wash: an unevidenced wash and no wash look identical afterwards.
Security of payment: the response window is per state and it moved this year. A payment schedule is due within 10 business days in NSW, Victoria, Tasmania and the ACT, and 15 in Queensland, WA and South Australia (Queensland: 15 for commercial building contracts, 25 for subcontracts and trade contracts), or any earlier deadline the contract sets.
Victoria changed on 15 April 2026 under the Building Legislation Amendment (Fairer Payments on Jobsites and Other Matters) Act 2025: excluded amounts and reference dates gone, the claim window extended to six months after the work finishes, and payment capped at 20 business days, for claims served on or after that date. Any build carrying pre-April Victorian numbers is wrong today and says nothing about it.
“Business day” is itself jurisdictional. Queensland and, since April 2026, Victoria exclude the industry shutdown from 22 December to 10 January; NSW and Tasmania exclude 27 to 31 December only. A single working-day calendar in the code is wrong in some states every January.
Check these against the primary instrument before you rely on them, and store the date you checked beside the value rather than hard-coding it. This standard tells you the shape and where to look. It is not legal advice and it does not tell you that anything complies.
Not ready to talk yet?
Leave your email and we’ll send this paper to your inbox, with a link to the rest of the library. We publish a new one every few weeks and you’ll get those too, one click to stop them.
Your email is used to send you the papers and nothing else. We don’t share it.
Related reading: chasing overdue invoices and accounts receivable automation.