FFP Guides

ServiceM8 how-to

How do you bulk import clients, sites and contacts into ServiceM8?

Connect Xero (or QuickBooks Online or MYOB) first, because it pulls in every customer contact. Then CSV import only the clients Xero does not have, via Clients, Bulk Import. Import sites as clients too, then link them with Actions, Assign to Head Office. Extra contacts go on each card afterwards.

Last checked 25 Sep 2026 against the sources listed at the end of this page.

Yes, natively

Yes: CSV import for clients, then bulk assign sites to head offices; extra contacts are added per card or through the API.

Step by step

  1. Clean the spreadsheet first: one row per billing client or site, a consistent name format for sites (for example '10 Smith St, Ipswich'), and a column marking which head office each site belongs to.
  2. If you use Xero, QuickBooks Online or MYOB, connect it before importing anything and wait for the contacts to arrive.
  3. Export the synced client list (or search it) and remove every spreadsheet row that already exists, matching on name and email. This is the duplicate check.
  4. Go to Clients, Bulk Import, download the import template, and paste your data under its column headings. Save as CSV.
  5. Import head offices and standalone clients first: upload, check the field mapping, let ServiceM8 validate, then import.
  6. Activate the Client Sites add-on, then import the site rows the same way as ordinary clients.
  7. In Clients, tick the sites for one head office, click Actions, Assign to Head Office, search for the head office and click Update. Repeat per head office.
  8. Open each head office and check its billing contact and billing address, because every site's invoice will use them.
  9. Add extra contacts per client or site with Open Client, New Contact, and right click to set the primary contact.
  10. Run a final check for duplicates: tick both copies of any duplicate and use Actions, Merge Clients.

Gotchas

  • Importing into ServiceM8 before connecting Xero is the usual cause of duplicates. Xero's customers all come in on connection whether or not you already imported them.
  • ServiceM8 notes that a client not yet synced with Xero will be overwritten if the same client is entered manually into Xero.
  • Imported clients do not reach Xero until their first invoice is approved, so a typo in a name becomes a new Xero contact at that moment.
  • Sites cannot hold their own billing contact. If one location pays its own invoices, it must stay a client.
  • Sites cannot be created from a job card, only from the Clients page, so load them before the office starts booking work.
  • Deleting a client in ServiceM8 archives the matching contact in Xero.

What the official help article misses: It covers the CSV upload only. It does not mention sites, contacts beyond one per row, the order to follow when Xero is connected, or how to catch duplicates before they reach Xero. Read ServiceM8's article.

Why the order matters

Most messy ServiceM8 client lists come from doing the steps in the wrong order: importing a spreadsheet, then connecting Xero, then finding every customer twice.

When you connect ServiceM8 to Xero, every customer contact in Xero comes across (suppliers are ignored), and Xero keeps pushing new and edited contacts about every 30 minutes. Going the other way, a client created or imported in ServiceM8 is not sent to Xero until you approve its first invoice. At that point ServiceM8 creates a Xero contact if it is not already a synced one. So a client you imported by CSV and a matching contact already in Xero are two records, and the first invoice can add a third in Xero.

The rule that follows: let the accounting package seed ServiceM8, and use the CSV only for clients that are not in it. If you are not using an accounting package, the CSV is your only route and the order question is simply head offices before sites.

Billing clients versus sites

Decide before you import which rows are billing clients and which are places you work. ServiceM8's Client Sites add-on (free) puts sites under a head office. A site behaves like a normal client for jobs, notes, badges and assets, but it has no billing contact: quotes and invoices use the head office's name and billing contact, invoices reach your accounting package under the head office, and you can run statements by site.

ServiceM8's test is simple. If all work at the location is paid for by the head office, make it a site. If you invoice the location itself, keep it a separate client. A property manager with 200 rentals is one head office and 200 sites; a franchisee who pays their own bills is a client.

There is no site column in the help centre's description of the client import, and sites cannot be created from a job card. The reliable path is to import sites as ordinary clients, then select them in the Clients list and assign them to their head office in bulk.

Contacts per site

A client card holds several contacts, each with a role, and one of them is the billing contact. The help centre does not say whether the client import template carries more than one contact per row, so download the template and check its columns before you plan around it. If it holds one, import the main contact and add the rest from Open Client, New Contact.

For hundreds of sites with several contacts each, the ServiceM8 API is the faster route: it has separate Client and Company Contact endpoints, and a client record's parent company field is how a site is linked to its head office.

Sources

  1. Clients are imported from a CSV via Clients, Bulk Import, using a downloadable template, a field mapping step and validation; clients may not need importing if the account is connected to Xero, QuickBooks Online or MYOB. ServiceM8 Help Center, checked 25 Sep 2026.
  2. On connecting Xero, all customer contacts are pulled into ServiceM8 (suppliers are ignored); a client created in ServiceM8 is created in Xero the first time an invoice for it is approved; after that, changes sync both ways about every 30 minutes. ServiceM8 Help Center, checked 25 Sep 2026.
  3. A client in ServiceM8 not yet synced with Xero will be overwritten if the same client is entered manually into Xero, and contacts are archived in Xero when deleted from ServiceM8. ServiceM8 Help Center, checked 25 Sep 2026.
  4. Sites have no billing contact, quote and invoice templates use the head office's details, invoices for all sites go to the accounting package under the head office's name, statements can be generated by site, and sites cannot be created from a job card. ServiceM8 Help Center, checked 25 Sep 2026.
  5. Existing clients can be linked to a head office in bulk by selecting them in Clients and using Actions, Assign to Head Office. ServiceM8 Help Center, checked 25 Sep 2026.
  6. Duplicate clients are merged by ticking each version in Account, Clients and choosing Actions, Merge Clients. ServiceM8 Help Center, checked 25 Sep 2026.
  7. In the ServiceM8 API, a client's parent_company_uuid identifies the head office of a site and is only present when the sites add-on is active. ServiceM8 Developer, checked 25 Sep 2026.