ServiceM8 integrates with Xero out of the box. The standard connection syncs your customers, sends invoices raised in ServiceM8 to Xero, and brings payments back, so the office does not key the same invoice twice. What it does not do is everything a bookkeeper eventually asks for: the site address on the invoice, tracking categories, purchase order numbers, control over the state an invoice arrives in, and anything to do with supplier bills or job costs. Those gaps are filled with a custom integration built on the two APIs, from $2,000 plus GST.
What the standard sync does
ServiceM8 has a built in connection to Xero (and to QuickBooks and MYOB). Once it is linked, as ServiceM8 describes it, customers are matched or created in Xero, invoices you raise in ServiceM8 flow into Xero, and payments recorded in Xero come back so the job shows as paid. Items and tax rates are mapped so the lines land in the right accounts.
For a business that quotes, does the work, invoices from the job and gets paid, that is most of the accounting admin gone. If you have not set it up, do that first. It is free and it is the right foundation for anything custom.
The gaps people hit
These are the questions that come up again and again in the ServiceM8 community and in my own inbox. The exact behaviour depends on your settings and on the version you are running, so check your own account before assuming any of them applies to you.
- The site address is not on the invoice. A job is done at a site, but the invoice goes to the customer's billing address. Property managers and strata customers want the site name and address on the Xero invoice, or they cannot match it. The sync sends what is in the customer record, and the site often is not.
- Tracking categories. Xero tracking categories are how many businesses split revenue by division, region or crew. The standard sync does not, as far as I can see, let you set a tracking category from the job. So the bookkeeper adds it by hand on every invoice, or reporting by division stops working.
- Purchase order numbers. Commercial customers require their PO number on the invoice. Getting it from a field on the job into the reference field in Xero, reliably, every time, is a common ask.
- What state the invoice arrives in. Some businesses want invoices to arrive in Xero already approved so they can be sent from Xero. Others want them as drafts for a check first. Whether you can choose depends on your setup, and people ask for both.
- Attachments. A signed docket, a completed form or the job photos attached to the Xero invoice, so the customer's accounts team sees the evidence with the bill.
- Job costs and supplier bills. Materials bought for a job show up as bills in Xero, but nothing links them back to the ServiceM8 job. Profit per job is then a manual exercise.
How a custom integration fills them
Both systems have well documented APIs. ServiceM8's reads and writes jobs, clients, sites, form responses and attachments, and it can notify a program when a job changes through webhooks. Xero's API reads and writes invoices, contacts, tracking categories, attachments and bills.
A custom integration is a small program that sits between them. A typical build listens for an invoice being raised in ServiceM8, reads the job and its site, then writes or updates the invoice in Xero with the site address in the description, the PO number in the reference, the right tracking category, and the signed docket attached. It logs every invoice it touched so the bookkeeper can see what happened.
Sometimes that runs alongside the standard sync, filling in the fields the sync leaves blank. Sometimes it is cleaner for the custom build to take over invoice creation entirely and leave the standard sync for customers and payments. Which one is right depends on how your office works, and it is the first thing to settle in the scoping call.
The job cost side works the other way. The program reads bills in Xero that carry a job number in the reference, and writes the cost back to the ServiceM8 job so that job profit is visible where the work is managed.
Questions to answer before building
- Who approves invoices, and in which system?
- Which tracking categories do you use, and what on the job decides the value?
- Does the standard sync stay switched on for anything?
- What has to happen when a job is edited after it was invoiced?
- Who gets told when something fails to sync, and how?
Most of these take a sentence each to answer. Getting them written down before any code is written is most of what makes an integration reliable.
What it costs
An integration is from $2,000 plus GST, fixed price, with a 50% deposit and the balance when it has run on your real invoices for a week and your bookkeeper is happy. You keep the code and the documentation. Care at $252 a month covers monitoring and fixes when either ServiceM8 or Xero changes something.
If you are not sure whether your problem is a settings fix or a build, a 15 minute call will tell you, and I will say so if it is the cheaper answer.