TL;DR: Google Ads offline conversion import lets you tell Google which ad clicks turned into booked or sold jobs, days or weeks after the lead came in. The setup: capture the Google click ID (GCLID) on every form and tracked call, keep it on the customer record, and send each job stage back with its time and value. ServiceTitan does most of it inside its Google Ads integration once dynamic call tracking is live. HubSpot has two routes: its own ads tool or Google’s Data Manager. Jobber has no built-in Google Ads connector that we could find, so the usual route is a custom field plus Zapier.
Sources: Google offline conversion import FAQs, Google GCLID import setup, read October 27, 2026.
Who this is for: whoever runs Google Ads for a home service business and wants it to bid on jobs, not form fills. For the why, and how Meta fits in, start with our overview of offline conversion tracking for contractors. This guide is the setup.
One decision first. Google now calls click-ID import a legacy method and says: “If you have not already adopted offline conversion import, we recommend starting with enhanced conversions for leads instead” (Google Ads Help). Enhanced conversions for leads matches on the customer’s hashed email and phone instead; the GCLID is only required when no tag collects that data, and Google still recommends sending it (Google). So capture both: the groundwork below is the same either way, and ServiceTitan’s integration runs on the GCLID. Use one method per job stage, not both, so a job is not counted twice.
Before you start: what to have ready
- Admin access to Google Ads and to your CRM. Data Manager also needs Editor access if you use a Google Sheet as the source (Google Data Manager).
- Access to your website forms or to the person who edits them. Google lists “You can make code changes to all of your web pages” as a requirement (Google).
- Your job stages, written down. Which CRM status means “booked”, which means “sold”, and where the dollar value lives. Decide what never counts: out-of-area calls, price shoppers who did not book, and, if you are buying new customers, jobs for existing customers. Only the stages you send become conversions.
- Your typical time from click to job. A drain call books the same day; a roof replacement can take weeks to sign. Some data sources only look back 14 days.
- Who does what. The office owns call outcomes and job statuses. Whoever runs your ads owns the conversion actions and the weekly diagnostics check. Whoever edits your website owns the tags, hidden fields and call tracking script.
- Your account time zone. Find it in Google Ads account settings. Most upload errors in the first week are time zone errors.
The core setup, whatever CRM you use
These steps are the same for any CRM. The sections after this mostly change step 5.
Turn on auto-tagging. In Google Ads, auto-tagging adds a GCLID to the landing page address of every ad click. Google lists “You’ve enabled auto-tagging” as the first requirement for click-based imports (Google). Click your own ad and check the landing URL contains gclid=.
Capture the click ID on every form. Add a hidden field to each lead form. Google’s example is:
<input type="hidden" id="gclid_field" name="gclid_field" value="">
Then add Google’s sample script (on the same help page) to every page, or as a Custom HTML tag in Google Tag Manager. It keeps the GCLID for 90 days and fills the hidden field when the visitor submits, even several pages later (Google, GCLID setup). Capture gbraid and wbraid too: some iPhone traffic arrives with those instead of a GCLID (Google Ads API docs). Embedded booking widgets are the usual leak: your script cannot fill a form inside someone else’s frame.
Store it on the lead in your CRM. Create a plain text field for the GCLID (plus GBRAID and WBRAID) on the lead or customer record and map the hidden field into it. Never edit the value by hand. The GCLID is case sensitive, and a lowercased or trimmed ID will not match.
Create one offline conversion action per job stage. In Google Ads go to Goals > Summary > Create conversion action > Conversions offline, then add or skip the data source (Google). Name each after the stage (“Booked job”, “Sold job”) and set them as secondary for now. A secondary action is “for observation only”; a primary one is “used for bidding” (Google, primary and secondary). Set the conversion window to cover your sales cycle: “anywhere from 1 to 90 days, depending on the source of conversions” (Google, conversion windows). Wait 4 to 6 hours before the first upload, or conversions “might take 2 days” to show.
Connect the data source. Your CRM section below covers the options. Pick by your sales cycle: Data Manager imports from Google Sheets, SFTP, HTTP and cloud storage look back 90 days on every run, while HubSpot and Salesforce connections import “the last 14 days of data in the first successful run” and then the changes since (Google). If jobs sell more than two weeks after the click, a 14-day source misses them.
Test with a real lead, then read the results. Click your own ad (it costs one click), submit a form as a clearly labelled test contact, check the GCLID reached the CRM, move the lead to “booked” and watch it arrive. Google’s advice for checking accuracy: “Make sure to use the results file since some conversions may have been rejected” (Google FAQs). Remove test conversions with an adjustment so they do not train bidding.
Switch bidding only when the numbers match. Compare booked jobs in Google Ads with Google-sourced booked jobs in your CRM, week by week. A gap on calls points to call tracking; a gap on forms points to the hidden field. When they line up for several weeks, make the job stage primary and the lead actions secondary, and expect a learning period.
ServiceTitan: the built-in Google Ads integration
ServiceTitan has a native integration, and it does a lot for you: “ServiceTitan sends a conversion signal to Google Ads” when a job is booked, matched by the GCLID (ServiceTitan Help). It “is part of Marketing and is included in your ServiceTitan Max subscription”, and ServiceTitan notes that “Account configuration is required to activate this feature”, so ask your ServiceTitan contact to confirm it is switched on for your account before you start.
Connect it
- Go to Marketing > Connect Now on the Marketing Overview screen, or Settings > Integrations > Marketing Integrations and click Configure next to Google Ads.
- Click Sign in, pick the Google account, click Allow, select the Google Ads account, click Link, then Next.
- Campaign mapping: “Auto-Map is enabled by default.” Click Finish, then View Ads Performance.
The part most setups miss: dynamic call tracking
Most home service leads are calls, and ServiceTitan ties a call to a click through dynamic number insertion (DNI): “When the visitor calls a DNI number, ServiceTitan stores that GCLID and assigns it to the caller.” This needs the Google tag and ServiceTitan’s DNI script on your site. ServiceTitan is blunt about it: “Setting up Google Ads without DNI means call-based conversions won’t post”, and the integration “isn’t complete until” both Dynamic Call Tracking using DNI and Google Analytics are configured. Their troubleshooting line is the first thing to check: “If no GCLID is captured, check your website’s DNI script deployment before running live campaigns.”
What it creates in Google Ads, and what it leaves alone
- “When the first conversion happens, ServiceTitan automatically creates a Phone Call Conversion Action.” You do not build step 4 by hand for this one.
- “ServiceTitan does not edit or affect your existing Google Ads conversions.” Your old call and form actions keep counting, so decide which stay primary, or you will count the same customer twice.
- Calls from call assets (call extensions) are not sent by ServiceTitan, to avoid duplicates; Google’s own “Call from Ads” action covers those.
- “If the call ends as Excused (outside your service area), it won’t be sent as a conversion.” Your CSRs’ call outcomes now feed bidding.
Job values: Ads Optimizer and Job Value Predictor
The standard booked-job signal does not carry revenue. Revenue comes through Ads Optimizer, which sends completed jobs with “Total job revenue” as the value, and Job Value Predictor, where “The predicted revenue at time of booking is sent as the conversion value.” ServiceTitan advises turning on Job Value Predictor only once conversion volume is established, and to “Wait at least three weeks after activating JVP before measuring performance changes” (ServiceTitan Help). Check which your plan includes.
Expect the dates to differ: “Google Ads imports conversions to the date of the ad impression”, while ServiceTitan reports by job date. Compare weeks, not days.
HubSpot: two ways to send lifecycle stages to Google Ads
HubSpot gives you a choice, and both run on lifecycle stages. Pick one per stage, not both, or the same job arrives twice under two names.
| HubSpot ads tool (from HubSpot) | Data Manager connection (from Google Ads) | |
|---|---|---|
| Where you set it up | HubSpot: Marketing > Ads > Create > Conversion event | Google Ads: Goals > Summary > New conversion action, HubSpot as the source |
| What triggers a conversion | A lifecycle stage change, or a HubSpot form submission | Contacts matching conditions on the Lifecycle Stage field |
| How the contact is matched | The “Google Ad click id” property, or email, phone or address shared with Google | Fields mapped automatically from HubSpot |
| Value | One fixed value per event; Deal amount is no longer available | Set in the conversion action |
| Limits to know | Starter: 5 events, Professional: 50, Enterprise: 100. Counts only stage changes after you create the event | Looks back 14 days on the first run, then imports changes |
Sources: HubSpot Knowledge Base (updated October 12, 2026) and Google, HubSpot as a data source.
Route A: the HubSpot ads tool
- Connect your Google Ads account in HubSpot. Manager (MCC) accounts cannot sync these events through enhanced conversions, so connect each client account on its own.
- Go to Marketing > Ads, click Create and choose Conversion event. Pick Lifecycle stage change and the stage, for example Opportunity for “estimate booked” and Customer for “sold”.
- Set the value. HubSpot’s advice: “Choose a representative amount, such as your average deal size, rather than each deal’s actual revenue.”
- In Google Ads, the “Included in account-level goals” setting “must be set to Yes for each ad event” for the data to sync.
- Check that new contacts from Google ads have the Google Ad click id property filled in. If not, add the step 2 hidden field.
One trap: “Only lifecycle stage changes that occur after creating the conversion event in HubSpot will be counted.” There is no backfill, so create the events before a busy season, not during it.
Route B: Google Ads Data Manager
In Google Ads go to Goals > Summary > New conversion action, pick HubSpot as the data source, sign in and accept Google’s customer data policy. Add conditions (“all conditions must use the Lifecycle Stage field”), review the automatic field mapping and save.
If your sales stages live in HubSpot deals rather than contact lifecycle stages, you need a workflow that moves the contact’s lifecycle stage when the deal moves.
Jobber: custom field plus Zapier
We could not find a native Google Ads conversion connector in Jobber’s help center (checked October 27, 2026); the Google integration it documents is for Local Services Ads, a different product. The working route for regular Google Ads campaigns is a custom field to hold the click ID, and Zapier to send job stages to Google.
Store the click ID in Jobber
- Create a Text custom field, for example “GCLID”, on Clients: Gear icon > Settings > Custom Fields. Jobber notes “Custom fields are available on select plans” (Jobber Help Center), so check yours first. Fields are internal by default, which is what you want.
- Get the GCLID from your website form into that field. If your form is not Jobber’s own, a Zap can create the client and fill the field; if it is Jobber’s request form, test first whether it can pass a hidden value.
Build the Zap
- Pick the Jobber trigger that matches the stage you want Google to see. Zapier lists Quote Sent, Quote Approved, New Job Created, Job Closed, New Invoice Created and others (Zapier, Jobber and Google Ads). For most service businesses, Quote Approved or New Job Created is “sold”; Job Closed is “completed”.
- Add the Google Ads action Send Offline Conversion. Zapier’s ready-made template, “Track closed jobs in Jobber by sending offline conversions in Google Ads”, marks the account, “Conversion User Identifier Source”, “Conversion Action” and “Timestamp” as required, with value and currency optional (Zapier template).
- Choose the identifier you stored (the GCLID from your custom field, or the customer’s email), the conversion action from step 4, and map the timestamp from the Jobber event, not the time the Zap runs.
- For value, map the amount from the quote or invoice the Zap fires on, and check in Zapier’s test step that a real number comes through.
Google’s own Zapier page lists the requirements: “You need a paid Zapier account”, “Your CRM must store the Google Click ID (GCLID) or the email addresses of your leads”, and the conversion action must use “Import from Click” as its source (Google Ads Help).
Long sales cycles: a scheduled Google Sheet also works. Export approved quotes with GCLID, approval time and amount, and connect the sheet in Data Manager, which looks back 90 days and reads only the first tab (Google).
Phone leads have no form to carry a GCLID. Use call tracking that writes the click ID into the client record, or Google’s phone call conversion import, which matches the caller’s number and call time for calls through Google forwarding numbers.
ServiceTitan vs HubSpot vs Jobber at a glance
| ServiceTitan | HubSpot | Jobber | |
|---|---|---|---|
| Native Google Ads conversion sync | Yes, in Marketing (ServiceTitan Max) | Yes, through the ads tool or Data Manager | None found; Zapier or a Google Sheet |
| How calls get a click ID | Its own DNI call tracking | Needs separate call tracking | Needs separate call tracking |
| What triggers a conversion | Booked job; completed job with Ads Optimizer | Lifecycle stage change or form submission | Any Zapier trigger: quote, job, invoice |
| Job value | Revenue via Ads Optimizer, or predicted value via Job Value Predictor | One fixed value per event | Whatever you map in the Zap |
| Biggest setup risk | DNI script missing, so calls never post | Stages used loosely, or deals not moving lifecycle stage | Click ID never reaches the client record |
Picking or switching software? Our roundup of home service marketing tools covers the field service, CRM and call tracking options contractors use most.
Common errors and how to fix them
The error text in quotes is Google’s (Google FAQs, Google, file imports).
| What you see | What it means | The fix |
|---|---|---|
| Conversions upload but none match | The GCLID never reached the CRM, or was changed on the way | Run the test in step 6. Check booking widgets, chat and phone leads, which often skip the hidden field |
| “Conversion date precedes click date.” | Almost always a time zone mismatch: your CRM exports local time without saying which zone | Add a time zone to the time, such as Parameters:TimeZone=America/Chicago in a file, or a format like “yyyy-MM-dd HH:mm:ssZ”. Google recommends a time zone ID to “avoid errors during daylight savings time transitions” |
| “We are still processing this click’s information, please re-upload this conversion in 12 hours.” | The job was booked very soon after the click | Re-upload later. Google suggests uploading an extra day of data with each scheduled import so these get picked up |
| “This click is too old for its conversion to be imported.” | “We retain the GCLID for only 90 days.” | Bid on an earlier stage, such as booked estimate, for long sales cycles. See our guide to Google Ads for remodelers |
| The same job counted twice | Two actions fire for one customer (a form action and a booked action both primary), or the same job is sent by two routes | One route per stage; old lead actions secondary. Google drops exact repeats: “If there is a GCLID+Conversion_Name+Conversion_Time combination already in our system”, the duplicate is not reported. A second real sale to the same customer needs its own timestamp |
| Rows rejected for the conversion name | The name in the file or Zap does not match the action | Use “the same spelling and capitalization” as the action in Google Ads |
| A job value or status was wrong after upload | Someone corrected the job in the CRM later | Conversion adjustments can restate values “up to 55 days from when the conversion was first recorded” |
Keep it running
Uploads fail quietly, so name one person to check the conversion diagnostics in Google Ads every week. If you moved CRMs, for example from Jobber to ServiceTitan, switch off the old Zaps, form scripts and conversion actions too, or they keep firing next to the new ones. You are also sending customer data to Google: mention it in your privacy policy and observe “local regulations regarding cookie consent” (Google). If you would rather hand the setup to someone, it is part of our Google Ads management for contractors work, where we report on booked jobs, and our CRM and marketing automation service covers the CRM cleanup that usually comes first.
The bottom line
The Google Ads side of offline conversion import is the quick part. The CRM side takes longer: a click ID that survives the form, a field to keep it in, job stages your office uses the same way every day, and a value you trust. ServiceTitan users mostly need DNI working; HubSpot users need clean lifecycle stages; Jobber users need a custom field and a Zap. Run the test lead, compare the counts for a few weeks, and only then let Google bid on jobs.
About the sources: each step links to the vendor page it comes from. The main ones are Google’s GCLID import setup, Google’s offline conversion import FAQs, ServiceTitan’s Google Ads integration guide and HubSpot’s Google Ads conversion events guide. All read October 27, 2026. Menu names change often, so check the linked page if a button has moved.