Find completed ServiceM8 jobs that were never invoiced
Every Monday at 8am, get a Slack list of finished ServiceM8 jobs with no invoice in Xero, ranked by dollar value with your total exposure at the top.
Every Monday at 8am, hunt down work my ServiceM8 account has finished but never billed, and post a recovery list to Slack.
Start with List Job Queues in ServiceM8 so you know how my job statuses are actually named, and work out which queues represent completed or work done states rather than assuming a fixed set of names. Then use List Jobs and keep only the jobs sitting in those queues. Ignore any ServiceM8 record whose active field is 0, because deletes in ServiceM8 are soft and inactive records still come back over the API, so without that filter you will report on deleted jobs. Also exclude anything completed in the last three days, so I am not chasing paperwork that is still legitimately in progress.
For each remaining candidate job, pull the detail. Use List Job Materials for the value of the parts and labour lines, List Job Admin Activities for the hours actually logged on site, and List Job Payments to see what has already been received against that job. Use List Clients to resolve the client name for each job so it can be matched in the accounting system and read properly in the summary.
Cross-check every candidate against Xero before reporting it. Call List Invoices and look for an invoice for that client that plausibly covers the job, matching on the client name and on any job number or reference carried on the invoice. This step is the point of the whole workflow: a job can look unbilled in ServiceM8 while the invoice was actually raised straight into Xero. Drop any job where a real invoice exists. If a match is ambiguous, keep the job on the list but flag it as uncertain and say why, rather than silently dropping it.
Post the result to Slack with Send a Message as one message. Put the total unbilled exposure at the top, then list the jobs ranked by dollar value, highest first. For each job show the client name, the job number, the date it was completed, the value of materials and labour, the hours logged on site, anything already paid, and the remaining amount at risk. If nothing qualifies, still post a short message confirming the check ran and that everything completed is accounted for.
Keep the scope tight: this is about work that was never billed at all, not about chasing payment on invoices that have already been issued. Nothing should be sent to clients and nothing should be created or edited in ServiceM8 or Xero. Both systems are read only here, and the output is an internal recovery list for me.
What does this prompt do?
- Sweeps your ServiceM8 jobs every Monday morning for work sitting in completed or work done statuses, using your own status names rather than a fixed list
- Adds up the parts and labour on each job, the hours actually logged on site, and anything already paid, so you can see what the job is really worth
- Checks Xero to confirm whether an invoice genuinely exists for that client, because an invoice raised straight into Xero makes a job look unbilled when it is not
- Posts a single Slack message ranked by dollar value with your total unbilled exposure at the top, skipping anything finished in the last three days
What do I need to use this?
- A ServiceM8 account you can connect, with access to jobs, materials, time entries, payments, and clients
- A Xero organisation you can read invoices from
- A Slack workspace and a channel where the weekly list should land
How can I customize it?
- Change the timing, for example a daily check instead of every Monday at 8am
- Widen or shorten the three day grace period so work in progress is not flagged too early
- Set a minimum dollar value so small jobs stay off the list, or send it to a different channel or a direct message
FAQs
What counts as a finished job?
Will it flag jobs I already invoiced directly in Xero?
Does it change anything in ServiceM8 or Xero?
Why does it ignore jobs finished in the last three days?
How is the dollar value worked out?
Related templates
When your flight moves, your calendar times get corrected automatically and you get a Slack note naming the meetings you're about to miss.
Every 15 minutes, forwarded phishing reports get traced back to the server that really sent them, with a verdict in Slack and the worst senders reported.
Every weekday at 7am, sign in to the tender portals you track, filter new notices against your bid criteria, and open a deal for the ones worth chasing.
Every Monday, rank the week's matches by expected demand, put the big ones on your venue calendar, and post a rota-ready summary to Slack.
Every Tuesday we pull your best new reviews, draft social captions, email testimonials and product page quotes, then stage them in Notion for approval.
Every weekday morning, unfulfilled orders get an address check: harmless typos fixed automatically, risky addresses held with a note to the customer.
Stop letting finished work go unbilled.
Set this up once and every Monday you will know exactly which completed jobs never made it onto an invoice, and what they are worth.