Ren Álvarez follows one install inquiry across her two screens. The marketing export has a source. The dispatch export has no matching appointment. "We have call tracking. We already know what the marketing produced." That feels reasonable when every ring appears in a report. A tracked call is not a completed job.
Ren is an illustrative owner, not a client case study. In her June example, 94 inquiries split into 61 service and 33 install. Twenty-two install prospects were not called back within an hour, while her two dedicated install crews had nine idle days.
The source label cannot explain that gap by itself. She needs a record that follows the inquiry after it leaves the marketing system.
What has to stay connected from the first call?
Start with a small set of records your office and marketing team can reconcile. A spreadsheet can establish the rules before integrations automate them.
- Inquiry ID: One stable reference for one distinct request for work. Preserve its first-received timestamp.
- Customer ID: The person or account associated with that request. A returning customer can have many inquiries.
- Job ID: The actual scheduled work. One inquiry can produce several linked jobs.
- Invoice ID: The financial record linked to the relevant job. Track payments and adjustments against it.
Keep call and form event IDs too. They identify contact attempts, not necessarily new demand. Three calls about the same repair can be three activities attached to one inquiry.
Then separate the dimensions. Source describes how the inquiry was found or attributed. Contact method says phone or form. Initial intent says service, maintenance, or install. Stage says what has happened since. "Google Ads" and "booked" do not belong in the same field.
Choose a reporting rule, such as first recorded source at inquiry creation. Preserve later touches in separate fields. That is an attribution convention based on available evidence, not proof that one channel caused the entire purchase.
This supplies the missing connections in HVAC marketing infrastructure.
Ren can keep both exports. The first useful addition is an inquiry ID that survives the handoff. A source label and a customer surname are not enough to match every row reliably.
Which phone number should the homeowner see?
Begin with a master list of your business's permanent phone numbers, locations, and answering destinations. Keep a dependable main number as the default contact path and fallback on the website.
Tracking numbers forward calls to that same office or approved coverage destination while recording the tracking route. Use a dedicated number when measuring a specific offline placement or direct-call campaign. Document where it appears, what source it represents, and where it rings.
For website calls, dynamic number insertion, or DNI, can change the displayed number according to available source or visitor information. Twilio's call-attribution explanation describes using tracking numbers and website number replacement to connect calls with acquisition information. The implementation varies by provider.
Ask your installer to document the number pool, assignment window, fallback behavior, and what is recorded when the source cannot be matched. Test both the visible number and the tap-to-call link across the pages that matter.
A source-level number identifies a route. It may not identify an individual website session. A saved number called much later, a shared browser, or an unavailable session match can limit what you know. Preserve those limitations.
Calls placed directly from an ad or listing may never reach your website. A website-only setup cannot measure a visit that did not occur. Test those call paths separately rather than assuming the website script covers them.
In Ren's walkthrough, the phone still rings in the office. The new requirement is that its event record arrives with the route and a durable reference. The tracking system has identified an entry point, not supplied the appointment.
What should a form carry into the office?
Use consistent campaign labels on links you control. Google Analytics documents campaign URL parameters such as utm_source, utm_medium, and utm_campaign for identifying referring campaigns. Those labels describe the visit; they do not create a booking record.
For example, a campaign might use source newsletter, medium email, and campaign fall-maintenance. Define the names once. Keep capitalization and spelling consistent so one campaign does not fragment into several labels.
Have the form carry the available campaign values, landing page, referring page where available, submission timestamp, and form-event ID into the office system. Preserve relevant click identifiers where your existing tracking setup supports them. You do not need every possible field to start.
At a successful submission, create or attach the stable inquiry ID and send the office the request with that reference. Keep the source evidence with the operational record. A website thank-you message alone does not prove anyone received the work request.
Keep first-source and latest-touch fields separate. Do not overwrite a known first source just because the homeowner returns directly. If the information is unavailable, record unknown, with the customer's stated source in its own field if you ask.
Ren's form test has a practical finish: can her CSR find the request, its intent, and its source evidence without copying between dashboards? If the answer is no, the integration is unfinished even if the analytics event fired.
When does an inquiry become a booking, a job and an invoice?
Give stages observable definitions. Received means a contact arrived. Eligible means it meets your service and territory rules. Contacted means a conversation occurred. Booked means an appointment was agreed and saved. Completed means the work was performed. Invoiced means an invoice exists. Paid means money was received.
Store those milestones with dates rather than repeatedly overwriting one status. A cancellation does not erase the fact that an appointment once booked. Keep cancelled, awaiting response, no availability, declined, and ineligible outcomes distinct. Response coverage needs its own count that includes unanswered contacts.
Deduplicate by the request, using event IDs, customer match, service address, timing, and the office's confirmation. A phone number alone is not a unique customer. A retrying form should not create another acquisition merely because it fired another event.
Preserve new-versus-returning customer status. An existing customer clicking an ad today is a current paid touch, not proof that the ad originally acquired that customer. Keep the original acquisition history where known and the current inquiry source separately.
For a separate illustrative identity example, inquiry I-014 produces service job J-101 and a $300 invoice. It later produces linked install job J-144 and a $9,000 invoice. That is one acquisition inquiry, two jobs, and $9,300 in unique invoices, not two acquired leads or $18,600 of revenue. Service-line reporting splits $300 and $9,000; the acquisition cohort counts their combined value once.
Other channels can remain assisted touches without receiving another copy of those invoices. Service and install reporting should expose the handoff.
Ren can now ask what happened to an install prospect without making the agency invent an office outcome. Someone still has to mark the appointment, completion, and invoice. The identifiers make that person's update useful to the next report.
What does one complete cohort actually show?
Use a separate hypothetical cohort, not Ren's June or her roughly $18,000 profile budget. Suppose 100 eligible new-customer inquiries arrived during days 1–30. Follow those same inquiries through day 90, classified by first recorded source.
For this simplified example, each inquiry can produce at most one job. All completed jobs are invoiced. Booked means ever booked; completed, cancelled, and still scheduled are mutually exclusive outcomes at the cutoff. Never booked includes eligible opportunities that remained unbooked.
| First recorded source | Inquiries | Booked | Completed / invoiced | Cancelled | Still scheduled | Never booked | Collected |
|---|---|---|---|---|---|---|---|
| Paid search | 40 | 24 | 20 | 2 | 2 | 16 | $40,000 |
| Organic search | 35 | 21 | 18 | 2 | 1 | 14 | $30,000 |
| Referral | 15 | 10 | 8 | 1 | 1 | 5 | $16,000 |
| Unknown | 10 | 5 | 4 | 1 | 0 | 5 | $4,000 |
| Total | 100 | 60 | 50 | 6 | 4 | 40 | $90,000 |
Sixty booked equals fifty completed, six cancelled, and four still scheduled. Add forty never booked and all 100 inquiries reconcile.
Assume total acquisition-program cost for that intake window is $10,000, including the stated media, management, tracking, and content costs. Holding that spend scope constant gives $100 per eligible inquiry, about $167 per booking, and $200 per completed job at the cutoff. These are blended program ratios, not each source's acquisition cost or proof of incremental profit.
Collected revenue is actual receipts on the unique cohort invoices through day 90, with adjustments reflected. Pending appointments contribute no assumed future cash. In a real multi-job cohort, count distinct job IDs for job-level costs and retain every invoice only once.
Run the same table by initial service or install intent too. Preserve that initial intent when a repair inquiry becomes a replacement, and record the final job type separately.
Ren's example report can still contain unknown source. Ten visible unknowns are more useful than ten invented answers. They also give her a specific measurement problem to investigate before reallocating money.
What should you test before trusting the report?
Run a small acceptance check with your agency and office. Use clearly labeled test records and exclude them from performance reporting.
Use a sandbox, training mode, or documented non-billable test workflow so simulated appointments and invoices stay out of live dispatch and financial records.
Test a tagged form, a tracked website call, a direct call from a placement, and the default main-number path. Verify routing and source evidence. Repeat a contact for the same request and check that it attaches as an activity rather than a second lead.
Follow one test inquiry into a booked appointment, cancellation or reschedule, completed job, and invoice. Confirm that stages and timestamps survive each handoff. Test a service-to-install handoff and verify that the total invoice value does not double.
Then reconcile a small real sample. Does every booked count have an appointment ID? Can completed work and receipts be traced to jobs? Are recent install inquiries still open because their buying cycle has not finished? Check unmatched IDs and unknown sources as an exception list with an owner.
What to expect from Google Ads depends on these definitions. So does the question of how many leads you actually need. Better call handling supplies outcomes the tracking system cannot manufacture.
A source label tells you where to start looking. A joined record tells you what happened next.
In Ren's illustrative walkthrough, the two screens remain open. She follows an inquiry reference from the marketing record to the office outcome and sees the gaps still waiting for an answer.
She has not made attribution perfect. She has stopped asking a phone-call total to stand in for an invoice.
