Book Free Audit

A lead is not the same thing as a booked appointment, and Google Ads cannot tell the difference unless you teach it. If you bid against form fills and call counts, the algorithm faithfully buys you more of both. The problem is that more form fills and more call counts is not what pays your crews. Booked appointments do.

The fix is not exotic. It is offline conversion imports, plus enhanced conversions for leads, plus a daily upload cadence that ties booking-software data back to the original click. Done correctly, Smart Bidding shifts from optimizing for “anyone who calls” to “people who actually book,” and the difference shows up in CPL and ROAS within a quarter.

This post walks through what appointment tracking is, how to capture gclid through the booking process, how the major booking platforms (ServiceTitan, Housecall Pro, Jane, Clio, MyCase) connect, and what the daily cadence has to look like to actually move performance.

Why “leads” is the wrong optimization target

The standard Google Ads conversion setup for a service business counts a phone call over 60 seconds plus a contact form fill. Both are top-of-funnel signals. They are not the unit of business value, which is a booked appointment with a real client at a real time.

When you optimize against top-of-funnel signals, you get top-of-funnel buyers. The algorithm starts favoring keywords and audiences that produce a lot of calls and forms regardless of whether those people show up on the schedule. Cost per lead looks fine. Cost per booked appointment is much worse than you think.

Operators we audit typically discover, when we run the numbers, that 35 to 55% of “leads” never book. Some are out-of-area. Some are price shoppers. Some are wrong-fit prospects who self-disqualify on the discovery call. The keywords driving those non-bookers are usually different from the keywords driving real bookers, and Google has no way to know that unless you tell it.

What appointment tracking actually means

Appointment tracking means tying every click on a Google ad to a row in your booking software, and pushing the booking outcome back to Google with the original click identifier attached. The technical name for the click identifier is gclid (Google Click Identifier). It is a unique string Google appends to every URL clicked from an ad.

The architecture has three parts. First, capture the gclid the moment a visitor lands and store it. Second, carry the gclid through to your booking software so that when an appointment is booked, you know which click produced it. Third, upload that booked appointment back to Google Ads as an offline conversion, on a daily or hourly schedule.

When this is working, Google Ads stops reporting “23 form leads” and starts reporting “14 booked appointments worth $42,300 in pipeline.” That is the data Smart Bidding needs.

Capturing gclid on every form, call, and booking

Gclid capture is the foundation. Without it, the rest of the system has nothing to attribute. The reliable pattern is: set up Google Tag Manager to read the gclid from the URL on landing, write it to a first-party cookie with a 90-day lifetime, and copy it into a hidden field on every form, chat widget, and booking embed.

For phone calls, CallRail, WhatConverts, and similar providers handle gclid capture automatically through their dynamic number insertion script. The provider stores the gclid against the caller’s phone number and exposes it through their API or their native Google Ads integration.

For direct-to-calendar bookings (ScheduleEngine, Housecall Pro book-online, ServiceTitan online scheduling), you need the embed configured to read the gclid cookie and pass it as a custom field on the booking record. Most platforms support this with a small configuration change. The mistake we see most often is a booking widget on a subdomain that does not share cookies with the main site, which drops gclid on every booking.

Connecting ServiceTitan, Housecall Pro, Jane, Clio, and MyCase

The five platforms cover most of home services, healthcare practices, and legal practices. The mechanics differ but the principle is the same: extract booked appointments with their gclid and upload to Google Ads daily.

ServiceTitan. Has a native Google Ads integration that handles offline conversion imports when gclid is stored as a custom field on the customer or job record. You configure the field once, set the trigger (job booked, job completed, or job converted to revenue), and ServiceTitan pushes events on the schedule you set. We recommend triggering on job booked, not job completed, because Smart Bidding wants signal as soon as possible.

Housecall Pro. No native Google Ads import. The clean route is Zapier or Make connecting the “new job” event to Google’s Offline Conversion API, with the gclid pulled from a custom field. About a half-day of setup, then it runs.

Jane. Healthcare booking platform widely used by physiotherapists, chiropractors, and mental-health practices. Custom intake fields capture gclid; a small middleware (Make or Zapier) pushes booked-appointment events to Google. Trigger on first-appointment booked, not on intake form, because the intake form is the lead, not the conversion.

Clio and MyCase. Both legal practice management platforms. Intake forms accept hidden fields including gclid. The conversion event should fire on “consultation scheduled” or “client retained,” depending on what your firm is optimizing for. Both have webhook support, so the middleware setup is straightforward.

In every case the cadence matters more than the platform. A daily upload runs at midnight local and pushes every booked appointment from the previous 24 hours. Hourly upload is better if your booking software supports it, because Smart Bidding adjusts faster on fresher data.

Enhanced conversions for leads, in practice

Enhanced conversions for leads is Google’s mechanism for matching offline conversions back to clicks using hashed personal identifiers (email, phone number) instead of, or in addition to, gclid. It is more forgiving than gclid-only matching because it still works when gclid is missing or expired.

For appointment tracking, enable both. Send gclid when you have it, and send hashed email and hashed phone with every conversion event. Google matches on gclid first, falls back to hashed identifiers, and reports a higher overall match rate. We typically see match rates jump from 65 to 70% on gclid-only setups to 88 to 95% with enhanced conversions layered in.

The implementation detail to watch is hashing. Identifiers must be normalized (lowercase, trimmed) and hashed with SHA-256 before upload. Most middleware tools do this automatically. If you are pushing through your own scripts, validate the hash format against Google’s spec or your match rate will be zero.

What the algorithm does with booked-appointment data

The short version: Smart Bidding stops bidding against “people who might call” and starts bidding against “people who behave like the ones who booked.” That changes everything downstream.

Within the first two weeks of clean offline conversion data flowing in, Google has enough signal to start shifting bids. Within four to six weeks, you typically see the following pattern: cost per click stays roughly flat, cost per lead rises slightly (because the algorithm is filtering out cheap-but-low-quality clicks), and cost per booked appointment drops 20 to 35%. ROAS climbs even faster because the booked appointments are also higher-value on average.

We have run this on enough accounts to set expectations: at 90 days, CPL in home services typically lands in the $88 to $130 range with appointment-level optimization, versus $150 to $220 with lead-only optimization. CAC drops about 30%. These are not theoretical numbers, they are the median across the accounts we manage that have crossed the 30-booking-per-month threshold.

Common ways this breaks

The setup is more fragile than agencies admit. The most common failure modes:

Subdomain cookie loss. Booking widget runs on a different subdomain than the landing page. Cookies are scoped to subdomain, gclid never carries over, every booking imports with no attribution. Fix by serving the widget on the same domain, or by passing gclid as a URL parameter to the widget.

Gclid expired at upload. Google requires gclid uploads within 90 days. Sales cycles longer than 90 days drop attribution. For long-cycle businesses (legal, B2B services) you must use enhanced conversions with hashed identifiers, because gclid alone will not work.

Duplicate counting. A lead that comes in as both a call and a form fill, then converts to a booked appointment, can fire three conversion events. Smart Bidding will overvalue those keywords. Deduplicate on the booking record by attaching one conversion per booked appointment.

Stale uploads. Daily upload that runs at 3 a.m. is fine. Weekly batch upload is not, because Smart Bidding cannot adjust on a one-week lag. If you cannot get to daily, get to twice a week and accept the slower learning.

What to install this week

Start with gclid capture. Get the first-party cookie and the hidden form fields working before you touch anything else. Then connect your booking platform to Google Ads through whichever path your platform supports, with a daily trigger on appointment booked. Then turn on enhanced conversions for leads with hashed email and phone.

Once the data is flowing, switch your primary conversion action in Google Ads from “lead” to “booked appointment” and let Smart Bidding rebuild around the new target. Expect two weeks of softer numbers while the algorithm relearns, then steady improvement through the next 60 days.

Get a Free Google Ads Audit

If your booking data is sitting in ServiceTitan or Housecall Pro and never reaching Google Ads, you are paying full price for half the signal. Request a free Google Ads audit and we will map exactly what is missing and what to do first.


About RYN Digital. RYN Digital is a Google Ads and Local Services Ads agency for home services and other appointment-driven businesses. We install real call and appointment tracking, optimize accounts daily, and stand up new campaigns inside 72 hours. Clients typically see 20 to 30 qualified leads a month at an $88 to $130 cost per lead with roughly 2x return on ad spend.


Related reading:
Google Ads for HVAC Contractors
Google Ads Call Tracking
Case Studies
Free Google Ads Audit

Frequently Asked Questions

How long does gclid stay valid for offline conversion uploads?

Google accepts gclid-based offline conversions within 90 days of the original click. After 90 days the gclid is considered expired and the upload fails. For longer sales cycles, send enhanced conversions with hashed email and phone instead of, or in addition to, gclid.

Do I need a developer to connect Housecall Pro or ServiceTitan to Google Ads?

For ServiceTitan, no. Its native Google Ads integration handles the upload once gclid is configured as a custom field. For Housecall Pro and most other platforms without native integration, expect about four to eight hours of work in Zapier or Make, which a competent operations person or agency can do without a developer.

Should I trigger conversions on appointment booked or job completed?

Trigger on appointment booked. Smart Bidding learns faster on fresher data, and waiting for job completed introduces a multi-week delay that slows optimization. If you want value-based bidding, upload an estimated value at booking and a corrected value once the job closes.

What if my booking software does not support custom fields?

You have two options: switch to a platform that does, or move the booking step to a form you control (Gravity Forms, HubSpot, Typeform) that captures gclid and then hands off to the booking platform. The second route adds friction but is workable for businesses that cannot migrate.

Will Smart Bidding work if I only get 10 booked appointments a month?

Marginally. Google’s bidding models prefer at least 30 conversions per month per campaign for stable optimization. Below that, expect higher variance and slower learning. You can compensate by combining appointment conversions with high-quality lead events under a single conversion action, then transitioning to appointment-only once volume crosses 30.