ServiceM8 form
How do you send a purchase order from ServiceM8?
ServiceM8 does not have a built in feature to create and send purchase orders. The workaround is a Word template that turns the job's billable items into a supplier facing order, printing the ServiceM8 job number as the PO number. Quote that same number at the supplier, and Supplier Invoice Import matches the returned invoice to the job automatically.
Last checked 25 Sep 2026 against the sources listed at the end of this page.
Free form
Purchase order form for all trades
A supplier facing PDF listing the materials needed for a job, with the ServiceM8 job number printed as the PO number so the returned invoice matches automatically.
The form: 11 questions
| Section | Question | Type | Req. | Notes |
|---|---|---|---|---|
| Buyer | Business name, ABN and delivery address | Static text | Yes | Type once into the header. ServiceM8's published field list has no ABN field. |
| Buyer | Ordered by | Merge field calculation.current_user_fullname | The staff member who produced the document. | |
| Order | PO or order number | Merge field job.generated_job_id | Yes | Label it clearly as the order number. This is the number Supplier Invoice Import matches on. |
| Order | Order date | Merge field job.invoice_date | Yes | Reused as a general document date field; rename the label on the template. |
| Order | Supplier name | Static text | Yes | Filled in per order, not a merge field: ServiceM8 does not hold a supplier contact type. |
| Order | Delivery address | Choice Deliver to site / Deliver to yard or workshop / Collect from trade counter | Yes | |
| Order | Site address | Merge field job.job_address | Print only when Deliver to site is selected. | |
| Order | Required by date | Text | ||
| Items | Item, quantity and price | Merge field in bookmarked row jobMaterial.name / jobMaterial.quantity / jobMaterial.total_price | Yes | Row between bookmarks blockStart_jobMaterial and blockEnd_jobMaterial. |
| Items | Order total | Merge field job.subtotal_price | Yes | Excludes GST, since this is an order to a supplier, not an invoice to a customer. |
| Terms | Instruction to supplier | Static text | Yes | For example: quote this order number on your invoice and email it to [your Supplier Invoice Import address]. |
Set it up in ServiceM8
- Duplicate your quote Word template and save it as Purchase order template.
- Remove customer facing fields (GST breakdown, payment terms, pay online link) and add the buyer, supplier and delivery fields above.
- Relabel job.generated_job_id clearly as the PO or order number on the template, since that field is what Supplier Invoice Import matches against.
- Confirm the material row still sits between the blockStart_jobMaterial and blockEnd_jobMaterial bookmarks.
- Upload it from Settings > Document Templates as a custom template, or keep it as a saved Word file you fill and export manually if your plan does not support a second document type.
- Switch on Supplier Invoice Import in Settings, ServiceM8 Add-ons, and copy the account's unique invoice email address.
- Tell every buyer to quote the ServiceM8 job number, and nothing else, as the order or PO number at every supplier.
- Run one real order through the full loop: produce the PO, place it with the supplier, and check the returned invoice lands on the right job in the Diary.
ServiceM8 does not generate purchase orders. It generates job numbers.
ServiceM8's own help centre is direct about this: there is no built in functionality to create and send purchase orders to suppliers. What ServiceM8 does have is a job number on every job, and a Supplier Invoice Import add-on that matches an emailed supplier invoice to a job by comparing the PO number printed on that invoice against ServiceM8 job numbers. Put those two facts together and the purchase order problem becomes a template problem: build a document that looks like a purchase order, pulls the job's materials, and prints the job number where a PO number goes.
This is not a native ServiceM8 document type the way a quote or invoice is. It is a quote template, duplicated and relabelled, because that is the template type with access to the job's billable items and bookmarked material rows.
What has to be on it for materials to land back on the job
The purchase order needs your business details as the buyer, the supplier's name and delivery address, the site delivery address if materials are going straight to the job rather than your yard, and the line items: the same jobMaterial fields a quote template uses, laid out between blockStart_jobMaterial and blockEnd_jobMaterial bookmarks so each material repeats as its own row. Print job.generated_job_id clearly labelled as the PO or order number, since that is the whole mechanism that gets the supplier's invoice back onto the right job later.
Tell every staff member who orders materials the same rule: quote the ServiceM8 job number, and nothing else, as the order reference at the trade counter or on the phone. A PO written as "Smith job" or a van number will not match anything, and the invoice sits unattached in the ServiceM8 Inbox instead of on the job.
Getting the supplier's invoice back onto the job
Once Supplier Invoice Import is switched on, give suppliers your account's unique import email address, or forward invoices to it yourself. An emailed PDF invoice whose PO number matches a ServiceM8 job number is attached to that job automatically, with the supplier, amount and, where ServiceM8 can read them, individual line items extracted. From the job diary you then choose Apply Total to Job, Apply Line Items to Job or Apply Bundle to Job, and check the cost and sell price on each line before you invoice the customer.
The import puts costs on the job. It does not create a bill in Xero, so the invoice still needs entering through your normal accounts process, and supplier contacts are not synced from Xero either. A paper docket that was never emailed goes the manual route: save it as a PDF and drag it onto the job card, which ServiceM8 reads the same way.
What this form will not do
- This is a Word template you produce and send by hand. ServiceM8 does not track purchase orders as their own record, send them to suppliers, or know whether one has been actioned.
- Matching only works when the invoice's PO number is exactly the ServiceM8 job number. Anything else sends the invoice to the Inbox for someone to attach manually.
- Supplier Invoice Import reads line items where it can. If it cannot, Apply Total to Job is the only option, and the detail from the purchase order is lost on the cost side.
- The import puts costs on the job. It does not create a bill in Xero, so the supplier still needs to be paid through your normal accounts process.
- ServiceM8 has no supplier contact type, so supplier name and delivery details are typed per order rather than pulled from a saved list.
Sources
- ServiceM8 does not have built in functionality to create and send purchase orders to suppliers. ServiceM8 Help Center, checked 25 Sep 2026.
- Supplier Invoice Import gives the account a unique email address; staff quote the ServiceM8 job number as the purchase order, invoices whose PO number matches a job number are attached to that job automatically, and unmatched invoices go to the ServiceM8 Inbox. ServiceM8 Help Center, checked 25 Sep 2026.
- ServiceM8 extracts the supplier, invoice number, amount due and, where possible, individual line items from an imported invoice, and offers Apply Total to Job, Apply Line Items to Job and Apply Bundle to Job; PDFs dragged onto a job card are read the same way. ServiceM8 Help Center, checked 25 Sep 2026.
- ServiceM8's Xero sync covers invoices, payments, clients and items; supplier contacts in Xero are not imported, so supplier invoices still need entering through the normal bills process. ServiceM8 Help Center, checked 25 Sep 2026.
- Material line rows in a custom ServiceM8 quote or invoice template need bookmarks named blockStart_jobMaterial and blockEnd_jobMaterial on either side of the row, and bookmark names are case sensitive. ServiceM8 Help Center, checked 25 Sep 2026.