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.

Agentic Task
ServiceM8XeroSlackFinanceOperationsNotifications & AlertsAI Reports
PromptCreate

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?
It reads your ServiceM8 job statuses first, so it works with whatever you have called them. Anything sitting in a completed or work done style status is treated as a candidate, then filtered from there.
Will it flag jobs I already invoiced directly in Xero?
No. That is the main reason it looks at Xero at all. Before a job appears on the list it checks whether an invoice for that client genuinely exists, so work billed straight out of Xero does not show up as missing.
Does it change anything in ServiceM8 or Xero?
No. It only reads from both systems and posts the summary to Slack. Nothing is invoiced, edited, or sent to your clients.
Why does it ignore jobs finished in the last three days?
Recently finished work is often still being written up, so flagging it creates noise. The three day buffer keeps the list to work that really has slipped through, and you can change it.
How is the dollar value worked out?
It combines the parts and labour lines on the job with the hours logged on site, then subtracts any payments already received, so the number you see is the amount still at risk.

Related templates

Auto-fix your calendar when a flight slips, and flag what's at risk

When your flight moves, your calendar times get corrected automatically and you get a Slack note naming the meetings you're about to miss.

Google Calendar
AviationStack
Slack
Agentic Task
Trace phishing emails to the sending IP and report abuse

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.

AbuseIPDB
Gmail
Slack
Agentic Task
Turn procurement portal tenders into CRM deals each morning

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.

Anchor Browser
Google Sheets
HubSpot
+1
Agentic Task
Turn each week's football fixtures into a venue staffing plan

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.

API-Sports
Google Calendar
Slack
Agentic Task
Turn 5 star Yotpo reviews into a weekly marketing content queue

Every Tuesday we pull your best new reviews, draft social captions, email testimonials and product page quotes, then stage them in Notion for approval.

Yotpo
Notion
Slack
Agentic Task
Catch bad shipping addresses before you buy the label

Every weekday morning, unfulfilled orders get an address check: harmless typos fixed automatically, risky addresses held with a note to the customer.

Shippo
Shopify
Gmail
+1
Agentic Task

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.