Offline Conversions
How do you send ServiceM8 jobs back to Google Ads as offline conversions?
By Rifat Mia, conversion tracking specialist. Updated October 27, 2026
Short answer
You capture the Google click ID (GCLID) when the lead arrives, carry it into ServiceM8 with the enquiry, and when the job reaches a status that means real money (a Work Order, a completed job, or an invoice) you send that job back to Google Ads as an offline conversion. Google Ads then knows which keywords and campaigns produce paying jobs, not just phone calls and form fills.
Why aren't form fills and calls enough for trade businesses?
Plumbers, roofers, electricians and other trades running on ServiceM8 usually track two things in Google Ads: form submissions and phone calls. Both are useful, but neither tells Google which leads turned into paid work. A price shopper who rings for a quick quote counts the same as a customer who books a full roof replacement.
When Smart Bidding only sees leads, it optimises for more leads. That often means cheaper, lower intent searches. When it sees which clicks became Work Orders and invoices, it can bid harder on the searches that actually make you money. Offline conversion tracking closes that loop.
What does the ServiceM8 to Google Ads pipeline look like?
Every setup I build follows the same five stages. The tools in the middle change depending on the business, but the logic does not.
- 1
Capture the click ID on the website
A small script stores the gclid (plus gbraid, wbraid and UTM values) in a first-party cookie when someone lands from an ad, then writes it into hidden fields on your enquiry and booking forms.
- 2
Carry it into ServiceM8 with the lead
The form submission, or a CallRail call record, lands in ServiceM8 with the click ID attached. Depending on how leads enter your account, it ends up in the job description, a job note, a custom field, or the Inbox message that gets converted into a job.
- 3
Trigger on the job status you care about
A ServiceM8 webhook fires when a job changes status. Most trades businesses treat Work Order as a qualified lead and Completed or invoiced as the sale, with the invoice total as the conversion value.
- 4
Look up the full job and match the click
The webhook only says something changed, so the pipeline calls the ServiceM8 API to read the job, its contact (email and phone sit on the job contact record, not the company), and the original attribution data.
- 5
Send the conversion to Google Ads
The matched record goes to Google Ads as an Import from clicks conversion, with hashed email and phone added for Enhanced Conversions for Leads so jobs without a click ID can still match.
Should you use server-side GTM or a Google Sheet import?
There are two reliable ways to do the last step, and I have shipped both in production.
- Google Sheet plus scheduled import: a Google Apps Script receives the ServiceM8 webhook, enriches the job through the API, and writes a row into a Google Sheet. Google Ads reads that sheet on a daily schedule. It is cheap, transparent and easy for the client to audit, but conversions land once a day.
- Server-side GTM on Stape: the webhook goes straight into a server-side Google Tag Manager container on your own subdomain. A custom client parses the payload and tags send it to Google Ads, GA4 and, if you want, the Meta Conversions API. It is near real time and scales to several ad platforms from one event.
If you only advertise on Google and want the lowest running cost, the Sheet route is hard to beat. If you also run Meta ads, or you want one place to manage every conversion, server-side GTM is the better long term choice. I will tell you which one fits before any work starts.
Do you need Zapier or Make for ServiceM8 offline conversions?
No. Zapier can move data between CallRail and ServiceM8, and many businesses already use it for that. For the conversion upload itself, a direct webhook into Apps Script or server-side GTM is more reliable, cheaper per event, and keeps the click ID logic in one place you control. If you already have a Zapier step in the chain I work with it rather than ripping it out, but I do not add new paid automation steps unless they are genuinely needed.
What usually breaks in ServiceM8 attribution?
Most of my time on these projects goes into finding where the click ID gets lost. The common culprits are:
- The website never captured the gclid in the first place, so there is nothing to send back.
- The form tool emails the lead into ServiceM8, and the UTM and gclid values end up buried in the job diary or Inbox message text rather than a structured field.
- Staff create jobs by hand from phone calls, so the call tracking data never reaches the job.
- Consent Mode blocks the ad cookies, so the click ID is missing for visitors who declined. Enhanced Conversions with hashed contact details helps recover part of this.
- The Google Ads conversion action is set to the wrong source or counting method, so uploads are rejected or double counted.
How long until Google Ads shows ServiceM8 conversions?
Build and testing usually takes a few working days once I have access to ServiceM8, Google Ads, GTM and the website. After that, data only appears for clicks that happened after click ID capture went live. Old jobs cannot be backfilled if their gclid was never stored. Plan on a few weeks of fresh data before you switch bidding to optimise on the new conversion actions.
FAQ
Frequently asked questions
Can ServiceM8 send conversions to Google Ads natively?
No. ServiceM8 has webhooks and a REST API but no built-in Google Ads conversion upload, so you need a small pipeline using Apps Script, server-side GTM or an automation tool to send won jobs back to Google Ads.
Which ServiceM8 job status should count as a conversion?
Most trade businesses send Work Order as a qualified lead conversion and Completed or invoiced as the sale conversion, using the invoice amount as the value. Bid on the stage that best reflects real revenue and has enough volume.
What if a job has no GCLID?
Send hashed email and phone with Enhanced Conversions for Leads. Google can then match the job to a signed-in ad click even without a click ID, which recovers part of the jobs that would otherwise be lost.
Can past ServiceM8 jobs be uploaded to Google Ads?
Only if their click ID or contact details were captured and the click is still within the conversion window, which is at most 90 days. Jobs from before click ID capture went live usually cannot be backfilled.
Does this work with CallRail phone leads?
Yes. CallRail records the click ID for calls from tracked numbers. When that call becomes a ServiceM8 job, the click ID travels with it and the job can be uploaded the same way as a web form lead.
Want ServiceM8 jobs feeding your Google Ads bidding?
Send me your setup and I will map where the click ID is getting lost and which pipeline fits your account.
Get in touch