Loading...
Built for HVAC, plumbing, electrical, and recurring service teams.
Loading...
A CRM that actually understands service businesses. Track every touchpoint, automate follow-ups, and close more deals with intelligent insights.
Every interaction, every job, every dollar—all in one place with AI-powered insights
Customer's AC unit is 12 years old. Recommend system replacement during next maintenance visit.
The customer detail page fires 14 parallel data fetches using React.cache() — no N+1 queries. Every piece of context a technician or dispatcher needs is already on screen before they ask.
Each data type below is fetched independently and simultaneously. Supabase RLS enforces company isolation on every query. The page renders as data streams in — no blocking, no waterfall.
Service locations for this customer — address, access notes, GPS coords
All work orders — open, scheduled, completed — with technician and duration
Paid, outstanding, and overdue invoices with aging and balance due
Sent proposals with view tracking, status, and expiration dates
Scheduled visits — upcoming and past — with technician and arrival window
Active service agreements with terms, value, and renewal date
Transaction history — card, check, ACH — with receipt and processor ref
Enrolled plans — monthly/quarterly/annual — with next visit and visits remaining
Service level agreements covering response time, priority, and included labor
Auto-logged timeline — calls, emails, SMS, status changes, payments
Per-property equipment — make, model, serial, age, warranty, next service
Photos, documents, permits, signed forms stored per job and property
Stored cards and bank accounts — tokenized, ready for one-click charge
All email threads, SMS conversations, and voicemails for this customer
React.cache() deduplicates across every Server Component on the page. If two components both need the customer's invoices, the database sees one request.
All 14 fetches run in parallel at the edge — no waterfall, no round-trips. Composite indexes on company_id + created_at keep each query under 50ms.
Supabase Row Level Security enforces company isolation at the database layer. Even if the application layer had a bug, another company's data is unreachable.
Email, SMS, voicemail, and internal team channels all converge in a single inbox. Filter by channel, assign threads to your team, and reply without switching apps.
Connect your own domain email. Conversations stay in your Gmail, Outlook, or any IMAP provider — Thorbis just adds the CRM layer.
Two-way text conversations on a dedicated business number. Customers reply to your number, not a shortcode. Full conversation history in the record.
Recordings stored directly in the customer record with automatic transcription. Review missed calls without listening to audio.
Internal team messaging anchored to jobs and customers. No more lost context in personal texts — all coordination lives in the job record.
Hi, thanks for sending over the quote for the annual maintenance plan. Can we talk through the filter upgrade option? My AC is from 2011 and I'm wondering if that changes your recommendation.
Great question! Given the 2011 unit, I'd actually recommend we look at the full system evaluation as part of the plan this year. I'll have our lead tech add notes before the visit.
The activity timeline captures every interaction automatically — no manual note-taking required. When a technician completes a job, when an invoice is viewed, when a customer replies to an SMS — it all appears in one chronological feed.
Job status changes, payments, invoice views, SMS replies — all written to the timeline automatically via system events.
Every entry shows who triggered it — customer, technician, dispatcher, or system — with an exact timestamp.
Filter by event type — calls only, payments only, status changes only — to find any moment in the customer relationship instantly.
One feed covers all 14 data types — job events, invoice events, communication events, payment events — in a single unified scroll.
Each customer can have multiple service locations. Each location independently tracks its installed equipment — down to the serial number, warranty status, and next service date. Technicians arrive knowing exactly what's there.
Commercial clients with 50 locations? No problem. Each property has its own job history, equipment list, access notes, and contact name independent of the others.
Thorbis tracks warranty expiration for every unit. When a warranty is about to expire, you get an alert so you can offer an extended plan before the customer realizes they need one.
When equipment hits its next service date, or a maintenance plan triggers a scheduled visit, Thorbis auto-creates the job and adds it to the dispatch queue — no manual scheduling needed.
Full-text search with fuzzy matching finds customers by name, address, phone, or email — even with typos. Custom tags let you segment your list any way you need.
PostgreSQL tsvector search across name, address, phone, and email. pg_trgm extension handles typos — search "Jonhson" and still find "Johnson".
Create any tags you need: VIP, Commercial, Residential, Annual Plan, High Value, At-Risk, Referral Source. Filter your customer list to one click outreach campaigns.
Lifetime value calculated from all paid invoices and shown on the customer list. Sort by LTV to see who your most valuable relationships are — and who's at risk of churn.
Built specifically for service businesses, not adapted from generic CRM software
"We went from closing 1 in 4 estimates to 2 in 3 after switching to Thorbis CRM. The AI insights tell us exactly when to follow up, and the proposal tracking shows us which customers are serious. Our revenue is up 42% year-over-year."
Discover how these features work together to power your field service business
Join service businesses increasing their win rate by 67% with Thorbis CRM.