For contract security operators · 50-500+ officers · multi-site

One empty post can put an $820,000 contract on 30-day probation.

In the hypothetical scenario below, a dispatcher spends 91 minutes calling 23 guards from memory at 2:14 AM. The replacement arrives unarmed. The client's 24-hour audit catches it. The contract goes on 30-day probation. This is what every contract guard operator is one bad night away from.

Below is an illustrative dispatch log of that night — minute-by-minute, timestamp by timestamp. Then we show you the same 24 hours with XShift running the dispatch. The contrast is the point.

21-day free trial · Credit card required to start · Cancel anytime in the trial

Hypothetical illustrative scenario

Everything below is a hypothetical, illustrative scenario. The operator (24 sites, 180 officers, $14M revenue), the client (“BankCorp HQ”), the officer names (Marcus, David), the timestamps, the $820,000 contract value, and every dollar figure are fictional illustrative composites based on typical mid-size contract-security-operator economics. They are not measured XShift customer outcomes and are not drawn from any real customer's data. We're using a concrete scenario to show what the product does — not to describe any real event.

The operation we're looking at
24
client sites
180
officers
$14M
annual revenue
8%
net margin

An $820K contract is ~5.9% of total revenue and ~73% of an entire year's profit margin. Losing it ends bonuses. Losing two ends careers. One empty post can do it.

Part 1 of 2
· 24 hours · without XShift

The dispatcher's log · without XShift.

Every entry below is a hypothetical CAD-style dispatch log for an illustrative 24-site, 180-officer security operator. The timestamps, names, and dollar amounts are fictional — but the failure mode is the one that lands on real operators when there's no system between the call-off and the call list.

ILLUSTRATIVE · 23:47:00 Mon → 23:47:00 Tue · NO COPILOT · NO AUTOPILOT
DISPATCH CAD · 24HR LOG
23:47:14
SHIFT START
Overnight dispatcher takes the desk. 24 sites, 180 officers. Tomorrow's schedule not yet built.
00:00:00
STATUS
Routine post check-ins. All 24 sites currently staffed.
02:14:33
POST 4 · CALL-OFF
BankCorp HQ armed guard texts: “food poisoning, can't make it.” Shift ends 06:00. Client SLA: armed coverage 24/7. $820K/yr contract.
02:14:48
DISPATCHER
Phone tree begins. 23 names recalled from memory. No system filter for who's armed, off-PTO, under-cap, or has rest.
02:18:11
CALL #1
Guard #1 voicemail.
02:21:42
CALL #2
Guard #2 voicemail.
02:26:19
CALL #3
Guard #3: “Can't, I'm already at 44 hours.”
02:33:01
CALL #4-8
5 more voicemails, no answers, one wrong number.
02:48:33
CALL #9
Guard #9: “I don't have my armed cert renewed.”
03:02:17
CALL #10-14
5 more dead-ends. 47 minutes in. Still no coverage.
03:18:55
CALL #15
Guard #15: “I just closed Post 12. Need rest.”
03:31:48
CALL #16-19
4 more no-answers. 77 minutes in.
03:47:12
CANDIDATE FOUND
Guard #20 accepts. Already at 47 hrs this week (per dispatcher's mental tally). OT premium owed: ~$32/hr × 8 hrs = $256.
04:12:08
ARRIVAL · POST 4
Replacement arrives. Dispatcher realizes mid-handoff: guard is unarmed-licensed only. No armed-cleared replacement was available on the phone tree. Post is now “covered” — but it's an SLA breach.
04:13:00
LOG ENTRY
Dispatcher records “Post 4 coverage maintained” in handover notes. The client's 24-hour security audit will know better at 09:00.
05:48:22
POST 11 · CALL-OFF
Westside warehouse gate guard: vehicle breakdown 38mi out. Warehouse opens 09:00. Trucks start arriving 08:30.
05:48:35
DISPATCHER
Restarts phone tree. Now 90 minutes into a 12-hour shift with one breach and another empty post pending.
06:14:00
CALL #1-6
6 calls. 4 voicemails, 2 declines (“not in service area”).
07:02:15
CALL #7-12
6 more calls. 1 hour 15 minutes in. Zero acceptances.
08:23:55
STILL EMPTY
Post 11 unmanned 37 minutes before warehouse opens.
09:00:00
WAREHOUSE OPENS
No guard at the gate. Trucks lined up. Operations manager not yet on site.
09:03:14
CLIENT CALL
Warehouse ops manager calls dispatcher: “Where the hell is my guard?”
09:14:00
CANDIDATE FOUND
Guard #13 accepts. ETA 31 minutes.
09:45:22
POST 11 COVERED
76 minutes past warehouse open. First 16 trucks waved through with no gate check. Incident already logged client-side.
10:12:08
BANKCORP EMAIL
BankCorp Account Director emails operator: “Our 04:00-09:00 audit shows Post 4 was unarmed. We need to meet today.”
11:30:00
EMERGENCY CALL
Operations director on a call with BankCorp Security VP. Dispatcher is now writing the incident memo while still on the desk.
13:00:14
CONTRACT MEETING
BankCorp $820K/yr contract → 30-day probation. Two more SLA breaches in the next 30 days = automatic non-renewal at the end of the term.
14:00:00
COMPLIANCE AUDIT
Internal compliance check (triggered by the BankCorp incident): 3 guards on schedule today have lapsed state guard cards. Their role assignments were never updated.
14:15:00
3 GUARDS PULLED
3 more posts now empty. Phone tree resumes. Dispatcher hasn't eaten lunch.
14:20-17:00
3× COVERAGE SCRAMBLE
Three more phone trees back-to-back. Average time to coverage: 58 minutes. Average OT crossings: 1.4 per scramble.
17:48:00
EOD OT REPORT
7 guards crossed 40 hrs this week. Estimated week-to-date preventable OT: ~$1,680. Annualized at this rate: $87,360/yr.
18:14:00
OWNER CALL
Operator owner calls dispatcher: “What happened today?”
19:00:00
DISPATCHER OT
Dispatcher stays late filing incident reports. 5 hours of unplanned OT @ $42/hr = $210.
22:00:00
SHIFT END
Dispatcher leaves. Tomorrow's schedule never got built. Same dispatcher back on desk in 8 hours. Tomorrow starts with zero schedule.
The damage · one day

What yesterday actually cost the operator.

$820,000
contract on probation
BankCorp HQ. ~5.9% of total revenue. Two more SLA breaches in 30 days = non-renewal.
$1,680
preventable OT · one week
7 guards crossed 40. Annualized: ~$87K/yr in OT that didn't need to be paid.
91 min
avg call-off → coverage
3 call-offs handled. Average 91 minutes of dispatcher time per event.
76 min
post 11 gap
Warehouse open for 76 minutes with no gate guard. 16 trucks waved through unchecked.
$210
dispatcher OT · one day
5 unplanned hours. Annualized at this rate: $54K/yr in dispatcher OT.
3 posts
empty mid-day
From the compliance audit — 3 guards pulled, 3 phone trees, 3 more SLA windows in jeopardy.
The cascade

One day. $820K contract on probation. $1,680 in week OT. $210 in dispatcher OT. Owner trust shaken. Multiply by 250 working days/year and you're looking at $420K/year of preventable OT and 22,000 minutes of dispatcher phone-tree time — not counting the contract impact. The phone tree isn't a scheduling problem. It's a margin problem. It's a retention problem. It's an existential problem.

Now compare

Same 24 hours. Same operator. XShift running dispatch.

Same call-offs. Same guards. Same client sites. Different log.

Part 2 of 2
· 24 hours · with XShift

The dispatcher's log · with XShift.

Same hypothetical 24 hours. Same two call-offs. Same illustrative operator. The Autopilot is on. Manager Approval is on. The day threshold is 0.5 days, so anything inside 12 hours uses Messages mode. Watch what happens.

ILLUSTRATIVE · 23:47:00 Mon → 23:47:00 Tue · COPILOT + AUTOPILOT ACTIVE
DISPATCH CAD · 24HR LOG
23:47:14
SHIFT START
Overnight dispatcher takes the desk. Tomorrow's schedule was generated Sunday by the AI Copilot in under a minute. All 24 sites pre-staffed with role-cleared officers.
00:00:00
STATUS
Routine post check-ins. All 24 sites staffed. Dispatcher reviews tomorrow's schedule. No conflicts.
02:14:33
POST 4 · CALL-OFF
BankCorp HQ armed guard texts: “food poisoning, can't make it.” Shift ends 06:00. The dispatcher doesn't lift the phone.
02:14:34
AUTOPILOT FIRED
Autopilot runs the qualification filter across all 180 officers in the org: location, armed-role clearance, availability this hour, weekly hours aggregated org-wide, approved time-off, schedule conflicts, minimum 11hr rest from last shift.
02:14:35
FILTER RESULT
4 qualified candidates surfaced — armed-cleared, BankCorp-approved, under 40 hrs, outside clopen window, within 35 minutes of the site. Non-overtime sorted to the top.
02:14:35
MESSAGES MODE
Day threshold is 0.5d. Call-off is sub-12-hour → Messages mode. One-tap in-app accept message sent to the 4 candidates.
02:16:08
MARCUS ACCEPTS
Marcus (Officer #042, 22 hrs this week, armed-cleared, BankCorp-approved) taps Accept on his phone.
02:16:09
MANAGER APPROVAL
Manager Approval toggle is ON → request lands on dispatcher's screen with the full match scorecard.
02:16:22
DISPATCHER APPROVES
Dispatcher taps Approve. Marcus en route.
02:43:51
ARRIVAL · POST 4
Marcus on station. Armed. BankCorp-cleared. 29 minutes from call-off to coverage. SLA satisfied with 3 hours 16 minutes to spare before BankCorp's morning audit.
02:44:00
DISPATCHER
Returns to coffee. Routine check-ins continue.
03:00:00
STATUS
All 24 posts green.
05:48:22
POST 11 · CALL-OFF
Westside warehouse gate guard: vehicle breakdown 38mi out. Warehouse opens 09:00.
05:48:23
AUTOPILOT FIRED
Same filter chain. 3 qualified candidates surfaced for the warehouse gate role. Non-OT first.
05:48:24
MESSAGES MODE
Messages sent. One-tap accept.
05:51:11
DAVID ACCEPTS
David (Officer #117, 19 hrs this week, gate-cleared, lives 12mi from site) accepts.
05:51:23
DISPATCHER APPROVES
One tap. David en route.
06:12:48
ARRIVAL · POST 11
David on station. 24 minutes from call-off to coverage. 2 hours 47 minutes before warehouse open. Zero gap.
08:00:00
OT SCANNER
Overtime Scanner runs its scheduled morning scan. Surfaces 2 officers approaching 40 hrs this week. Recommends 2 swaps with qualified non-OT candidates and the dollar math attached.
08:04:12
DISPATCHER
One-tap approves both swaps. Estimated OT premium avoided: ~$480 this week alone.
09:00:00
WAREHOUSE OPENS
Post 11 staffed. Trucks moving. No client call.
10:00:00
STATUS
All 24 posts green. Dispatcher available for inspections and audits.
11:30:00
DISPATCHER
Lunch.
14:00:00
ROLE AUDIT
Operations manager runs a weekly role audit. Spots 3 officers whose state guard cards expire in the next 30 days. (Note: XShift does not track cert expirations — this audit is run by the manager from internal HR records.) Cards renewed. Roles stay current. No mid-day posts pulled.
15:00:00
STATUS
All 24 posts green.
17:00:00
STATUS
All 24 posts green.
18:00:00
EOD OT REPORT
1 officer crossed 40 this week. 1 was unavoidable (a planned client surge). Week-to-date preventable OT: ~$240. A 7× reduction from yesterday's $1,680.
19:00:00
DISPATCHER
Leaves on time. Zero OT hours.
22:00:00
SHIFT END
Dispatcher gone. Tomorrow's schedule already generated and published. The Autopilot is awake all night. The next call-off, whenever it lands, is already handled.
The quiet · one day

What didn't happen today.

$820,000
contract preserved
BankCorp Post 4 covered with an armed, cleared officer in 29 minutes. No audit breach. No probation.
$240
preventable OT · one week
Down from $1,680. Annualized: a $74K/yr OT line item recovered, on this operation alone.
26 min
avg call-off → coverage
91 minutes → 26 minutes. 3.5× faster. 100% qualified, role-cleared, non-OT first.
0 min
coverage gaps
Post 11 covered 2 hrs 47 min before warehouse open. Every site staffed continuously.
0 hrs
dispatcher OT
Down from 5 hrs yesterday. The phone tree is gone.
0 calls
from clients
Zero contract-risk emails. Zero VP escalations. Zero contract-review meetings.
The shift

The dispatcher had a quiet day. The operator preserved an $820K contract. The OT bleed went from $1,680/week to $240/week — a $74,000/year line-item recovery. The owner didn't have to call. The clients didn't have to call. And nothing happened. Which is exactly the point.

What you get

Every system that ran today's quiet log. Yours, on day one.

Not a starter tier. Not an “upgrade to unlock.” Every feature listed below runs in the standard XShift account, from the first guard you onboard.

Autopilot Call-Off

The phone tree, deleted

The second a guard calls out, the Autopilot runs the qualification filter across all 180 officers in your org — location, role clearance, availability, weekly hours, PTO, conflicts, and rest. You set the day threshold; calls-offs at or beyond it auto-assign, calls-offs under it send one-tap accept messages to a qualified short list. Manager Approval toggle lets you stay in the loop or let it run.

Value: ~750 hrs/year of dispatcher phone-tree time recovered · $74K/yr preventable OT

AI Copilot · Schedule Generation

One command. The whole week.

Type: “Generate next week's schedule.” The Copilot validates every single constraint across all 24 sites and 180 officers in under a minute: availability, OT exposure aggregated org-wide, role clearance, time-off, hour caps, preferences, pairing rules, minimum rest.

Value: 10-15 hrs/week of scheduling time recovered

Autopilot Overtime Scanner

Catch OT before it crosses 40

Scheduled scan, or run-now. Finds every officer approaching the weekly overtime threshold, surfaces qualified non-OT replacements for the shifts that would push them over, with the dollar math attached. One tap to approve. Never auto-swaps.

Value: ~$74K/yr in preventable OT recovered on a 180-officer operation

Multi-Site Hour Aggregation

No more cross-client invisibility

Every officer's hours are aggregated across your whole organization, not per client site. The 22-hour officer at BankCorp shows up in every other site's candidate list. The 38-hour officer at the warehouse falls to the bottom.

Value: cross-site OT premium recovered on every call-off

Clopen / Rest-Period Rule

11+ hrs between shifts. Enforced.

Tell XShift: “Every officer needs at least 11 hours between when one shift ends and the next starts.” The Autopilot and the schedule grid both honor it. The closer-to-opener back-to-back never lands on the schedule.

Value: tired-guard incidents avoided · cleaner audit trail · fewer workers'-comp claims

Custom Rules Engine

Your operation, your rules

Pairing constraints (officers who can't work together), daily and weekly labor caps per site, per-day-of-week caps, OT-block rules. Each rule fires at assignment time, not at payroll time. Hard mode blocks the save; soft mode lets you force-save with a reason.

Value: your operation's edge cases, codified once, enforced forever

Officer Preferences

Retention is a feature

Each officer configures preferred days, unavailable days, preferred start/end times, and a maximum hours per week. The AI Copilot honors them during schedule generation. Officers who feel scheduled-with, not scheduled-at, stay longer.

Value: hourly-officer turnover (industry avg 100-300%/year) reduced materially

Self-Serve Onboarding

Live same day · no implementation

The AI Copilot walks you through setup in natural-language chat. Configure your sites (locations) and posts (roles), bulk-import officers from a CSV, ask the Copilot to generate your first schedule. No 6-month implementation. No IT review.

Value: 400-800 hours of management onboarding time avoided
The offer

Every empty post is your competitor's opportunity.

You can keep running dispatch on memorized phone trees, hoping that tonight's 2:14 AM call-off doesn't land on a $820K contract.

You can keep paying $74,000 a year in overtime that didn't need to be paid, because cross-site hours never aggregated and the under-40-hour officer at your other site never surfaced.

You can keep losing dispatchers to burnout because 90-minute phone trees at 3 AM are the second job they didn't sign up for — and watch the cost cascade every time one quits.

Or you can give your dispatcher a system that runs the qualification filter in seconds, sends the one-tap accept message to only the qualified short list, aggregates hours org-wide, surfaces OT swaps with the dollar math attached, and lets your dispatcher have a quiet day.

Here's the deal
  • 21 days. Full access to the entire platform. No starter tier. No locked features.
  • Credit card required to start the trial. You are not charged anything during the 21-day window.
  • Cancel anytime before the trial ends. No charge, no commitment, no questions.
  • Setup runs through the AI Copilot in natural-language chat. Under 10 minutes from login to first generated schedule.
  • Pricing afterward: $29/month + $1 per active officer. On a 180-officer operation, that's $208/month.

$208/month to make your dispatcher's log boring. The math doesn't need a calculator.

Tonight your dispatcher will be on the desk at 23:47. You decide which log she writes.

Two versions of the same 24 hours. You pick which log gets written.

A note on rules and your operation

XShift's Autopilot and AI Copilot enforce the rules you configure — minimum rest hours between shifts, weekly hour caps, daily and weekly labor caps, pairing constraints, officer preferences, and per-role staffing minimums. The operations manager and dispatch supervisors remain in control of every decision and can override or reverse Autopilot at any time. Schedules are reviewed before they go live. XShift is a workforce-operations tool, not a compliance product — your operation, your management team, your attorneys, and the relevant regulators (state guard licensing, wage-and-hour, union contracts where applicable) determine whether your configured rules satisfy applicable law. XShift does not track state guard card or other certification expirations; certification currency is managed in your HR system, and the role assignments in XShift reflect what the manager has set.

About the figures

The 24-hour dispatch log on this page is an illustrative composite based on typical mid-size contract security operator economics (24 client sites, 180 officers, $14M annual revenue, 8% margin). The timestamps, names, contract values, and dollar figures are illustrative — they are not measured XShift customer outcomes and are not drawn from any single customer's data. Actual results depend on your operation, wage structure, client SLAs, regulatory environment, and how you configure XShift.

Security Guard Scheduling Software | XShift AI