← All white papersGuide · November 2026

Equipment due for service in 30 days, from ServiceM8, with Grok Bot or Claude

Your AI keeps a list of every unit you installed or serviced, works out when each one is due from your own schedule, and hands the reminder calls to Office Voice.

8 min read·Published by AI Pathway

Every hot water system and air conditioner you install is a service job a year from now, if someone remembers. The dates are on old jobs nobody reopens. Grok Bot and Claude can read those jobs through ServiceM8’s own connector and keep the list. Neither should ring your customers itself, so the last step hands the calls to a service that can.

In short

What you get
Every morning, the units due for a service or with a warranty ending in the next 30 days, soonest first, and a list of jobs missing the details to work a date out.
Connecting
ServiceM8's official connector reads your finished jobs. One Office Voice key orders the calls; your login is never shared.
The rules
Dates worked out from your schedule every run, never typed. No term on the job, no warranty reminder. Stop means stop, on every unit.
The calls
Up to ten reminder calls a day through Office Voice, to customers who agreed to one, inside calling hours, one attempt each.

Take the spec to Claude, ChatGPT or Copilot. The sentence to paste is one click away.

Want the whole thing by email?

This paper, plus the rest of the library. One click to stop them.

1. What the due list is

Three files the bot keeps, and two you keep:

  • assets.csv. One row per unit, taken from the finished job exactly as the technician recorded it.
  • The Due list. Units with a service date or a warranty expiry in the next 30 days, worked out fresh from your schedule each morning.
  • The Fix list. Units missing an install date, a model or a type, or of a type you have not written a schedule for. Nothing is guessed.
  • calls-ok.csv and stop.csv, yours. Who agreed to a reminder call, and who asked never to be contacted again.

This is the light version, built for a bot. The full Next Service standard adds the follow-up rules, reminders by text and email, each yes written back to your job system as one booking request, and a pass test you can stage in a minute.

2. Connect ServiceM8 so your AI reads jobs but never texts a customer

Your AI gets two connections, and neither is your password. It reads your finished jobs through ServiceM8’s own connector, and it orders reminder calls with a key to Office Voice, our product. Think of that key as the office diary: your AI can write who needs a reminder, but it cannot pick up the phone. Office Voice rings from the diary, inside calling hours, after its own checks. The key cannot send, approve or pay anything, and you switch it off in one click.

  1. Sign up to Office Voice and sign in to the same ServiceM8 account (Connect, $19 a month), so Office Voice knows the customers your AI names and their numbers.
  2. Under Keys, create a key and tick Queue calls. Treat it like a password. If it ever leaks, delete it and make a new one.
  3. Add ServiceM8’s connector and the Office Voice key to Grok Bot (section 3) or Claude (section 4).
  4. Ask your AI how many jobs were completed last week. It should match ServiceM8’s own count. If it does, you are connected.

On Simpro, AroFlo or Fergus? The rules are the same; only the read changes. Simpro has no official connector for Grok Bot or Claude yet, so start from a job export or the standard. Tradify has no public API for this.

3. Add both to Grok Bot

Grok Bot is xAI’s always-on agent; plans that include it have changed since launch, so check xAI’s own site.

  1. Click +beside Bots and name it “Service Due”. In Edit Profile, put the standing rules in the description: read only, never send email or SMS, never change a job, ask before any action.
  2. Sign in to your ServiceM8 dashboard in another tab, then paste this into the Bot’s chat and click Add it:
Add a custom MCP server called ServiceM8 at https://api.servicem8.com/mcp

It signs in with OAuth, so give me the Authorize card.

Click Authorize on the card and sign in to ServiceM8. Then paste this and enter the Office Voice key in the secure secret card, never in the chat.

Add a custom MCP server called Office Voice at https://office-voice.com/api/mcp

It needs an Authorization header: the word Bearer, a space, then my Office Voice key. Ask me for the key with a secure secret card. Do not ask me to type it in this chat.

4. Add both to Claude

  1. In Claude, open Customize, then Connectors, click + and choose Add custom connector.
  2. Name it ServiceM8, enter https://api.servicem8.com/mcp, click Add, and sign in. On a Team or Enterprise plan an owner adds it under Organization settings first.
  3. Add a second custom connector at https://office-voice.com/api/mcp, choose No sign-in, and put the key in a request header named Authorization, as “Bearer” then the key.
  4. Set both to ask before every action, then start a Cowork task with a folder for the files.
For your developer. Show the Claude Code line
claude mcp add --transport http office-voice https://office-voice.com/api/mcp \
  --header "Authorization: Bearer <your Office Voice key>"

5. The prompt

The same prompt works in both. Write your own schedule into it first: the intervals are yours, not ours.

Use the ServiceM8 connector, read only. Do not send any email or SMS, do not change any job's status, and do not add notes.

My service schedule, by equipment type:
- Hot water system: every 12 months
- Split system air conditioner: every 12 months
- Solar inverter: every 24 months
[change these to yours; a type not on this list has no schedule]

1. Read every job marked complete since your last run. For each one that installed or serviced equipment, add a row to assets.csv (or update the row for the same serial or the same client and equipment): ServiceM8 client ID, client name, site address, equipment type, make and model, serial, install or service date, warranty term in months, and the job number. Use only what the job records. Do not guess anything that is not there.

2. For every row in assets.csv, work out:
- Next service date: the install or last service date plus the interval on my schedule for that type. Work it out fresh every run. Ignore any next-due date typed on a job.
- Warranty expiry: the install date plus the warranty term, only if the job recorded a term. No term, no warranty date.

3. Put a row on the Fix list, not the Due list, if it has no install or service date, no model, no equipment type, or a type with no schedule above. Say which is missing.

4. The Due list: rows with a next service date or a warranty expiry in the next 30 days, not already past. Leave out:
- anyone on stop.csv (they asked not to be contacted, about anything, ever)
- anyone not on calls-ok.csv (they have not agreed to a reminder call)
- any row where ServiceM8 has an open job for that client at that site. They are already booked.

Save today's Due list as due-YYYY-MM-DD.csv, soonest date first, and show it to me as a table, then the Fix list, then the count of rows left out and why.

Check the first run by hand on three units you know. Then change one line of the schedule and run it again: every date for that type should move, and nobody edited one.

6. Run it every morning

  • Grok Bot:ask it to “save this as a skill called service due, and create a routine that runs it every weekday at 8am Brisbane time.”
  • Claude: click Scheduled, then New task, and choose weekdays, 8am. It runs on Anthropic’s side, so it still runs with your computer asleep.

7. Hand the reminder calls to Office Voice

A reminder call has rules a chatbot cannot keep on its own: say it is an AI, ring inside calling hours, check the Do Not Call Register, and keep a record. Office Voice places each call as one governed call about the customer’s own job. Put this at the end of the morning prompt:

Now hand the reminder calls to Office Voice.

From today's Due list, soonest date first, at most ten, call the Office Voice tool create_call once per row:
- customer_external_id: their ServiceM8 client ID
- who: their name, relationship "customer"
- purpose, for a service: "the service due on your [equipment type] at [site] on [date]"
- purpose, for a warranty: "the warranty on record for your [equipment type] ends on [date]". Say nothing else about the warranty.
- basis: "existing_job"
- item_ref: the serial, or the job number, then the date, e.g. "HWS-123456-2026-12-14"
- touch_number: 1, or 2 if due-YYYY-MM-DD files show we queued touch 1 seven or more days ago and they have not booked. Never 3.
- valid_until: the due date

Show me what it queued and anything it refused, with the reason. Do not ring or message anyone yourself, and do not book anything.
  • The unit, the date and the touch number together stop the same reminder being queued twice, however often the routine runs.
  • Office Voice places single calls like these up to ten a day per account, one attempt per person per day, so the soonest dates go first.
  • A call not placed by its due date is dropped, never made late.
  • Every call is recorded with its outcome. A yes comes to you: a person books the time and prices the work.
  • Customers who agreed to a text or an email instead stay on the list for you. Office Voice’s key sends neither; the free sheet sends the emails.

Steps as each tool set them out on 27 October 2026; menus move, so expect the odd label to differ. Want the reminders sent by email as well? The free Next Service sheet sends them from your Google account and asks Office Voice for the calls, under the same rules.

8. Questions

Can Grok Bot or Claude read my equipment from ServiceM8?

It reads what your technicians recorded on each finished job, through ServiceM8's own connector, and keeps its own list of the equipment in a file. If the job does not say the model or the install date, the bot puts it on a list for you to fix rather than guessing.

Why does the bot work the dates out every day instead of saving them?

So that changing your schedule moves every date at once. Change hot water systems from twelve months to six and tomorrow's list follows, with nobody editing a date.

Why is the warranty reminder so short?

It says when the warranty on your record ends and nothing about what it covers. What is covered depends on the manufacturer and on the customer's rights under the consumer guarantees, which is not something a reminder should get wrong.

Can the bot send the reminders by text?

ServiceM8's connector can send job-linked texts, which is why the prompt forbids it: a bot texting whoever it decides to is not consent you can show. Office Voice places reminder calls to customers who agreed to one. Texts stay with you; the free Google Sheet sends the emails.

What happens when the customer says yes?

Office Voice records the call and its outcome. A person books the time and prices the work. Writing each yes into ServiceM8 as exactly one booking request, safe to retry, is the one step no product does today.

Rather skip the build?

Nothing ready-made runs service reminders under these rules yet. We build it on your own job system, including each yes written back once. Start with the 8-minute diagnosis. Free, no email.

Building it properly, at scale? The rules are open. Take the full standard.

Published by AI Pathway · https://aipathway.com.au

Read the full interactive version at https://aipathway.com.au/explore-ai/equipment-due-servicem8-grok-bot-claude