Dispatch intelligence for field service

Squeeze one more job out of every truck, every day.

Routely assigns the right technician, builds the optimal route, and rebuilds the board in under five seconds when an emergency hits. Runs standalone or bolts into ServiceTitan, Jobber, and Housecall Pro.

Connects toServiceTitanJobberHousecall Pro
Acme Field Services
Dispatch board · weights v14
94% on time12 jobs live
In flight
6
At risk
1
Revenue
$3,060
Cedar Park School
Sam Patel · priority 1
91.8
Westlake Residence
Taylor Shaw · priority 1
94.2
Northside Clinic
Alex Rivera · priority 2
87.4
Last decision
Taylor Shaw → Westlake Residence · score 94.2
skill 100distance 95priority 100performance 96availability 100
Jobs per tech
+40%
Six-week rolling
Drive time
-24%
After first full day
Emergency reroute
<5s
Full board recompute
On-time arrivals
94%
Up from 81% baseline

Seven engines. One API. One learning loop.

Each engine is a pure TypeScript module. Unit-tested. Independently replaceable. No engine imports another. Composition happens at the API layer.

Assignment

Scores every technician against every job on five factors. Explainable. Weights are versioned and pinned to every decision.

Routing

Greedy insertion with time windows. Sub-second for a daily board. LRU-cached distance matrix to control map API spend.

Emergency Rerouting

Priority one job arrives. Board rebuilds in under five seconds. Displaced jobs get new owners and customers get notified.

Prediction

Rolling mean and variance per technician per skill. Falls back to skill-level prior, then job estimate. Welford's algorithm online.

SLA Risk

Flags jobs that will probably miss the window before they do. Logistic model over driving slack, day load, and technician variance.

Simulation

Add a truck, shift windows, close a territory. Get the projected throughput, on-time rate, and revenue delta in seconds.

Learning

Nightly retrain on ninety days of outcomes. Grid perturbation around current weights, bounded step size, versioned history.

Audit trail

Every assignment persists scoring inputs, predicted duration, delay risk, and weights_version. Replayable forever.

Integrations

Normalized internal job model. ServiceTitan REST, Jobber GraphQL, Housecall Pro REST. Adapters, not dependencies.

Explainable by design

Every assignment carries a reason.

Not a black box. Not a prompt. A deterministic score built from five weighted factors, with the weights version pinned to the decision. Any assignment can be replayed against the exact inputs that produced it.

See the decision trail
{
  "technicianId": "tech_taylor",
  "score": 94.2,
  "rank": 1,
  "reason": {
    "skill_match": 1.0,
    "distance_score": 0.95,
    "priority_weight": 1.0,
    "performance": 0.96,
    "availability": 1.0,
    "predicted_duration_minutes": 88,
    "delay_risk": 0.08
  },
  "weightsVersion": 14
}

"Dispatchers stopped triaging the board and started running the day."

Operations lead, 42-truck HVAC company

"Rolled out the ServiceTitan bolt-on in an afternoon. Drive minutes dropped the next day."

General manager, regional plumbing chain

"The audit trail on every assignment was the deciding factor for our enterprise rollout."

VP operations, commercial field services

Ready to look under the hood?

OpenAPI spec, security posture, and the full decision model are linked below. API keys by request.