Spectrum

SERVICES USED

Salesforce

Jobber

Redis

Vercel

About

Spectrum

Spectrum Building Services is a building maintenance and emergency service company based in Markham, Ontario. Its teams handle work such as carpet cleaning, garage power washing, and odour control, along with 24/7 emergency response and restoration. Field operations run in Jobber (job scheduling, dispatching, and property management), while the sales team tracks opportunities and accounts in Salesforce.

The Challenge

Deals closed in one system, work scheduled in another

Sales reps closed deals in Salesforce, then re-entered the job details by hand in Jobber so operations could schedule and dispatch the work. Nothing linked an opportunity to its job, so a simple question like “did this sale get scheduled?” meant checking two systems.

The history had the same gap. Thousands of existing Jobber properties had no connection to their Salesforce accounts, which made reporting across the two systems impossible, and addresses were formatted differently on each side (St vs Street, Dr vs Drive). Assigning the right technician meant looking the person up in Jobber separately. Sales and operations were working in silos, with duplicated data entry and no shared source of truth for job status.

The Solution

One integration layer between sales and operations

Clouver built a secure API layer that sits between the two platforms. It was delivered in phases over about five months: token management first, then the proxy, then the Salesforce sync, then the bulk matching.

  • Authenticated GraphQL proxy: a single endpoint that accepts Jobber queries and mutations, handles OAuth automatically, and preprocesses variables into Jobber’s schema (ID encoding, custom field mapping, scheduling format conversion)

  • Automatic Salesforce records: when a job is created through the proxy, a linked Jobber record is created in Salesforce against the matching opportunity, closing the loop between sales and operations

  • Self-refreshing OAuth tokens: access tokens are cached in Redis and refreshed every 30 minutes by a scheduled job, so nobody re-authenticates by hand

  • Technician auto-assignment: the system reads the email in the job notes, looks it up in Jobber’s user directory, and assigns the matching person to the job

  • Bulk property matching: every Jobber property is compared against every Salesforce account using normalized addresses, edit distance, and token similarity, then scored as strong (address and client name match) or weak (address only)

  • Account backfill: matched Salesforce accounts are updated in batches with their Jobber property IDs, enabling cross-system lookups going forward

Before:

  • Job details re-typed from Salesforce into Jobber

  • No way to tell from Salesforce whether a sold job was scheduled

  • OAuth tokens expired silently and broke integrations

  • Thousands of properties with no link to their account

  • Technician assignment required a manual lookup

After:

  • Jobs created in Jobber with a single API call, with the Salesforce record linked automatically

  • Every job tied to its opportunity, visible from Salesforce

  • Tokens refresh every 30 minutes with zero manual intervention

  • Existing properties matched to accounts with confidence scores

  • Technicians assigned automatically from the job notes

The Results

Sold work now schedules itself

A closed deal now becomes a scheduled job without anyone typing it twice. Sales can see from the opportunity whether the work is booked, when the first visit is, and who is assigned, without opening Jobber.

The backfill did the same for the past: existing properties are linked to their accounts, address differences are normalized away, and historical reporting finally spans both systems.

The Conclusion

Spectrum kept both tools; what changed is the space between them. Two disconnected systems that forced double entry now behave like one workflow, from closed deal to dispatched job.