The pattern is so consistent it’s almost funny. A contractor buys a CRM. Eighteen months later the team hates it, the data is a mess, and the owner concludes the software is bad. They migrate to a new CRM, there’s a hopeful month, and then it’s exactly the same.
We’ve watched companies do this three times. Jobber to ServiceTitan to something custom, or HubSpot to Pipedrive to a spreadsheet in defeat. Each migration costs real money and months of disruption, and each one fails the same way.
The CRM usually isn’t the problem. A CRM is a database with opinions, and what goes into it determines whether it’s useful. Almost nobody puts thought into what goes into it.
What actually breaks
Ask someone why they hate their CRM and you’ll get one of these five answers. None of them are about the CRM.
- “The data is garbage.” Half the records have no phone number, addresses are inconsistent, and there are four versions of the same customer. This is an intake problem.
- “Nobody uses it.” The techs don’t update it, so the office can’t trust it, so they keep a shadow spreadsheet, so the CRM falls further behind. This is a data-entry-burden problem.
- “We can’t get reports out of it.” The reports are wrong because the underlying data is inconsistent, because nothing enforces structure at entry. Intake again.
- “Leads fall through the cracks.” Leads arrive in six channels and only three of them reach the CRM automatically. Intake.
- “It doesn’t match how we work.” Occasionally legitimate. Usually it means nobody defined how they work before configuring the tool.
Four out of five are upstream of the software. Migrating carries all four to the new system, plus the migration mess itself.
Why intake is where it goes wrong
A typical contractor has leads coming from: the website form, inbound calls, Angi or Thumbtack, Google Local Services, Facebook, referrals texted to the owner’s personal phone, and the occasional email. Seven channels, roughly.
Each one carries different fields. The web form gives you a name, email, and a paragraph. The phone gives you whatever the person wrote down. Angi gives you a structured payload. The owner’s text gives you “call Dave about the Miller job.”
Now those seven shapes all get typed into one CRM by three different people who each have their own conventions. One writes the address as “123 Main St.” Another writes “123 Main Street.” The third puts the job description in the notes field, and the fourth puts it in a custom field nobody else knows exists.
Six months later you have 900 records, no two of which are structured the same way. No CRM survives that. The most expensive software on the market can’t report on data that doesn’t agree with itself.
Fix the intake, then decide about the CRM
Here’s the order we run this in. The CRM decision comes last, and often it turns out you don’t need a new one at all.
Start by listing every channel a lead can arrive through, including the informal ones. The owner’s phone counts. If a lead can reach you a way that isn’t on the list, the list is wrong.
Then define the minimum record: the smallest set of fields that make a lead actionable. For most contractors that’s name, phone, service address, job type, source, and urgency. Six fields, not thirty. Every field you add is a field someone skips under pressure, and a skipped field is worse than no field because it makes the whole record untrustworthy.
Then normalize at the boundary. Every channel gets routed through something that maps its shape into your six fields before a record is created. The web form maps directly. Phone calls get a script and a form the person fills while talking. Angi gets an API mapping. The owner’s texts get forwarded to an address that parses them. This is the actual work, and it’s where the money is.
Then deduplicate on entry, not on cleanup day. Match on phone number first, since it’s the most reliable identifier in the trades, more so than email or name. If a record exists, attach to it rather than creating a twin. Doing this at write time is easy; doing it retroactively across 900 records is a project nobody ever finishes.
Then, finally, look at your CRM. Nine times out of ten, once the intake is clean and consistent, the CRM you already hate becomes fine. It was never the constraint.
The second-order effect nobody expects
Clean intake fixes the adoption problem too, and this is the part owners don’t see coming.
People don’t avoid the CRM because they’re lazy. They avoid it because entering a record takes four minutes and gives them nothing back; it’s pure tax. So they do it late, or badly, or not at all, and then everyone concludes the team has a discipline problem.
When intake is automated, the record already exists by the time a human touches it. The tech opens the job and the address, contact, and history are sitting right there, so the CRM is giving something back before it asks for anything. Adoption stops being a management problem and quietly becomes a non-issue.
We’ve seen this flip within a few weeks of shipping an intake pipeline. Same CRM, same people, same training. The only change was that the system stopped demanding typing before it offered value.
When you actually should switch
To be fair, sometimes the CRM is genuinely wrong for you. The signals worth taking seriously:
- It has no usable API, so you can’t fix the intake even if you want to. This one is disqualifying. Don’t stay on a system you can’t automate.
- Per-seat pricing that makes it irrational to give field staff access. If your techs can’t see the record, the record is decorative.
- It can’t model your actual work: recurring service agreements, multi-visit jobs, a job with three separate quotes. Some tools genuinely can’t express this.
- The vendor has stopped shipping. Check the changelog. If nothing meaningful has shipped in a year, plan your exit.
Notice that “the data is messy” isn’t on that list. That one follows you. It’ll be messy in the new system too, in about five months, and by then you’ll have spent the migration budget with nothing to show for it.
Where to start
Do the ten-record test this week. If you fail it, don’t open a single vendor website. Write down your channels, define your six fields, and fix the front door.
It’s unglamorous work and it’s where the outcome is decided. Every contractor we know with a CRM they actually like did this at some point, usually after burning a migration or two learning it the expensive way.