A commercial HVAC and building-maintenance contractor (name anonymised) lived on the phone. Emergency repairs paid the bills, but the profitable work was recurring service agreements for offices, clinics and warehouses, and nobody could say which ads brought those. We separated urgent searches from planned-maintenance searches, put every call and quote request into HubSpot, and automated the follow-up that used to depend on whoever had time. This is a composite case: client details are anonymised and illustrative, and no measured figures are implied.
Ad spend now answers to contracts and renewals, not to the number of calls

The contractor maintained heating, cooling and ventilation for commercial buildings. A broken chiller on a hot Friday produced a flood of calls; a facility manager planning next year’s maintenance produced a quiet form fill that nobody noticed. Google Ads treated both the same. One campaign bought every keyword with “HVAC” in it, so a large share of the budget went to homeowners looking for a quick repair, students looking for a job and people searching for parts.
The phone rang, which felt like success, but calls were logged on paper or in a shared inbox, and nobody knew how many became a quote, how many quotes became a contract or how many contracts renewed. Quotes were written by two senior estimators between site visits, so many waited days and some were never chased. Service agreements expired quietly, and the first sign was often a customer who had gone elsewhere.
The owners were spending more every quarter on ads and could not answer the one question that mattered: which clicks turn into agreements worth keeping?
We rebuilt the Google Ads account around what the searcher needed. Emergency and same-day repair terms run in their own campaigns, scheduled for hours when dispatch can answer and limited to the service area. Planned-maintenance, retrofit and service-agreement terms run separately, with copy and landing pages written for facility managers. Residential, jobs and parts searches were excluded.
Call tracking and form submissions now create or update a contact and company in HubSpot, with the campaign, keyword and landing page attached. The office no longer relies on a paper log: each enquiry is a record with an owner and a next step.
The HubSpot pipeline runs from enquiry to site visit, quote, signed agreement and renewal, with defined exit criteria at each stage. Deals carry building type, equipment and agreement value, so reports show revenue by campaign and by customer segment instead of calls by day.
With AI automation, a quote request triggers a same-day acknowledgement, a draft summary of the site notes for the estimator and a sequence of reminders until the customer answers. Renewals are flagged months ahead, and signed agreements return to Google Ads as the conversions worth optimising for.
We sat with the office team, listened to recorded calls and traced a sample of past jobs from first click to invoice. That showed which searches brought agreements, which brought one-off repairs and where leads were lost between the phone and the quote.
We installed call tracking and form capture, designed the HubSpot pipeline with the owners and estimators, and migrated the existing customer and agreement list so renewals had real dates behind them.
We launched the emergency and planned-maintenance campaigns beside the old account, tightened the negative keyword list and moved budget gradually once calls and quotes were landing in HubSpot correctly.
We switched on quote follow-up and renewal alerts, imported signed agreements back into Google Ads as conversions and set a monthly review where owners read spend, quotes and renewals together.
Composite case based on typical engagements; client details anonymised and illustrative; no client name or measured figures implied.
Search spend only becomes a business decision when the contract, not the call, is the number everyone watches. Everything else is a way of getting there.
We work with a limited number of clients to keep the quality high. If this case resonated, let's talk.