All documentation
Tagging GoHighLevel contacts from ServiceM8
Tags are how most people get ServiceM8 information to actually do something in GoHighLevel. There are two kinds and they behave differently on purpose.
The two behaviours
| Where it comes from | Behaviour | Why |
|---|---|---|
| Job statuses, queues and categories | Exclusive — applying one clears the others in that group | A job only ever has one status, one queue and one category at a time, so its tag should move with it rather than pile up. A job going from Quote to Work Order loses the Quote tag and gains the Work Order one. |
| Badges | Additive — they accumulate, nothing is removed | A job can carry several badges at once, so adding up is the correct behaviour. |
This is the difference between a tag that tells you where a job is now and a tag that tells you what is true about it. Both are useful; they just need opposite handling.
Tagging from job status alone
You do not need a pipeline to use tags. Turn Create opportunities off and Step 2, Pipeline becomes a short list: ServiceM8's five job statuses, with a tag box beside each. Type a tag against the ones you care about, leave the rest blank, and every client whose job reaches that status gets tagged.
That is the whole setup for anyone who runs their marketing on workflows rather than pipelines. No stages, no opportunities, nothing to change in GoHighLevel. The tags are exclusive in the same way queue tags are, so a contact moves cleanly from quote to work order to complete rather than collecting all three.
Setting them up
Status, queue and category tags are all set in Step 2, Pipeline in Sync Settings — not as an ordinary field mapping on Step 3. Badge tags can be set either way.
Start typing in a tag box and the tags that already exist in your GoHighLevel location appear. Pick from those. GoHighLevel creates whatever tag it is given, so quote-sm8 and quote sm8 are two different tags — the tag applies perfectly, it is just not the one your workflow is listening for. Nothing errors, and it is a difficult thing to spot afterwards.
Deliberately. A field mapping can only ever add a tag, never remove one. Map queue name straight onto tags and within a month every contact is wearing every queue its job has ever sat in — Enquiry, Quoted, Booked In, Complete, all at once, and your workflows have no way of knowing which is current.
The Queues and Categories sections on Step 2 exist precisely to handle the removal as well as the addition. Badge names mapped to tags on Step 3 is allowed, for exactly the same reason it is correct for badges to accumulate.
Tags we do not touch
Only tags you have set up in TradesSync are ever removed. Any other tag on a contact — ones your workflows add, ones you add by hand, ones from another tool — is left completely alone.
And if a job has no queue or category set at all, nothing is cleared. An empty value is not treated as a reason to strip the contact bare.
Tags from if/then rules
Rules can add tags too, and rule tags stack — several rules can each add their own without wiping each other out. That makes them right for facts about a job rather than its current position: high-value, non-buyer, eicr-renewal.
See If/then rules.
Checking a tag before it goes live
Run Sync Preview on a job that should match, and look at the tags it reports. If the tag you expected is not there, the condition is not matching — check spelling, and remember that equals is an exact match. Use contains if you are only matching part of a value.