TradesSync.
All documentation
  1. Overview
  2. Getting started
  3. What syncs
  4. Pipeline stages
  5. Field mapping
  6. Tags
  7. If/then rules
  8. Leads into ServiceM8
  9. Reading the sync log
  10. Common setups
  11. Troubleshooting

Home / Docs

Sending GoHighLevel leads into ServiceM8

Everything else in TradesSync goes one way, ServiceM8 to GoHighLevel. This is the one thing that goes the other way, and it is switched off unless you turn it on yourself.

The problem it solves

Leads captured in GoHighLevel — a web form, an AI phone answer, a contact your marketing added — never reach ServiceM8 on their own. There is nothing in ServiceM8 for the sync to pick up, so the lead sits in your CRM while your job list knows nothing about it.

Switch this on and each new GoHighLevel contact becomes a ServiceM8 client and a job card at status Quote, ready for you to price. The enquiry that came in at nine at night is on your job list by morning.

There is a second half to this: a customer ServiceM8 already knows, coming back through one of your forms for another quote or callout. That is a repeat enquiry, and it raises a fresh job card against the client you already have rather than skipping them for being known.

Two URLs, two workflows

GoHighLevel sends the same information whichever trigger fired it — there is nothing in the message itself to say whether a contact was just created or a form was just filled in. So each situation has its own URL, and they are not interchangeable. Both appear in Sync Settings once you save.

Workflow 1 — a new enquiry from someone new

  1. Go to Sync Settings and find GoHighLevel → ServiceM8.
  2. Tick the switch and press Save. Your two webhook URLs appear.
  3. Copy the first URL.
  4. In GoHighLevel, go to Automation → Workflows and create a workflow with the trigger Contact Created and one action, Webhook, method POST, pasting that URL.
  5. Set the workflow to Publish. A draft workflow never fires.

No filter is needed here. Anyone ServiceM8 already knows is skipped by this workflow.

Workflow 2 — a repeat enquiry from an existing customer

  1. Copy the second URL — the one ending &intent=enquiry.
  2. Create a second workflow with the trigger Form Submitted.
  3. On that trigger, add the filter Form is and tick only your enquiry forms.
  4. Add one action, Webhook, method POST, pasting the second URL.
  5. Publish it.
Always set the Form is filter.

Without it, every form in your account raises a job card — onboarding forms, internal forms, feedback surveys. Tick only the forms where somebody is asking you to do work.

Never use Contact Updated on either URL.

TradesSync updates your GoHighLevel contacts every time it syncs your ServiceM8 jobs. A workflow built on Contact Updated would therefore fire on our own changes, over and over. Use Contact Created and Form Submitted only.

The GoHighLevel to ServiceM8 panel in Sync Settings, switched off, with a toggle reading Create ServiceM8 jobs from new GoHighLevel contacts.
The lead path lives at the bottom of Sync Settings and ships switched off.
Treat that URL like a password.

Anyone who has it can create clients in your ServiceM8 account. Do not post it in a shared document, a support thread or a Facebook group.

What it will and will not do

Why the delay

GoHighLevel fires Contact Created the instant the record appears, which is often before the address, tags or form answers have finished saving. Rather than trust that first message, TradesSync treats it as a doorbell: it notes that a contact exists and then goes back to GoHighLevel to read the finished record when it processes the queue.

The result is a ServiceM8 client with the business name and address filled in, rather than a half-empty record created a second too early.

Turning it off

Untick the switch and save. It stops both workflows immediately. Anything already created in ServiceM8 stays exactly where it is — turning the feature off does not remove clients or jobs it made earlier.