<!-- canonical: https://plainbuilt.ai/blog/custom-crm-development-for-contractors -->
# Custom CRM development for contractors: build or buy?

Published: 2026-09-20
About the author: Eshan Cheema
Tagged: CRM and CMS integration development, Mobile app development, Contractors, ServiceTitan
Related: ServiceTitan/Jobber integration map: what data moves where (https://plainbuilt.ai/guides/servicetitan-jobber-integration-map)

Numbers in this article are being confirmed.

## In three lines

- Keep ServiceTitan or Jobber when the jobs live there: a voice agent, quote automation and review requests are a handful of reads and one write on the integration map, not a new CRM.
- Build when a side of the business has no screen: the portfolio's two-sided booking apps, Tripi and iNROADS, run 48 and 16 iOS screens, built full stack and delivered in under 6 months.
- Either way, a build today ships in Node, Supabase and Postgres, with React Native on the phone; the portfolio apps carry their own stack on their item pages. The concrete contractor who kept ServiceTitan lifted monthly lead capture 23% within 60 days.

Keep ServiceTitan or Jobber when your jobs live there, and integrate: a voice agent, quote automation and review requests are a handful of reads and one write, not a new CRM. Build a custom CRM when the office runs on screens, roles and a field app the platform does not have. Either way it is Node, Supabase and Postgres.

## When should a contractor keep ServiceTitan or Jobber?

When the jobs live there. [The integration map](/guides/servicetitan-jobber-integration-map) for ServiceTitan and Jobber draws what each AI tool touches, and none of it is a new system. A voice agent reads the customer by phone number, the location, the job history and the open windows, then writes one thing, the appointment or the visit, after the caller has said yes. Quote automation reads the request, the property and the price book and writes the estimate, a draft a person approves for the first weeks. Review requests read completed jobs and write nothing back, the lowest-risk flow on the map.

That is the shape of every AI module we ship into a contractor's office, and the [CRM and CMS integration page](/custom-software/crm-cms-integrations) says it plainly: a voice agent that books into ServiceTitan is an integration first. The concrete contractor on our work page kept ServiceTitan, and the office kept the screens it knew.

The first test is a question: which system wins when two disagree about a customer, a job or an invoice? If the answer is ServiceTitan or Jobber, and the office fills the fields, keep it and wire the tools into it. Line 2 of the map's worksheet asks exactly that.

## When does a custom CRM earn its build?

When the people doing the work need screens the platform does not draw. Discovery on the integration page starts with which system holds the jobs, which holds the customers, and where the same thing gets typed twice. One thing typed twice is an integration. A whole side of the business with no screen at all is a build.

The portfolio shows what those sides look like. [Tripi](/portfolio/customer-booking-apps/tripi), a booking app, has a customer side that sends a booking request and a business side that accepts or rejects it: 48 iOS screens. [iNROADS](/portfolio/fleet-and-dispatch-apps/inroads), a truck-booking app, has a shipper side that books and pays and a driver side that takes or counters the job offer: 16 screens. [Sendayo](/portfolio/crew-scheduling-apps/sendayo) is a shift roster with one row per day: 7 screens. None is a CRM by name, and each is the part of a CRM a platform sells you as a form and a list. Every one was built by us full stack and delivered in under 6 months.

A contractor earns the build in the same places: a customer side that books without a call, a crew side that sees the week and the job card, a dispatch side that offers and counters, an owner side that reads the numbers. If ServiceTitan or Jobber already draws those screens the way your office works, buy. If a whiteboard or a spreadsheet stands in for one of them, that is the screen you build.

## What does a custom CRM for a contractor carry?

Three things: the screens, the roles and the field app, and a spec that names all three first. On the [mobile app page](/custom-software/mobile-apps) the spec is the build plan: the screens, what the app is wired into, and the number the written ROI commitment measures.

The screens are the objects the office lives in, in the office's own names: the customer, the place the work happens, the request, the quote, the job, the appointment, the invoice. The map's first step lists them with a note that matters more for a build: an empty field is not data, so a screen the office will not fill is a screen you do not draw.

The roles are the sides. Tripi's rule, a booking is a request until the business says yes, is a role decision drawn as two sides that share one booking. [Make Me](/portfolio/customer-booking-apps/make-me) shows the artist the service price, the platform charge of 3% and the amount the artist receives before the accept button, because that is the decision the artist is making. A contractor's roles are the homeowner, the CSR, the estimator, the crew lead, the dispatcher and the owner, and each gets the screen for the decision they make.

A field app built today is React Native, for iOS and Android, wired into ServiceTitan or Jobber when that is where the jobs live, so it is not another place to type things in; the portfolio items above each carry their own stack line. The [field-technician apps](/portfolio/field-technician-apps), [customer booking apps](/portfolio/customer-booking-apps), [fleet and dispatch apps](/portfolio/fleet-and-dispatch-apps), [crew scheduling apps](/portfolio/crew-scheduling-apps) and [estimating and quoting apps](/portfolio/estimating-and-quoting-apps) in the portfolio are the five shapes a contractor's CRM most often splits into.

## What is a custom CRM built in?

Node for the services that move the data, Supabase and Postgres where anything has to be stored, React Native for the app on the phone, and Twilio when a step sends a text or places a call. It is the stack we ship everything in, the same one our own AI systems run on, from an engineering practice since 2014 with 200+ shipped projects. A build runs five steps: discovery, spec, build, ship, support. The 30-minute working session opens discovery, the build runs against the real APIs of ServiceTitan, Jobber or HubSpot, and support means fixes when a platform changes its API.

Two things stay the same whether you integrate or build. The credential: a tool runs on one scoped to the objects on the map, issued by your admin, so the office can see and undo every write on the screens it already uses. And the commitment: every deployment carries a written ROI commitment, an integration and a custom build both count, and the spec names the number the CRM is built to move.

## What do I tell an owner who asks for a custom CRM?

I tell owners that a custom CRM is the last thing I want to build for them and the first thing most of them ask for. The ask usually means one of two things. The platform does not fit, and the fix is an integration that makes two systems talk, not a third system. Or a side of the business has no screen at all, and the fix is one app for that side, wired into the platform, not a replacement for it. In both cases I would rather ship a voice agent in 3 to 4 weeks as a handful of reads and one write, and watch lead capture move, than draw 48 screens and wait. The one time I say build the whole thing is when the office cannot answer which system wins, because then there is no system of record to integrate with, and the CRM is how you get one.

## What we saw in deployment

A regional concrete contractor ($10M to $15M in annual revenue, 60+ field crew, a 4-person office) estimated it was losing 15 to 20% of inbound leads to voicemail after hours and at peak call times, and an estimator built each quote in Excel and emailed it 2 to 3 days later. The office kept ServiceTitan. We deployed a voice agent into its existing phone system through Twilio, integrated with ServiceTitan dispatch, booking appointments directly on the dispatch board, then quote generation connected to its pricing engine and DocuSign. Within 60 days of voice agent deployment, monthly lead capture rose 23%; after quote generation went live, quote turnaround on standard jobs went from 2 to 3 days to under 4 hours and the close rate on those quotes rose 15%. The case study dates each metric 2026-01-15. Nothing on that list is a new CRM. [Read the case study](/work/mccaslin).

What went wrong: the data an office says it does not have is usually inside the platform it already runs. On the concrete contractor we spent a week building the revenue leak map from scratch when the data was already sitting in the client's call tracking software; in contractor engagements since, we pull call recordings on day one.

[not yet published: Eshan confirms this article as his own words and its numbers]

## FAQ

### Should a contractor replace ServiceTitan or Jobber with a custom CRM?

Not when the jobs live there. A voice agent, quote automation and review requests read a handful of objects in the platform and write one, so the office keeps the screens it knows. A custom build earns its place when a side of the business, the crew, the customer or the dispatcher, has no screen at all, and that app is wired into the platform rather than replacing it.

### What does a custom CRM for a contractor include?

The screens for the objects the office lives in (customer, location, request, quote, job, appointment, invoice), a role for each person who makes a decision (homeowner, CSR, estimator, crew lead, dispatcher, owner), and a field app in React Native for iOS and Android. The spec names the screens, what the app is wired into, and the number the written ROI commitment measures before anything is built.

### What is a custom CRM built in?

Node for the services that move the data, Supabase and Postgres for what is stored, React Native for the app on the phone, and Twilio when a step sends a text or places a call. It is the stack Plainbuilt ships everything in, from an engineering practice since 2014 with 200+ shipped projects, built against the real APIs of ServiceTitan, Jobber or HubSpot.
