Changelog

What's new

Every change to TradesSync, newest first.

v2.7.2

Current 14 October 2026

Junk records from accounting links no longer reach GoHighLevel, ServiceM8 is never written to by the sync, and an opportunity that has not changed is left alone.

Junk stays out of your CRM

  • The gap this closes — accounting links such as Xero can pull hundreds of bank payees, suppliers and card transactions into ServiceM8 as clients in one go. TradesSync sent every one of them to GoHighLevel as a contact.
  • Now they are left out — a client with no email, no phone number and no jobs is not sent to GoHighLevel. There is no way to contact them, so a contact would only be clutter.
  • Real customers are not affected — the moment a client has a job, an email or a phone number, they come across on the next check. Clients already in GoHighLevel keep updating as normal.

ServiceM8 is read, never written

  • What we changed — when a ServiceM8 client had no contact person, TradesSync used to add a “Primary Contact” record to that client in ServiceM8 so GoHighLevel had a name to use. It no longer does. The client’s name is used instead, and nothing is written to your ServiceM8.
  • The one exception is still yours to choose — creating ServiceM8 jobs from new GoHighLevel leads stays off unless you switch it on.

No updates for nothing

  • Unchanged means untouched — if nothing about a job has changed, its opportunity in GoHighLevel is left exactly as it is. GoHighLevel workflows that watch for opportunity changes no longer fire for nothing, and a workflow that edits the job back in ServiceM8 can no longer set off a loop.
  • Deleted contacts put themselves right — if a contact is deleted in GoHighLevel while the client still exists in ServiceM8, TradesSync now recreates or relinks it on the client’s next change, instead of failing every time. Delete or archive the client in ServiceM8 to remove them for good.

v2.7.1

13 October 2026

Leads from GoHighLevel now arrive in ServiceM8 with their capital letters tidied, so the office no longer has to retype names and addresses that were filled in all in lowercase.

Capital letters, tidied for you

  • Names and addresses — a name or address typed all in lowercase, or all in capitals, now reaches ServiceM8 with a capital at the start of each word. john smith, 12 high street becomes John Smith, 12 High Street.
  • Postcodes — always in capitals, and a UK postcode typed without its space gets one, so me87ab becomes ME8 7AB.
  • Typed properly? Left alone — only text that is all lowercase or all capitals is changed, so McDonald or van der Berg arrive exactly as written. Company names in capitals stay in capitals, and emails and phone numbers are never touched.
  • New records only — it applies to new clients, the job address and the job contact. An existing ServiceM8 client is still never edited, and the sync log shows what was tidied.

v2.7.0

12 October 2026

Returning customers no longer bring their old jobs and tags into GoHighLevel, and a job that is moved to a different client in ServiceM8 can no longer land on the wrong person.

Returning customers come back cleanly

  • No more history flooding in — when a client record changed in ServiceM8, for example when a returning customer got a new job, TradesSync brought every job that client had ever had across to GoHighLevel at once. Now only the new job comes across, and the client’s old jobs stay where they are.
  • Old tags stay put — the same update used to apply the queue, category and badge tags from all of that client’s old jobs, so a badge from a job finished years ago could land back on the contact and start a workflow. Tags are now only applied when a job itself changes.
  • Why it matters — if your GoHighLevel workflows start on a new opportunity or a tag being added, such as a review request, they will no longer fire for work you finished long ago.
  • Everything else carries on — new jobs, jobs moving through your queues, statuses or categories, contact details and opportunities that already exist all update exactly as before.

A change of client is spotted

  • The gap this closes — some offices keep spare jobs and reuse them by changing the client. Because TradesSync follows the job, it used to update the opportunity it had already made, which belongs to the previous customer, so their workflows could message the wrong person.
  • Now it notices — each job remembers which customer it belongs to. If the client changes, the old customer’s opportunity is left exactly as it was and the new customer gets their own.
  • Only IDs are stored — TradesSync records which records belong together, never a second copy of your customers’ names, emails or phone numbers.
  • Covers each job from its next sync — jobs that synced before this release are picked up the next time they change.

v2.6.1

5 October 2026

Leads from GoHighLevel now open in ServiceM8 with the customer’s message as the job description, and office jobs can be kept out of your pipeline altogether.

The customer’s message, front and centre

  • Message as the job description — the field you choose under Show the customer’s message in ServiceM8 now becomes the job description. Before, it went into the Job Diary as a note and the description just said Lead from GoHighLevel.
  • Where it came from, in the diary — a Lead from GoHighLevel note (or Repeat enquiry from GoHighLevel) now goes in the Job Diary instead, so you can still tell how the job arrived.
  • Nothing to change — the field you had already chosen carries straight over. With no field chosen, a field called Description of works or Enquiry is used if you have one.
  • Photos from your form — anything uploaded in a file upload box on your GoHighLevel form is now linked on the new job as a Job Diary note, so your team can see the photos from ServiceM8. Found automatically, nothing to set.
  • Clearer failures — when a lead cannot go into ServiceM8, the sync log now says why in plain English, such as a contact with no name, instead of a code.

Keep office jobs out of the pipeline

  • No opportunity tick box — every queue, category and badge on Step 2 now has a No opportunity box at the end of its row. Jobs with a ticked one never create or update an opportunity, which keeps office, admin and internal jobs out of your pipeline.
  • Contacts and tags carry on — only the opportunity is skipped. The sync log and Sync Preview both say when a job was left out and why.
  • Category is the safe choice — a job loses its queue when it is booked into the diary but keeps its category, so ticking a category catches the job the whole way through.
  • Backup stages for every status — the help and docs now say to set a backup stage for every status you use, not just Completed and Unsuccessful, since booked jobs leave their queue too.
  • Small fix — the Categories column on Step 2 was headed “ServiceM8 Categorie”. It now says Category.

v2.6.0

1 October 2026

Completed and unsuccessful jobs now reach the right pipeline stage on accounts driven by queues, even after they have left their queue in ServiceM8.

A backup stage for jobs with no queue

  • Backup stage — if queue or category drives your pipeline, you can now pick a stage against each job status too. It is only used when a job is not in any queue or category, which is usually once it is completed or marked unsuccessful.
  • Won and Lost now set — before, a job with no queue skipped its opportunity entirely, so it never moved and was never marked Won or Lost. With a backup stage set, it moves and its status updates.
  • Nothing changes until you set one — leave the backup stages blank and everything behaves exactly as before. A job in a queue always follows its queue.
  • Clearer skip message — when a job has no queue and no backup stage, the sync log now says so and tells you where to set one.

Several tags from one box

  • Comma separated tags — any tag box on statuses, queues, categories or badges can now hold more than one tag, separated by commas. Before, the whole lot arrived in GoHighLevel as one long tag, so workflows listening for either tag never fired.
  • Still swaps cleanly — when a job moves queue, all of the old queue's tags come off and all of the new one's go on. A tag both share stays put.

Bringing in existing jobs

  • Start fresh is remembered — choosing not to bring in existing jobs is now saved and shown on the page. Before, the box went back to 90 days every time, so it looked as though the choice had not stuck.
  • Safer default — the box now opens on your last choice, or on None, so pressing the button without looking never brings in 90 days of jobs by accident.

Next booking and smaller fixes

  • Next booking fields — Step 3 now has Next Booking start date, end date, staff name and whether it is still to come. It picks the next real booking in the diary, ignoring time on site and cancelled bookings, so a GoHighLevel reminder workflow always uses the right date.
  • Earliest and latest dates — the max and min options now compare dates properly. Before, a date was read as a number and only the year counted.

v2.5.1

25 September 2026

Leads from GoHighLevel now arrive in ServiceM8 with the full address in the right fields, and with the customer on the job as its job contact.

Complete leads in ServiceM8

  • Job contact added — the person who enquired is now added to the new job as its job contact, with their name, email and mobile. Before, only the client had a contact. Repeat enquiries get one too.
  • Address in the right boxes — a new client's Street, City, State and Postcode are now filled from GoHighLevel's Address Line 1, City, State and Postal Code, and the job address is laid out one part per line, the way ServiceM8 holds it. A building or house name in Address Line 1 now sits at the top of the address.
  • What goes where, written down — Sync Settings, the help page and the docs now show exactly which GoHighLevel fields land where in ServiceM8. It is fixed rather than mapped, so a lead always arrives the same way.
  • In the sync log — each lead's entry now shows the job address and the job contact. If the job was created but the job contact could not be added, it appears under Needs your attention.

v2.5.0

22 September 2026

Leads from GoHighLevel can now bring the whole enquiry with them into ServiceM8, and everything that comes that way is in the sync log.

The enquiry on the job, as a note

  • One field, your choice — pick any one GoHighLevel field and whatever it holds is added to each new ServiceM8 job as a job note: the customer's message, form answers, an AI summary. Nobody needs to open GoHighLevel to understand the job.
  • Description left free — the job description keeps a short one-line label, so it stays free for your actual scope of work.
  • New and repeat enquiries — works the same for both.
  • Filled in late? Still found — if the field is empty when the lead arrives, TradesSync reads it again from GoHighLevel when it creates the job.
  • Off unless you set it — leave the field blank and nothing changes.

Leads in the sync log

  • Both directions — every lead from GoHighLevel now has its own sync log entry, step by step: which client it matched or created, the job card it raised, the note it added, or exactly why it did nothing.
  • Problems flagged — if the job was created but the note could not be added, the entry says so and appears under Needs your attention.

v2.4.0

18 September 2026

Jobs without a client now come across, the sync log tells you exactly what happened step by step, and TradesSync now works properly outside the UK.

Jobs with no client now sync

  • The gap this closes — a job raised in a hurry on the phone often gets a name and a mobile number as a job contact, and never gets a client attached. Those jobs used to fail and the person never reached GoHighLevel. Now the job contact is used instead.
  • No duplicates — if that person is already in GoHighLevel with the same email or phone, we link to them and leave their details exactly as they are.
  • Nobody on the job at all? — a job with no client and no job contact is now shown as skipped, with the reason, instead of a red failure telling you to call us.
  • Sync Preview agrees — the preview now shows the job contact being used, rather than warning that the job has no email or phone.

A sync log that explains itself

  • Step by step — every entry now has a numbered list of what the sync actually did, in order, in plain English: which record it read, which contact it used, which tags went on and came off, and why anything was skipped.
  • Failures show their working — the step-by-step list opens by itself on a failed entry, so you can see how far it got and where it stopped.
  • Which contact, and how — each job entry now says whether its GoHighLevel contact was created, found already there, or already linked.
  • Customer records included — client entries list every job on that client and what happened to each one, including entries from before this release.

Built for more than the UK

  • Countries — GoHighLevel only accepts a two-letter country code, so a client with “United Kingdom” or “Canada” typed into ServiceM8 was refused outright. Countries are now converted automatically. Anything that isn't a country — a county, say — is left off, and the contact syncs anyway.
  • Phone numbers — numbers are formatted for your own country, read from your GoHighLevel sub-account. UK, Ireland, Canada, the US, Australia, New Zealand and South Africa are all handled.
  • Your currency — the sync log and preview show amounts in your own currency rather than always in pounds.

v2.3.0

7 September 2026

Leads that arrive in GoHighLevel can now become ServiceM8 clients and job cards. It is optional, off until you switch it on, and everything else still works exactly as it did.

Leads from GoHighLevel into ServiceM8

  • The gap this closes — a web form fills in, or your AI answers a call you missed. It lands in GoHighLevel and goes no further, because ServiceM8 has never heard of it. Switch this on and that contact becomes a ServiceM8 client with a job card at Quote, ready to price.
  • Off until you want it — find it in Sync Settings under GoHighLevel → ServiceM8. Tick the switch, copy the webhook URL it gives you, and paste it into a GoHighLevel workflow. One switch turns it back off.
  • Existing clients are never edited — if the contact matches a client you already have, on email or phone, we link to your record and leave it alone.
  • Only a client and a job card — no queues, badges or custom fields. What happens to the job from there is yours.
  • Nothing bounces back — contacts that came from ServiceM8 in the first place are recognised and ignored.
  • Full details, not partial ones — GoHighLevel tells us the moment a contact appears, which can be before the address and company name have finished saving. We wait, then read the finished record, so what reaches ServiceM8 is complete.

Safety limits on it

  • Bulk imports can't flood your account — more than 20 contacts in 10 minutes, or 50 in a day, and we pause and alert ourselves rather than fill ServiceM8 with hundreds of quotes.
  • Nothing is lost when we pause — every contact is still recorded, so a backlog can be looked at and released deliberately.
  • No duplicates — the same contact arriving twice, whether from a retry or a workflow firing again, only ever creates one client and one job.
  • Your webhook URL is unique to you — it carries a secret only your account has, and anything without it is rejected.

Everything else is unchanged

  • Still one-way by default — ServiceM8 remains the source of truth, and we still only read from it unless you switch the above on.
  • Matching improved — finding an existing ServiceM8 client now copes with the different ways a phone number gets written down, so +44 and 07 versions of the same number find the same client.

v2.2.0

5 September 2026

Custom fields now actually save in GoHighLevel, and the mapping page has been rebuilt into four steps so it's clear what you need to fill in.

Custom fields now save

  • Contact custom fields — mapping a ServiceM8 value into one of your own GoHighLevel fields used to be accepted and then quietly ignored, leaving the field empty. It now writes properly.
  • Job details on the contact — fields taken from the job card, like the job number or description, now reach the contact instead of being dropped.
  • Opportunity custom fields — supported as well, and can no longer break an opportunity update when they're set.
  • No more false success — if a mapped field doesn't match anything in your GoHighLevel account, the sync log says so instead of reporting it as sent.

A clearer setup page

  • Field Mappings is now Sync Settings — the page does more than field mapping, so the name was misleading.
  • Four steps instead of one long page — setup, pipeline, fields, advanced. One screen at a time rather than endless scrolling.
  • Only one step is required — the pipeline step. Everything else has a sensible default, and a tick or warning on each step shows what still needs doing.
  • Plain-English summary — the top of the page tells you what the sync does and which classifier is driving your pipeline stage.
  • Advanced options tucked away — conditional rules and won/lost status are collapsed, so they don't compete with the settings most people need.

Clearer answers when something's skipped

  • Skip messages name the right thing — if you run on queues, the log no longer tells you a job status mapping is missing. It names the classifier you actually chose.
  • Jobs with no queue — now say exactly that, rather than looking like a broken mapping.
  • Better account overview — shows which classifier drives your stages, how many stages and tags are set, and warns when opportunities can't be created.
  • Backfill — shorter date windows and individual job selection, so a single job card can be pushed through on request.
  • Corrected first-sync wording — syncing starts from the day you connect. Jobs that already existed come across when they next change, or on request.

v2.1.0

3 September 2026

Pipeline stages can now be driven by your ServiceM8 queues or categories, not just job status — which is how most trades actually run their week. Plus a lot of sync reliability work.

Choose what drives your pipeline

  • Stage driver — pick job status, queue or category to move opportunities through your pipeline. Most trades pick queue.
  • Classification tags — the two you didn't pick still apply tags in GoHighLevel, and so do badges.
  • Exclusive vs additive tags — moving a job between queues swaps its tag rather than stacking another one on. Badges accumulate, because a job can carry several.
  • 160 mappable ServiceM8 fields, up from 91.
  • Wildcards and aggregates — roll up every line item or payment on a card into one field: join, count, sum, first, last, unique.

Sync reliability

  • Notes now sync — a wrong API call had been failing every company sync that carried a note since 21 July. Fixed.
  • Duplicate contact recovery — if the contact already exists in GoHighLevel we find it, link it and update it instead of failing.
  • Deleted opportunity recovery — delete an opportunity in GoHighLevel and the next sync notices, clears the stale link and creates a fresh one.
  • Messy email addresses — an invalid email in ServiceM8 no longer blocks the whole contact; we drop the bad field and sync the rest.
  • Readable errors — GoHighLevel returns errors as a list, which we were flattening into the word "Array". Real messages now reach the sync log.
  • Queue worker hardening — a single-run lock stops overlapping cron runs, and a fatal error can no longer strand items mid-queue.

Seeing what's going on

  • Sync preview — pick a real job card and see exactly what would be sent, including the stage and tags, without sending it.
  • Backfill — bring historical job cards across on request, rather than waiting for them to change.
  • Sign-in history — last sign-in, first seen, and recent activity per account, with failed attempts recorded.

v2.0.0

Beta launch 19 March 2026

The platform rebuild: one-way ServiceM8 → GoHighLevel sync, per-customer field mapping, and a queue that keeps going when something goes wrong.

Sync engine

  • Companies become contacts, jobs become opportunities — everything attached to a job card is gathered up and lands as fields on those two records.
  • Checked every five minutes — changes in ServiceM8 are picked up automatically.
  • Entity linking — a permanent record of which ServiceM8 job belongs to which GoHighLevel opportunity, so the same card is updated rather than duplicated.
  • Retries — a failed item is tried again rather than dropped.

Field mapping

  • Per-customer mapping — every account decides which ServiceM8 details land in which GoHighLevel fields.
  • Transforms — uppercase, lowercase, phone formatting, date formats, number and boolean conversion.
  • Conditional rules — if a job matches a condition, set a field or add a tag.

Security

  • Encrypted credentials — ServiceM8 and GoHighLevel keys are stored encrypted, never in plain text.
  • Read-only on ServiceM8 — nothing is ever written back to your job cards.
  • Separated accounts — each customer's data is scoped to their own account.

Logging and monitoring

  • Sync log — every sync recorded with what was sent, what came back and how long it took.
  • Queue view — see what's waiting, what's running and what failed.

Roadmap

What we're working on next.

Next up

  • Sign up and pay online, with your account opened automatically
  • Plain-English sync errors, grouped by cause, so you can see what actually needs fixing
  • Attachments on a job card across to GoHighLevel

Tell us what you need

Most of what's on this page came from someone asking for it. If TradesSync doesn't do something you need, say so and we'll look at it.