Google Ads Offline Conversion Import for Home Services: Step-by-Step with ServiceTitan, Jobber and HubSpot

By Serhii Halchuk, Founder & CEO of Leads4Build
Digital marketing entrepreneur with 12+ years helping home service businesses grow through search, paid ads and local marketing.

10/27/2026
16 min
Google Ads
Author - Founder & CEO of Leads4Build
Serhii Halchuk

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.

90 dayshow long Google keeps a GCLID for imports
14 dayswindow when Data Manager imports from HubSpot
4 to 6 hourswait after creating a conversion action before the first upload
55 dayshow long you can adjust or restate an uploaded conversion

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.

1

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=.

2

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.

3

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.

4

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.

5

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.

6

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.

7

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 upHubSpot: Marketing > Ads > Create > Conversion eventGoogle Ads: Goals > Summary > New conversion action, HubSpot as the source
What triggers a conversionA lifecycle stage change, or a HubSpot form submissionContacts matching conditions on the Lifecycle Stage field
How the contact is matchedThe “Google Ad click id” property, or email, phone or address shared with GoogleFields mapped automatically from HubSpot
ValueOne fixed value per event; Deal amount is no longer availableSet in the conversion action
Limits to knowStarter: 5 events, Professional: 50, Enterprise: 100. Counts only stage changes after you create the eventLooks 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

ServiceTitanHubSpotJobber
Native Google Ads conversion syncYes, in Marketing (ServiceTitan Max)Yes, through the ads tool or Data ManagerNone found; Zapier or a Google Sheet
How calls get a click IDIts own DNI call trackingNeeds separate call trackingNeeds separate call tracking
What triggers a conversionBooked job; completed job with Ads OptimizerLifecycle stage change or form submissionAny Zapier trigger: quote, job, invoice
Job valueRevenue via Ads Optimizer, or predicted value via Job Value PredictorOne fixed value per eventWhatever you map in the Zap
Biggest setup riskDNI script missing, so calls never postStages used loosely, or deals not moving lifecycle stageClick 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 seeWhat it meansThe fix
Conversions upload but none matchThe GCLID never reached the CRM, or was changed on the wayRun 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 zoneAdd 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 clickRe-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 twiceTwo actions fire for one customer (a form action and a booked action both primary), or the same job is sent by two routesOne 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 nameThe name in the file or Zap does not match the actionUse “the same spelling and capitalization” as the action in Google Ads
A job value or status was wrong after uploadSomeone corrected the job in the CRM laterConversion 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.

Frequently Asked Questions About Google Ads Offline Conversion Import

How do I import offline conversions into Google Ads?

Turn on auto-tagging, capture the GCLID on every lead form, store it on the lead in your CRM, create an offline conversion action for each job stage under Goals, and connect a data source: a CRM integration, Zapier, or a scheduled Google Sheet or file in Data Manager. Wait 4 to 6 hours after creating the action before the first upload.

Yes. ServiceTitan’s Google Ads integration, included with Marketing in ServiceTitan Max, sends a conversion when a job is booked, matched by the GCLID. Call conversions only post if ServiceTitan’s dynamic call tracking (DNI) is set up on your website. Job revenue goes back through Ads Optimizer or Job Value Predictor.

We did not find a native connector in Jobber’s help center. The common route is a Jobber custom field that stores the GCLID and a Zapier workflow that uses a Jobber trigger, such as Quote Approved or Job Closed, with the Google Ads Send Offline Conversion action. Google says Zapier imports need a paid Zapier account.

Two ways: HubSpot’s ads tool can create conversion events from lifecycle stage changes or form submissions, with a fixed value per event, or Google Ads Data Manager can connect to HubSpot and import contacts by Lifecycle Stage. Use one route per stage so jobs are not counted twice.

Google keeps the GCLID for 90 days. File, Google Sheets and SFTP sources in Data Manager look back 90 days on every run; HubSpot and Salesforce connections look back 14 days on the first run and then import changes.

Usually a time zone problem: the conversion time was exported in a different zone than Google assumed, so the job looks older than the click. Add a time zone to the conversion time, preferably a time zone ID such as America/Chicago, which Google recommends to avoid daylight saving errors.

Google recommends enhanced conversions for leads for anyone starting fresh and calls click-ID import a legacy feature. Both start from the same groundwork: capturing the GCLID and the customer’s email and phone on every lead and keeping them in your CRM.

Want Google Ads to Bid on Booked Jobs?

Get a Free Conversion Tracking Review

Book your FREE strategy session today

Complete the form below to help us prepare a custom growth strategy for your business.
After submission, you’ll be able to schedule your session instantly.

✓ 30-Minute Deep-Dive Strategy Session
✓Custom Market Analysis
✓Competitor Research Included
















    Your information is secure and will never be shared