CRM for HVAC task records
What this means in HVAC
“CRM” means three different things when HVAC contractors search for it: the customer list with service addresses that every field service product has, a sales pipeline for leads and follow-ups, or the whole platform. On this page it means the customer model: whether the product can hold one payer with several service locations, and whether the history of a call lives on the piece of equipment that was serviced. Those are tasks T-03 and T-04, run with the property manager of Ridgeline, our fictional HVAC company (Cedar Lane Properties, which pays for six rental units at different addresses; T-03 bills one of them) and one rooftop unit.
One payer, several locations
Neither product we tested models a payer with a list of sites out of the box; each gets there by a different route. In our trial Jobber had no “bill another client” relationship: an invoice billed the client that owns the property. The workaround, making the tenant a property contact of the payer, billed Cedar Lane correctly but left the location recorded twice. TestedT-03 ServiceM8 handles the split per job: each job has its own job address and billing address, so the manager can be billed for work at a unit, but there is no reusable list of sites under one payer and every unit address has to be retyped. The invoice draft for job #2 went to Cedar Lane’s billing contact with the unit address in the subject line. TestedT-03 When we put the same scenario to ServiceM8 support, the written answer was a free Client Sites add-on: the manager as head-office client, each unit as a site, jobs on the site and invoices on the head office’s billing details. TestedT-15 We have not run T-03 with that add-on, so the result above stands for the product as it comes.
Equipment history
Jobber had no equipment or asset record in our trial. History is visible per property, not per unit, and a rooftop unit can only be tracked by naming it in job titles or custom fields. Jobber’s marketplace points to third-party add-ons for asset history. TestedT-04 ServiceM8 has an Asset Management add-on, labeled for the Growing plan, with asset types and custom fields such as serial and model. We imported one condenser on the web with its type, serial and model. TestedT-04 On the phone the asset was listed under the customer, but its history was empty: recording an inspection or service against a unit requires scanning a ServiceM8 QR label fixed to it, and without the label no per-unit history could be built. TestedT-04 Budget for labels and a visit to each site before the register is worth anything.
Pitfalls we hit
Neither CSV importer can express a parent and child customer. Jobber does import several properties per client (25 clients, 30 properties from our file) but could not link the payer; ServiceM8 merged rows that shared a customer name without warning and kept only the last address. If your customer list has property managers or landlords, plan the import by hand and check the count of locations, not only the count of customers.
This dimension carries the highest weight in the commercial profile and the lowest in the solo profile.
- Housecall Pro · Not tested UnverifiedT-03
- Jobber · partial TestedT-03
- Kickserv · Not tested UnverifiedT-03
- ServiceM8 · partial TestedT-03
- ServiceTitan · Not tested UnverifiedT-03
- Workiz · Not tested UnverifiedT-03
- Housecall Pro · Not tested UnverifiedT-04
- Jobber · not possible TestedT-04
- Kickserv · Not tested UnverifiedT-04
- ServiceM8 · partial TestedT-04
- ServiceTitan · Not tested UnverifiedT-04
- Workiz · Not tested UnverifiedT-04
What the tasks require
Rubric: Customer / location / payer / equipment
- T-03: Commercial customer with 3 locations and a separate payer (Cedar Lane)
A job at one location bills the payer, with no duplicate customer
- T-04: Equipment history: see every visit for one rooftop unit
History is visible per unit and per location
Products and task evidence
Housecall Pro advertises a 14-day free trial, but its terms say the service is offered to users who reside in the US or Canada, and when we signed up on September 28, 2026 the onboarding form did not accept our Spanish phone number. Our lab is in Spain, so we have not run our tasks on it. What this page shows comes from public sources and is marked as documented, not tested.
Housecall Pro: insufficient evidence for these tasks.
Kickserv: insufficient evidence for these tasks.
ServiceTitan: insufficient evidence for these tasks.
Workiz: insufficient evidence for these tasks.
- Price checked
- Not verified
- Last tested
- Last edited
Pinned: Housecall Pro · Jobber · Kickserv. All tasks are shown on desktop; narrow screens start with differences. These selected results are available without JavaScript.
| Task | Housecall Pro | Jobber | Kickserv | ServiceM8 | ServiceTitan | Workiz |
|---|---|---|---|---|---|---|
Multi-site customer | Housecall Pro Not tested UnverifiedT-03 | Jobber Partial TestedT-03 | Kickserv Not tested UnverifiedT-03 | ServiceM8 Partial TestedT-03 | ServiceTitan Not tested UnverifiedT-03 | Workiz Not tested UnverifiedT-03 |
Equipment history | Housecall Pro Not tested UnverifiedT-04 | Jobber Not possible TestedT-04 | Kickserv Not tested UnverifiedT-04 | ServiceM8 Partial TestedT-04 | ServiceTitan Not tested UnverifiedT-04 | Workiz Not tested UnverifiedT-04 |
Profile verdicts
Owner-operator
View this operation profileSmall residential shop
View this operation profileMixed service + projects
View this operation profileCommercial-leaning
View this operation profileRecorded limitations
- Your payer is often not the owner of the service location: in our trial Jobber billed the client that owns the property, so a property manager's unit needed a workaround that either duplicates the location or demotes the tenant to a contact (T-03).
- You track individual units by serial number: Jobber had no equipment record in our trial, and history lives on the property, not the unit (T-04).
- Your customer list already has property managers or landlords: the importer takes one row per property and cannot link the payer, so that structure is rebuilt by hand after import (T-01, T-03).
- You expect the app's search to find a job by its number: in our test it returned the customer and the address, not the job (T-09).
- You want the displaced customer told automatically when an emergency bumps their slot: the reschedule notice is a manual send (T-07).
- You need card payments working on day one: in our trial only cash, check and manual payment records were available, because Jobber Payments was not set up on the account (T-10).
- You are counting on the lowest plan: the features we tested put a contractor on Grow, $199 a month for one person at the time of our check (T-16).
- You need per-unit history right away: the register showed our condenser with its serial, but nothing can be recorded against it until a ServiceM8 QR label is scanned on the unit (T-04).
- You expect the payer and site structure out of the box: as the product comes, billing another address is set per job and every unit address is retyped; the Client Sites add-on support described is untested by us (T-03).
- You expect offline work to sync on its own: in our test nothing uploaded after reconnecting until the app was closed and reopened, so a technician who waits for the sync may not see offline work (T-09).
- You bill replacements as percentages: the deposit is a hand-priced line that needs an item code, not a share of the job (T-08).
- Your customer list has several rows per customer: the importer merged same-name rows without warning and kept only the last address (T-01).
- You want equipment history without labels: each unit needs a ServiceM8 QR label scanned on site before any service can be recorded against it (T-04).
- Your office forces emergencies into full slots: in our run the displaced job dropped out of the day view, with no conflict marker on the board (T-07).
- You want card payments without extra setup: with no gateway active, the phone only recorded a card or cash amount by hand (T-10).
- You work from an Android phone: the full app is iOS, and the Android app is a separate "Lite" version we have not tested (T-16).