Working Your Own Database
The method, not the pitch. Everything below is what we would build, written so you can build it instead.
Used by
- Sales Administrator
- Business Development Manager
- Sales Associate
Published by AI Pathway
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: the daily call list sheetA free Google Sheet that makes this list every morning. Copy it, paste your export, work the Today tab.The build
Export five fields, split into four plays, rank inside each one, and write an opener with a reason in it.
The hard part
Not the automation. It is the ranking, because the list is always longer than your capacity to call it.
Where to stop
The compliance gate and the record. Everything above it is a weekend. That step is a liability with a phone number attached.
Honest caveat
A self-built version works. It stops working when the person who built it leaves, which is section 11.
Most agents are sitting on a list they paid to acquire and have never worked. The reason is almost never the idea. It is that the list is longer than the day, so without a rule for who to ring first you ring whoever is at the top of a spreadsheet, get four polite nothings, and stop.
The method, end to end
- Start with the whole database export.
- Pull the five fields that carry the method: name and mobile, address, purchase or settlement date, last contact outcome, and whether they are an investor or owner-occupier.
- Run four plays, each with its own trigger, rather than one campaign across the whole list.
- Rank which contact rings first. The ranking orders, it never permits: a score decides who is called first, never whether someone may be called at all.
- The gate, which is the step not to hand-roll: cleared to call? If no, there is no call and the reason is on the record.
- If yes, make the call. The opener is the whole call.
- Appointment agreed? If yes, the appraisal is booked with a date on it. If no, that no buys months rather than a removal, the outcome is written back, and the next touch comes back through the gate.
Take the spec to Claude, ChatGPT or Copilot. The sentence to paste is one click away.
1. The Five Fields That Matter
Export the whole database, then ignore most of it. Five fields carry the method:
- Name and mobile. A landline is not a warm contact, it is a switchboard.
- Address. Everything in section 3 hangs off resolving this to a property.
- Purchase or settlement date. The single highest-value field and the one most likely to be missing.
- Last contact outcome. Not the date, the outcome. “Asked me to call back in spring” is worth more than every other field combined.
- Investor or owner-occupier. Only if you actually know. Guessing produces the worst call in section 2.
If purchase date is sparse, do not stop and do not estimate it. Flag the gap, run the other plays, and capture the date in conversation when you do get someone on the phone. A database fills itself in if the calls write back to it.
2. Four Plays, Not One Campaign
A single “are you thinking of selling” campaign across the whole list is the version that fails, because it has no reason to be calling any particular person today. Four plays, each with a trigger:
Tenure / home anniversary
- Trigger:
- A date rule against purchase or settlement date, swept daily.
- Who:
- Prioritise the 5 to 9 year band, where move probability peaks.
- Angle:
- You have been there X years and the market has shifted. Want to know what it is worth now?
- Why it earns its place:
- The only play that replenishes itself. Every day, someone crosses into the band without you doing anything.
Past-buyer equity check-in
- Trigger:
- A comparable sale nearby moves their likely equity.
- Who:
- Anyone who bought through you, weighted to the ones whose suburb has moved most.
- Angle:
- Your place has probably moved in value. Want the numbers?
- Why it earns its place:
- Give value first. It reconnects on the purchase you were part of, so there is a real reason for the call.
Investor re-activation
- Trigger:
- A yield shift, or a sweep of contacts you already know are investors.
- Who:
- Flagged investors only. Do not guess who is one.
- Angle:
- Gross yields are the strongest in years. Want first look at the right stock before it hits the portals?
- Why it earns its place:
- Buyer-forward. The win is a buying brief, not a listing, which is a different and easier yes.
Lapsed appraisals and past clients
- Trigger:
- An appraisal that never converted, or a client you have not spoken to in a year.
- Who:
- Appraisals first. They raised their hand once already.
- Angle:
- Nothing clever. Ask what changed since you last spoke.
- Why it earns its place:
- Highest intent in the database and the fastest to exhaust, so it is the worst play to build first.
Build the tenure play first even though lapsed appraisals convert better. Appraisals are a finite pile you will work through in a fortnight. Tenure is a queue that refills every morning on its own.
3. Which Contact Rings First
This is the part people skip and it is the part that decides whether any of it works. You cannot call fifty thousand people. You can call some number per day, so the only question that matters is which ones. Six rules, in order of weight:
Engagement state dominates everything
Someone who asked for a callback outranks a cold contact, always, whatever the other signals say. State is the strongest predictor you have and it came from a human, not a model.
Boost: a fresh sale nearby
The strongest opener hook there is, because it gives you something currently true to say. A call with a reason lands differently from a call with a script.
Boost: the tenure sweet spot, roughly 7 to 12 years
Long enough that the house no longer fits, recent enough that they remember buying it.
Demote: a recent no
Someone who pushed back last month goes to the bottom, not out. Churning them is how a warm database becomes a cold one.
Recency breaks ties only
It can never leapfrog a warmer contact. If recency is doing real work in your ranking, you have built a most-recently-imported list, not a priority list.
Ranking orders, it never permits
This is the one that matters. A score decides who is called first. It must never decide whether someone may be called at all. Keep the gate in section 6 underneath the ranking, where no score can reach past it.
Keep the weights in one place, as plain numbers you can read. The point of an explainable score is not elegance, it is that in six months you will want to know why a particular person was called on a particular Tuesday, and a model that cannot answer that is a model you will stop trusting.
4. The Opener Is the Whole Call
People decide to sell when their own circumstances line up: the kids move out, retirement arrives, equity appears that they did not know about. Nothing you say creates that. The call’s job is to make someone curious enough to start thinking about their own situation out loud.
The call opens the conversation and that is all it does. A price, an offer, a complaint, or a question the play was not built for goes to a person, with the reason written down, rather than being answered on the call.
Dead end
“Are you thinking of selling?”
It asks for a decision they have not made yet, so the honest answer is no, and once someone says no they defend it.
A hook
“Did you see what the place on your street just went for?”
It asks nothing, it is currently true, and the natural reply is a question back.
Write two openers per play, not one, and alternate them by contact so the split is stable. You will be wrong about which one works, and one opener gives you no way to find out. Keep the difference real: a tenure-led open and a sale-led open are worth comparing, two rewordings of the same sentence are not.
5. Cadence, and When to Stop
A warm database is an asset that a bad cadence converts into a cold one. Five rules hold it together:
- One play at a time. A contact who qualifies for two plays sits in one of them, and gets at most one opener a week. Two plays ringing the same person in the same week is how a warm contact learns you are running a list.
- Every sequence has a defined end, and a reply ends it. The calls and openers in a play stop at a set step whether or not anyone answered. A reply stops them at once, and nothing further goes out from that sequence.
- One slow value touch a month for contacts who are mid-journey and quiet. Something worth reading, not a check-in. This is a separate, low-frequency track, not the tail of a sequence, and a reply or an opt-out ends it too.
- A no buys months, not a removal. Demote, wait, come back with a different play. The tenure call and the equity call are different conversations, and a no to one is not a no to the other.
- Write every outcome back. A call that does not update the record is a call you will make again, and the second time it is not warm, it is annoying.
6. The Gate, Which Is the Step to Not Hand-Roll
Everything above is a weekend’s work and you should do it. This part is not, and the reason is not difficulty. Each of these is a rule that has to hold on every single call, including the one made at 8:04pm by a script nobody has looked at since March.
- Warm only. A contact with no prior relationship is a cold call wearing a warm list’s clothes.
- Do not contact, honoured across every play. An opt-out is a decision about you, not about one campaign.
- Calling hours in the contact’s timezone, not yours, and not the server’s.
- The Do Not Call Register, and knowing which of your contacts are exempt and why.
- Disclosure and recording consent where required, on the call, every time.
- A record that survives: what was said, when, and by what authority you rang.
The gate has to sit underneath the ranking, not beside it. If a high score can promote a contact past a check, then the check is advice rather than a rule, and the first time it 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.
7. The Daily Call List: Who Do I Ring Today?
Every morning the ranked run becomes a short list for you, not a campaign. It holds no more people than the number you set, because the number you will actually ring is the only honest cap. Each row says who, which play, why today, a drafted opener for you to say or send, and what happened last time.
One row of the list
- Who:
- Sam, 0412 345 678
- Play:
- Tenure
- Why today:
- 9 years since you bought 12 Smith St
- Opener:
- Hi Sam, it is Jo. It has been 9 years since you bought 12 Smith St, and the market has shifted since. Curious what it is worth now?
- Last time:
- Spoke in March, said not yet
- You mark:
- accept, skip or done, and what happened
- Things to sort out sit on top. A reply waiting comes first, because someone who answered you outranks anyone you might ring. Then a do-not-contact conflict, such as an opt-out that a fresh export has quietly cleared. Then a contact missing a name, mobile or address. None of these is ever on the list itself.
- Three buttons a row: accept, skip, done. Accept means you are on it today. Skip keeps them off for a few days. Done asks what happened: spoke, no answer, left a message, call me back, not interested, appraisal booked, do not contact, wrong number.
- Outcomes go back the same day. Whatever you mark is written to the CRM or the sheet that evening, and tomorrow’s list is made from it. The person you spoke to today is not on tomorrow’s list; the person who asked for a call back is at the top of it; an opt-out never comes back. A list that looks the same every morning is a list nobody is writing back to.
- You make every call and every send. The list drafts, it does not dial. The optional call in section 8 only ever rings a contact who asked to be rung back, and only if you turn it on. It is off unless you do.
The list is checks 11 and 12 below: the day’s list respects the cap and carries a reason on every row, and yesterday’s outcomes change today’s list. The gate in section 6 sits under the list exactly as it sits under the ranking: a do-not-contact flag keeps someone off it whatever their score.
Three ways to run it
In the tools you already use
The list lands as tasks in your CRM if it takes tasks, as a morning email to yourself, or as the Today tab of a shared Google Sheet. Outcomes go back the same way: the task closed with a note, a reply to the email, or a dropdown on the sheet.
A personal dashboard
Ask your coding agent to build a one-page dashboard against this standard: the list on top, exceptions above it, three buttons a row. It reads your CRM export or the sheet, and it writes the outcome back before you close it.
A bot that runs every morning
A long-lived routine (a scheduled agent, a Slack or WhatsApp bot) makes the list at 7am, sends it to you, and records what you reply. It is the same rules on a timer, so the conformance checks below apply to it unchanged.
The rules are the same in all three; only where the list lives changes. Running a standard anywhere walks through each one.
The ready-made version
The ready-made version of the daily list is a Google Sheet you copy: a Contacts tab you paste your export into, a Today tab with the list and the three buttons, a Log that keeps the do-not-contact register where a re-import cannot reach it, and Settings for your cap. It never dials. Make your own copy.
A sale nearby is the strongest reason on the list, and in the sheet it is a column you fill from what you know or from a data source your agency already licenses. No hosted property-data service is offered to other builds, so build against a stub feed.
8. The Callbacks Office Voice Can Ring
Most of the ranked list is yours to ring, from the daily list in section 7. The one part Office Voice can ring for you is narrow on purpose: a contact who asked to be called back. Everyone else on the list stays your own call.
This step is optional and off by default. Office Voice places one governed call to one person you already hold a record for, on a stated basis. For this standard the basis iscallbackorthey_asked: the contact asked you to ring. There is no basis for a prospecting or cold call, so Office Voice refuses those by design, however high the contact scores.
- What you hand over. The contact, then one call: who it is, one plain sentence the agent will say, and the basis. Any Office Voice account can do this; it is not a plan feature.
- What it checks at dial time. The Do Not Call Register and your do-not-contact flags, calling hours in the person’s own state, one attempt per person per day, and about ten single calls a day per workspace.
Build against a stub until a callback has to actually ring, then change one line:
For your developer. Show the setup for your developer
provider: stub: local.mock_contacts production: office_voice.create_call # Office Voice, a governed single call; no insert to buy default: stub # no live mapping in the conformance kit yet scopes: contacts:write # the contact, as a record Office Voice holds (upsert_contact) campaigns:initiate # queue one governed call (create_call). The one that makes a phone ring audit:read # read back the record of each call placed basis: # create_call refuses a call without one callback, they_asked # the contact asked to be rung. Nothing else on this list qualifies
Keys are per account, under API keys (office-voice.com/app/keys). The dialling scope is granted only by the account owner, by ticking “Allow this to queue calls”. Grantcontacts:writefirst and leave the dialling scope off until you have seen a contact land correctly.
For your developer. Show the hand-over calls
# The Office Voice MCP: https://office-voice.com/api/mcp, bearer key.
# 1. The contact, as a record Office Voice holds. external_ref is the idempotency key.
{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"upsert_contact",
"arguments":{"external_ref":"crm-4471","name":"Sam","phone_e164":"+61412345678",
"relationship":"customer","jurisdiction":"QLD"}}}
# 2. One governed call, because Sam asked to be rung back. Queued, not dialled now.
{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"create_call",
"arguments":{"phone_e164":"+61412345678",
"who":{"name":"Sam","relationship":"customer"},
"purpose":"the call back you asked for about 12 Smith St",
"basis":"callback","item_ref":"crm-4471-callback","touch_number":1}}}Two details worth knowing before you write the script.external_refon the contact anditem_refwithtouch_numberon the call make a retry safe: the same callback is never queued twice. And create_call queues the call rather than dialling it, so a request made at 9pm is placed at the next lawful time, not now.
What you cannot stub is section 6, and that is the point. A queued call is permission to consider a call, not permission to ring. Office Voice checks the do-not-contact flags, the register and the calling hours in the person’s own state at dial time, and a high score cannot promote a contact past any of it.
The pass test. Take the highest-scoring contact who asked for a callback, flag it do not contact, and queue the call. It must not be rung, and the record must say why it was not. Run it again with the flag off and the clock at 8:30pm, and it must hold until morning. Both take a minute to stage. Run the same two against your own build. If yours rings, the gate is advice rather than a rule, which is section 6 in one sentence.
9. 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.
- Purchase dates are missing. Most CRMs have them for a third of contacts. The tenure play is the best one and it depends on the sparsest field, which is why section 1 says capture it in conversation instead of waiting.
- Address to property is not a lookup. Unit numbers, renamed streets and duplicate records mean a meaningful slice will not resolve. Decide up front what a call with no property data says, because you will make a lot of them.
- “Warm” is a judgement, not a column. Someone who enquired once in 2019 and never replied is in the database and is not warm. You will have to define this and you will get it wrong twice.
- Capacity is the binding constraint, not the list. This is why section 3 exists. Every hour spent on the automation before the ranking is an hour spent making it easier to call the wrong people faster.
10. What It Is Worth
Directions, not figures: the standard derives none and your list will differ. What these levers are worth depends on your data, starting with purchase date, which most CRMs hold for about a third of contacts.
Four plays
Instead of one blanket campaign
Tenure, equity, investor and lapsed. Each has a trigger, so there is a reason to ring that person today.
Refills
The tenure queue, on its own
The only play that replenishes itself. Lapsed appraisals convert better but run out in a fortnight.
One reason
Written against every ranked row
Plain words, not a score, so in six months you can say why that person was called on that Tuesday.
Capacity is the binding constraint, not the list, which is why the ranking is the part that pays. Automation built before it only calls the wrong people faster.
11. 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. The replacement starts from nothing, and this is a role that turns over.
- Nobody knows whether it ran. A silent week looks identical to a working week. There is no alarm for a queue that quietly stopped refilling.
- It degrades without failing. A CRM export changes a column name, the tenure play matches nothing, and the system keeps reporting zero opportunities. A false negative is worse than an error, because an error gets looked at.
- Attribution arrives too late to steer by. The listing comes eight months after the call. By the time you can prove it worked you have already decided whether to keep doing it.
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.
12. 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. The fields each play needs are present. Name, mobile and address are needed to work a contact at all. Every other gap is reported and limits only the play that needs it.
- 2. Four plays, each with a real trigger. Not one campaign against the whole list. A contact qualifies for a play because of something true about them.
- 3. Ranking is by the six rules, in order. The order is the claim; a build that scores the same inputs differently is a different standard.
- 4. A contact belongs to one play at a time. No contact is in two runs at once, and nobody receives two openers in a week from two plays.
- 5. The opener names why you are calling. A call that cannot say what prompted it reads as a cold call, because it is one.
- 6. Cadence has a stop, and the stop is honoured. The sequence ends whether or not the contact replied, and a reply ends it.
- 7. The gate sits underneath the ranking. Warm only, consent, do not contact, the contact's own timezone, and calling hours. No score promotes a contact past any of it.
- 8. Do-not-contact is permanent and global. It survives a re-import, applies across every play, and is never cleared by a new list.
- 9. Every skip is explained. The audit says why a contact was not called, not merely that it was not. A silent skip is indistinguishable from a bug.
- 10. A human decides anything that is a relationship. An offer, a price, a complaint, or a contact who asks a question the play was not built for.
- 11. The day's list respects the cap and carries a reason per row. Each morning the ranked run becomes a short list for a person: no more rows than the cap the agent set, each with its play, the reason, a drafted opener and the last outcome.
- 12. Yesterday's outcomes change today's list. What the agent records against a row is written back to the CRM or sheet the same day, and the next morning's list is made from what was written.
- 13. It survives the builder. Someone other than the builder can explain what it does, and it runs on an account the business owns.
- 14. The pass test passes. A do-not-contact flag on the top-scoring contact stops the call, and the audit says which gate stopped it.
- 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
The one step not to hand-roll is the call to a contact who asked to be rung back: Office Voice places it as one governed call, with the register, calling-hours and do-not-contact checks at dial time. Everyone else on the list is your own call.
- 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 2026-10-24
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. A call to someone you have an existing relationship with may be able to rely on permission inferred from that relationship instead of a wash, so the wash duty falls on non-exempt (cold) lists. Office Voice checks the register before every call it places, and places none without a lawful basis.
Calling hours, ACMA’s Telecommunications (Telemarketing and Research Calls) Industry Standard 2017. As we read it, a telemarketing call may be made on weekdays from 9am to 8pm and on Saturdays from 9am to 5pm, and not on Sundays or the national public holidays the standard lists, unless the person agreed to another time. The hours are the person’s local time where they live, not yours. These rules are about the call, not the register, so a call you make yourself from the daily list is a call they can apply to. Check the current instrument before you set your own hours.
Spam Act 2003 (Cth), administered by ACMA. If you send the drafted opener as a text or email rather than saying it, it is likely a commercial electronic message: it needs the person’s consent (express, or inferred from an existing relationship in limited cases), has to identify you, and has to offer a working way to unsubscribe. An unsubscribe is a do-not-contact outcome on the list, across every play.
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.
Want the whole thing by email?
This paper, plus the rest of the library. One click to stop them.