Location-based scheduling for field service businesses
Dispatcher logic, at the moment of booking.
GeoWise looks at where your staff already are that day, which zones you serve on which days, how long the job takes and how long the drive is, and shows each customer only the times that fit. They book in one step, on your site, on WhatsApp, by phone, or through their AI assistant. No contact form, no call-back, no dispatcher in the loop.
Works with your website, WordPress, WhatsApp, Google Business Profile, Zapier, Claude, ChatGPT and any app through the API.
The booking loop every field company runs
Before
A customer fills in a contact form or calls. Someone with a map in their head works out where the vans already are that day, which weekday that street gets visited, who has the right skills, how long the job takes, how long the drive is. They call back with two or three times. The customer has moved on, or picks one, or the loop repeats.
or the loop repeats
With GeoWise
The customer types their address and picks a service. GeoWise runs the dispatcher's reasoning in under a second, using your zones, coverage plan, staff hours, existing bookings, live travel times and buffers, and shows the times that fit. The customer picks one and it is confirmed.
The efficiency comes from the fact that every accepted booking was already feasible and already cheap to serve. The conversion comes from the fact that the customer got a confirmed time in the same interaction, at 11pm on a Sunday.
Three things to set up. Everything else is computed.
Draw your zones
Draw polygons on the map, paste a postcode list, set a radius, or let GeoWise propose zones from your past job addresses (the zone wizard). Zones can overlap; each zone can carry its own buffer, windows, capacity and fees. After about 50 bookings, auto-clustering keeps proposing optimised zones from your customer distribution, staff capacity and workload balance. You approve a proposal before it applies.
Set your coverage plan
Say which staff serve which zone on which days: "North: Tuesdays and Thursdays, Ana. South: Mondays and Wednesdays, Marko. Saturdays: anyone." Add exceptions for holidays, sick days and cover. This is the rule set the engine schedules inside.
Pick a scheduling mode per service
Back-to-back for installs and fixed-duration jobs, arrival windows for maintenance rounds, open for the rare long job, optimizer-graded if you are plugging in through the API. Add your buffer, lead time and booking horizon.
Your customers book what fits
Every channel calls the same engine and gets the same answer: the widget, the hosted page, WhatsApp, a voice agent, a dispatcher on the phone, an API partner, or a customer's AI assistant.
Technician scheduling and maintenance crew management
GeoWise treats technician scheduling as a routing problem, not a calendar fill. Each offered slot already respects who is nearby, which zone they cover that day, and how long the next drive will take.
Zone-aware crew days
Assign technicians and maintenance crews to service zones so customers only see times when the right people are already in the area.
Back-to-back without the scramble
Jobs cluster along the route. Drive time drops, and the same crew finishes more productive days with fewer empty stretches between stops.
One engine for every channel
Website, WhatsApp, and phone bookings all use the same technician scheduling rules, so maintenance crew management stays consistent wherever the customer books.
Back-to-back scheduling, step by step
In back-to-back mode, one technician's jobs in a zone form a single chain with no idle gaps. The first customer picks any valid time. Every customer after that sees just two options: one that extends the chain before the first job, one that extends it after the last. The chain grows in both directions until the day is full.
Interactive illustration of back-to-back scheduling. Left is a map with a shaded North zone, a depot pin and a draggable new-customer pin; right is technician Ana's Tuesday calendar from 08:00 to 17:00. Step 1: empty day, customer picks 10:30. Step 2: one job 10:30-11:30; two offered times, 09:05 before and 11:55 after, computed from job end plus 10-minute buffer plus 12-minute drive. Step 3: three jobs back to back 10:30-14:20 with 12 and 15 minute drives between; offered times 09:10 and 14:50. Step 4: cancelling the middle job creates a gap-fill slot at 11:50. Dragging the pin recomputes drive times and offered slots; a developer toggle shows the same state as an API request and response.
What the engine computed
08:20 = 08:00 start + 20 min from depot (day empty)
10:30, suggested start on the empty day
13:00, suggested start on the empty day
What the engine computes
- After-slot start
- Last job end + buffer + drive time from the last job's address to the new address. Valid if the job finishes (and returns to base, if required) within working hours.
- Before-slot start
- First job start − buffer − drive time from the new address to the first job − job duration. Valid if the technician can leave base and arrive in time.
- Gap-fill start
- Previous job end + buffer + drive to the new address. Valid if the new job plus buffer plus the drive to the next job fits before the next job starts.
- Empty day
- Any time from (working start + drive from base) to (working end − job duration), on the anchor grid.
- Rounding and travel
- Times are rounded to a friendly grid (up for after-slots, down for before-slots); the rounding slack becomes extra buffer. Drive times come from the Google Maps Routes API with time-of-day traffic profiles. Everything is computed from the neighbouring jobs' real addresses, never from the depot unless the day is empty.
One engine, four ways to offer times
Under the hood there is one engine. For any job at any address it tentatively inserts the job into each eligible technician's planned day and checks working hours, travel from the previous stop and to the next, buffers, skills and capacity. The mode decides which of the feasible times you show and how. Set it per service and per zone, not once for the whole company.
Back-to-back
Route-first. Exact times that extend the existing chain in the customer's zone.
How it works. The first customer on a zone-day picks any valid time. Later customers see up to two: before the first job or after the last, plus any gap left by a cancellation. Other coverage days for the zone are shown alongside, so choice comes from days, not from times inside a day.
Best for: installs, fixed-duration services, inspections, cleaning, any company without a dispatcher.
Trade-off: little choice inside a day once it has a seed. Fallbacks handle the customer who needs something else.
Arrival windows + auto-confirm
Choice-first. The customer books a window; the optimizer locks the exact time before the day.
How it works. You define windows per zone-day (morning 08–12, afternoon 12–17, or 2-hour windows) with a capacity budget in jobs or minutes. Customers pick a window. At your cutoff (say 18:00 the day before) GeoWise sequences every job in the zone-day into the best route and texts each customer a confirmed time or a narrowed one-hour window. After the cutoff, late bookers for that day see only back-to-back slots that extend the locked route.
Best for: maintenance rounds, recurring services, utilities and installers whose customers expect windows, teams with a dispatcher who wants the optimizer to sequence the day.
Trade-off: the customer waits for the exact time until the cutoff. They get a live ETA on the day.
Open, travel-aware
Any time that physically works.
How it works. Customers pick any start at your booking interval on any working day. GeoWise still blocks the drive time to and from every existing job, the buffers, hours and lead time, so nothing impossible is shown. An optional drive-time limit narrows it to times near existing jobs.
Best for: very low booking frequency, long jobs that fill a day anyway, premium "you choose" services, float staff with no zone.
Trade-off: the least efficient mode by construction. We recommend it only where density does not matter.
Optimizer-graded
Every feasible slot scored against your objectives.
How it works. For each request the engine evaluates every feasible position across staff and days, computes the marginal cost (added drive minutes, overtime risk, load balance, revenue), grades each slot 0–100 against your weighted objectives (minimise travel, as soon as possible, same technician for this customer, protect reserved capacity), and returns the best ones with labels and a one-sentence explanation. Thresholds hide low grades and pin the best three.
Best for: API partners, enterprises, marketplaces, multi-region operations, and mid-size companies once they have data.
Trade-off: needs configuration. The other three modes are presets of this engine, so you can start simple and switch later.
| Back-to-back | Arrival windows + auto-confirm | Open, travel-aware | Optimizer-graded | |
|---|---|---|---|---|
| Customer picks | one of two exact times per zone-day, across coverage days | a window; exact time confirmed by cutoff | any interval start | one of N graded slots |
| Route efficiency | highest, no optimizer needed | high; full-day optimization at cutoff | lowest | highest, with configuration |
| Customer choice | low within a day, good across days | high | highest | tunable |
| Precision | exact, instant | wide early, narrow late | exact | exact or window |
| Default for | SMB, fixed-duration services | recurring and maintenance, mid-size | low-frequency, long jobs | API, enterprise, marketplaces |
Modes are set per service and per zone. A company can run back-to-back for installs, arrival windows for maintenance and open for the rare six-hour job, on the same calendar.
When the two times don't suit
A customer who cannot make the offered times is not a lost booking. Every mode has fallbacks, in this order.
"None of these work"
GeoWise offers the next option, in order
- 1
Other days. The next coverage days for their zone, each with its own options.
- 2
Next door. If a neighbouring zone's chain is within a short drive (you set the limit, say 15 minutes), its slots are offered too.
- 3
Request a time. They propose preferred windows; GeoWise holds capacity and you (or the auto-dispatcher) confirm within your stated SLA.
- 4
Urgent. If you enable it: the earliest feasible arrival across all staff today, using capacity you reserved for emergencies, with an optional urgent fee. Confirmed bookings are never bumped without a dispatcher’s approval.
- 5
Waitlist and backfill. They join the zone’s waitlist with preferred days. When a cancellation opens a gap that fits their address, GeoWise offers it to them automatically, first to accept wins, before the slot goes public.
Instant when you trust it, request when you don't
Instant confirmation is the default. It is what makes after-hours bookings possible (ServiceTitan reports that about half of its online bookings arrive outside business hours). Request mode places a hold and asks you to approve, adjust or decline. Most companies want both, decided per booking by rules:
- Instant if the slot is inside your coverage plan, the service has a fixed or answer-derived duration, and (optionally) a deposit is paid or a card is on file.
- Request if the job is outside the plan, needs a quote, is above a value threshold, or came through a channel you trust less (a third-party AI agent, for example).
Confirmation rules
Every knob a dispatcher would want, with sensible defaults
Buffers and travel
Fixed minutes after each job, a percentage of duration, or learned from your actual job times. Drive times from the Google Maps Routes API with time-of-day traffic, with a pessimism factor you control. Friendly rounding (5, 10 or 15 minutes).
Lead time and horizon
Minimum notice per service (same-day allowed with a cutoff hour), how far ahead customers can book.
Capacity
Max jobs per technician per day, max drive minutes per day, max jobs per zone-day, and reserved capacity: hold back a share of each day for urgent work, released automatically the evening before.
Presentation
Exact time, an arrival window after the start (15 minutes to 2 hours), a centred window, or part of day. How many options per day, how many days, and whether an empty day shows a full grid or a few anchor times.
Coverage rules
Adjacent-zone spillover with a drive limit, what to do outside all zones (decline, request only, or nearest zone with an off-route fee), staff start and end locations, return to base or not, skills and crew headcount.
Labels and pricing
"We're already nearby" labels on offered slots (on by default), optional discounts for efficient or flexible slots, urgent fees, off-route fees.
Money
Deposits (percentage, fixed, or full prepayment), card pre-authorisation charged only on no-show, cancellation and reschedule policies, no-show fees.
Notifications
WhatsApp, SMS, email or RCS per customer preference; reminders at 24 h and 2 h with one-tap confirm or reschedule; confirmed-time messages at the cutoff; on-the-way messages with a live map link; proactive delay alerts.
Precedence: company → service → zone → staff → channel, so you can set a 10-minute buffer for everything and a 20-minute buffer for the zone with terrible parking.
Live operations: the promise and the day are the same data
Staff app
Each technician sees their route with ETAs, navigates, marks en route, arrived and completed, adds notes and photos, and takes payment. Location is shared during shifts only.
Live map
Every technician, every planned and completed stop, the live ETA for every remaining visit, coloured by lateness.
Live ETAs for customers
When a technician marks en route, the customer gets a message with a live map link and an arrival estimate that updates with traffic.
Proactive delay alerts
If a predicted arrival slips past the promised window by more than your tolerance (default 10 minutes), the affected customer and every downstream customer on that route are told before they have to ask. The dispatcher gets options: accept, re-sequence inside promised windows, or hand later visits to a float technician.
Auto-dispatcher
Drop pins or import jobs and it assigns them inside your coverage plan, sequences routes, re-optimises overnight (and intraday if you allow it) without moving any visit outside its promised window, approves requests that fit, and inserts urgent jobs against reserved capacity. Assist mode suggests; auto mode acts and reports.
Cancellation backfill
A cancelled visit becomes a gap-fill slot, offered to the waitlist and then to later customers in the same zone who might like to come earlier.
What-if
Drag a visit on the calendar and see added minutes and promised windows at risk before you save.
Run the whole operation, or just the scheduling
Use GeoWise as your whole back office, or keep the software you have and use only the scheduling engine underneath it.
Plug it in from anywhere
Every surface below calls the same engine and enforces the same rules. Pick the ones your customers and your team already use.
Hosted booking page
A GeoWise-hosted page for your company. Link it from Google Business Profile, Instagram, WhatsApp and email signatures.
Website widget
One script tag. Inline, popup or floating button. iframe fallback, a web component, and a React component for product teams.
WordPress plugin
Block, shortcode and Elementor widget. Also Shopify, Wix, Squarespace and Webflow instructions.
WhatsApp AI
GeoWise's own assistant books, reschedules, reminds and sends ETAs on WhatsApp, and can set your account up from a chat ("send me your past job addresses and I'll propose zones").
Voice agents
Fast availability lookups with spoken labels, holds and explicit confirmation. Works with Vapi, Retell, ElevenLabs Agents, OpenAI Realtime and Twilio.
AI assistants (MCP)
One hosted MCP server connects Claude, ChatGPT, Gemini, Microsoft Copilot, Perplexity and any MCP client. Your customers' assistants can find times, hold and confirm.
Zapier, Make, n8n
Triggers for every booking and visit event; actions to find availability, create, reschedule and cancel; searches by phone or email.
REST API and SDKs
OpenAPI 3.1, TypeScript and Python SDKs, signed webhooks, idempotency keys, sandbox keys, markdown docs and llms.txt for agents.
Calendar and CRM
Google and Microsoft calendars, HubSpot, Salesforce, Pipedrive, and "bring your own field service software" with two-way booking sync.
Google, Apple and Meta surfaces
Reserve with Google, Google Business Profile booking links, Apple Business Connect actions, Instagram booking, Meta Business Agent.
Three calls to a confirmed booking
POST /v1/availability
{
"service_id": "boiler-service",
"address": "12 Oak Street, Sarajevo",
"date_from": "2026-09-01",
"date_to": "2026-09-07",
"limit": 6
}
→ {
"slots": [
{
"slot_id": "slt_9f3",
"start": "2026-09-01T11:55:00+02:00",
"window": "11:55–12:25",
"labels": ["nearby"],
"grade": 94,
"why": "Ana is already on Oak Street at 11:30"
},
{ "slot_id": "slt_a11", "start": "2026-09-01T09:05:00+02:00", ... }
],
"fallbacks": { "request": true, "waitlist": true, "urgent": false }
}
POST /v1/holds
{ "slot_id": "slt_9f3", "ttl_seconds": 600 }
→ hold_h7
POST /v1/bookings
{ "hold_id": "hold_h7", "customer": {...} }
→ status "confirmed"Building with an AI coding tool? Paste this into it
Add route-aware appointment booking to this project using GeoWise. Read the OpenAPI spec and the docs at geowise.ai/api-documentation. Install the official SDK. Flow: call find availability with the customer's address and service, show the returned slots using their labels, call hold on the chosen slot, then create the booking from the hold with an Idempotency-Key header. Never compute or guess appointment times; only use slot IDs the API returned. Use test keys from the sandbox. Add webhooks for booking.confirmed and visit.en_route.
Or add GeoWise's MCP server as a custom connector in Claude, ChatGPT, Gemini, Copilot or Perplexity. The API documentation is written to be read by coding agents as well as people.
Designed so an AI can book safely
Assistants are becoming a booking channel: a customer asks their assistant to "get someone to look at the boiler this week", and the assistant needs to find real times, hold one, confirm it and later reschedule it, without a human hand-off. GeoWise's contract is built for that.
From one van to a national network
1–10 staff
Small teams
Set up from a WhatsApp chat or in ten minutes on the web. Back-to-back scheduling, a booking link, reminders and live ETAs. Stop paying for drive time.
10–100 staff
Growing companies
Zones and coverage plans across several technicians, arrival windows with auto-confirm, reserved capacity for emergencies, the auto-dispatcher and the live map. Give your dispatcher the same engine your customers use.
Multi-region
Enterprises and networks
Optimizer-graded availability with your objectives, holds and idempotent booking through the API, multi-depot and multi-region, webhooks, SSO, sandbox, SLAs.
Headless
Platforms and builders
Put the engine under your own product: headless API, per-tenant zones and staff, multi-provider search, embeddable components, an MCP server your users can connect, and docs an AI coding tool can integrate in an afternoon.
Pay per booking, nothing per seat
A booking operation is a confirmed booking. Availability searches, holds, reminders, ETAs, reschedules and cancellations are free, and so is every channel, every zone and every staff seat.
Free
$0 · 50 bookings/month
Every scheduling mode, every channel, unlimited staff and zones. Enough to run a one-van business entirely free.
Pay as you go
Most companies$0.49 per confirmed booking
Beyond the free 50 each month. Volume pricing applies automatically: $0.39 per booking past 1,000 a month, $0.29 past 5,000. Every feature included.
Platform & enterprise
Custom · committed volume
For software vendors and multi-region operations putting the engine under their own product.
SMS and WhatsApp messages are passed through at carrier cost. Stripe's payment fees are Stripe's.
What the research says
81%vs 23%
"We're already nearby" labels change behaviour: in controlled experiments, 81% of customers chose the green-labelled slot versus 23% without the label, and the label outperformed a €2 discount.
Agatz, Fan & Stam, Production and Operations Management, 2021
1-hour windows
Shorter windows matter: in a survey of 1,044 homeowners, one-hour arrival windows maximised satisfaction with plumbing visits (Zion & Zion). In an earlier consumer survey, 76% said multi-hour windows inconvenienced them and 61% wanted a text one hour before arrival.
Zion & Zion; Harris Interactive for SoundBite, 2010
68% → 79%
Reminders reduce no-shows: across eight randomised trials, SMS reminders raised attendance from about 68% to 79%, as effective as phone calls at a fraction of the cost.
Cochrane review
About half
Bookings happen after hours: about half of online bookings through ServiceTitan's Scheduling Pro arrive outside business hours.
ServiceTitan, vendor figure
Questions people and AIs ask
Scheduling in which the times offered to a customer depend on where the customer is, where the company's staff already are or will be that day, and how the company has divided its territory into zones and days. GeoWise computes those times automatically at the moment of booking.
Put the dispatcher in the booking form.
Draw a zone, set a coverage plan, share a link. Your customers book times that fit your routes, tonight.
GeoWise is an API first. Everything on this page is available through it.