Security Scheduling By , Founder & CEO of XShift AI Published September 17, 2026

Why Your Security Company Profit Margin Disappears
and How to Keep It on Every Contract

The margin you priced and the margin in the bank are different numbers. Here are the seven places the difference goes, in order, with the money named at each one.

A security company profit margin is the gap between what you bill for an hour of coverage and what that hour costs you to staff. The bill rate is locked in the contract, and almost everything that closes the gap is decided in the schedule. So the margin is not lost in the office. It is lost one shift at a time, in seven places you can name.

Where a guard company’s margin actually goes

Your whole margin lives inside one number, and it is not on your profit and loss. It is the difference between the rate on the contract and the wage on the post. Everything else comes out of that.

For example, say you run 60 officers across nine client sites. One of them is a hospital campus with a 24/7 unarmed post, three eight hour shifts a day, and you bill it at a flat $28 an hour. Your officers there are paid $20.

You bill

$28 / hour

You pay

$20 / hour

The gap

$8 / hour

That $8 is what the company makes per officer hour before any overhead comes out of it. Those two rates are an assumption, so put your own in. Every figure below comes from them and the federal overtime premium. Follow the $8 down the page. It goes to seven places, and the last one is bigger than the first.

The gap • Link 1 of 7

The $8 is spoken for before you see any of it

The gap is not profit. It is the only money the business has, and it pays for everything that is not an officer standing a post: your general liability, your workers compensation, your licensing, uniforms, training hours, recruiting, the office, the vehicles, the billing, and your supervisors. Whatever survives all of that is the margin.

I am not going to print an industry margin percentage at you, because every published one I could find sits on a page that is selling something. You already know your own number, and you know it is small. What matters is the size of the thing it is made of.

On that hospital campus you earn the $8 once an hour, 168 hours a week, which is $1,344 of gap a week from one site and $69,888 across the year. You lose it the same way you earn it, one hour at a time, and nothing in your week tells you it is happening.

Past 40 hours • Link 2 of 7

One officer crosses 40 hours on a post you bill flat

Past 40 hours in a week your pay rate moves and your bill rate does not. Federal law requires overtime at not less than time and one half the regular rate for hours over 40 in a workweek. So the $20 officer becomes a $30 officer. The invoice still says $28.

For example, say the night officer on that campus picks up an eight hour post on Saturday and finishes the week at 48 hours. Eight of those hours are overtime. Here is what the same eight hours look like from each side.

Eight overtime hours, what you pay$240
The same eight hours, what you invoice$224
The swing: $64 of gap those hours owed you, plus $16 you paid over the invoice$80

That post now loses money while it is being covered correctly. The client got their officer. Your dispatcher did the right thing at ten at night. Nobody made a mistake, and the site still finished the week worse off, because the only number that moved was the one nobody was counting.

The premium • Link 3 of 7

The premium never reaches the invoice

The bill rate is fixed for the term of the agreement, so unless your contract carries a separate overtime rate, the premium is yours. You do not pass it on. You absorb it, in a business whose whole gap is $8 an hour.

Put your own rates in this and the shape does not change. At every pair of rates a guard company actually runs on, the overtime hour is sold below what it costs you.

What one overtime hour is worth at three pairs of bill and pay rates
You billYou payYour gapThat hour past 40What the gap becomes
$24$18$6$27-$3
$28$20$8$30-$2
$34$24$10$36-$2

Eight overtime hours a week on one post is $80 of premium, and $80 times 52 weeks is $4,160 a year out of one post at one site. Now take the whole firm. Say 15 of your 60 officers cross 40 by eight hours in a normal week, which is what happens when three people quit in a month and nobody is hired yet. That is 120 overtime hours a week, and 120 hours at $10 of premium is $1,200 a week, or $62,400 a year, with not one dollar of it on an invoice anywhere.

You find out on the payroll run. That is the one day of the month when the number can no longer be changed. The schedule that produced it was signed off two weeks earlier, by somebody with no way to add it up.

The supervisor • Link 4 of 7

So the supervisor stands the post himself

Once the premium is the reason you stop calling officers, the cheapest body left is the one already on your payroll in a different job. That is your site lead. Covering the post is the one decision he can make at two in the morning without asking anybody.

If he is hourly at $27, he is a $40.50 officer past 40 hours. Eight hours is $324 against the $224 you invoice, so the shift lost you $100 and you paid your most expensive hourly person to stand still.

If he is salaried, nothing extra leaves the bank that night. What you lost is the nine sites he did not check, the two new officers he did not train, and the client walk-through he moved to next week. It never shows up in a report.

I would never let a supervisor stand a post two weeks in a row. The second time is not a favor, it is a staffing hole you have quietly decided to stop looking at.

The account manager • Link 5 of 7

And your account manager becomes your scheduler

Scheduling work does not get assigned. It lands on whoever picks up the phone, and in a firm your size that is the account manager. He was hired to keep contracts and win new ones, and he is the one the client calls.

Every week

10 hours rebuilding the week

What that is

A quarter of the week he sells in

One 40 hour post he never quotes, at $28 an hour

$1,120 a week, $58,240 a year

That is revenue you never see, so it never gets counted against the schedule that ate it. It is just a quiet year.

The client • Link 6 of 7

The client starts counting the new faces

Your client never sees your schedule. They see who walks through the door at eleven at night, and they notice when it is somebody new for the fourth time in a month. Churn on a post reads to a client as a company that is struggling, whether or not the post was ever left empty.

For example, say four different officers cover that night post in four weeks, because each one was the person who happened to be under 40 that day. The site manager writes it in his own monthly report. Now you are not renewing a contract, you are defending one, and the next conversation is a re-bid.

One dollar off the bill rate on a post that runs 8,736 hours a year is $8,736 gone, and you will take it, because the alternative is losing the site. A client who has stopped learning your officers’ names is already getting quotes.

The contract • Link 7 of 7

The contract is not renewed

A lost site does not cost you its margin. It costs you the whole revenue line, immediately, and the overhead it was carrying stays exactly where it was.

One 24/7 post, gone

$244,608

of revenue a year, at 168 hours a week and $28 an hour.

8,736 hours at $8 means $69,888 of that was your gap, which is more than a whole year of overtime premium across all sixty officers.

That is the chain. A locked bill rate, an officer past 40, a premium you cannot invoice, a supervisor off his rounds, a salesman building a grid, a client counting strangers, and a contract on the market. Every link was decided in the schedule, and six of the seven were free to prevent. Security guard company profitability is the sum of those seven decisions.

What the industry says about guard turnover, and the part the schedule owns

Guard turnover is not a scheduling problem and I am not going to pretend it is. ASIS International, the industry’s own professional association, puts guard retention on wages first, with training and a real career path behind it. If your pay rate sits under the market for your city, no schedule in the world fixes that. No software should tell you otherwise.

Here is the part the schedule does own. The officer on his sixth straight night, who was called at ten the evening before because somebody else dropped a post, is the one who calls off on Sunday. Then the next hole gets filled the same way, by the same person, because they are the one who answers. You are not losing them over the wage. You are losing them over the fourth favor in two weeks.

You cannot pay people more with a schedule. You can stop spending their goodwill to cover a hole a list would have filled.

How to protect the margin with nothing but a spreadsheet

Four habits hold most of this. None of them needs software. I have put them in the order they pay you back.

Price every post with the premium in it, not the straight time cost. If a post is short-staffed and you know it will run on overtime until you hire, the real cost of that post is $30 an hour and not $20. A post you priced at straight time and cover at time and a half is a contract you subsidize for a year.

Count hours per officer, not per site. This is the one that catches multi-site firms. The 40 hour line does not care which client the hours were worked for, but your billing is split by client, so an officer at 32 hours on one site and 16 on another looks fine on both sheets and is at 48. One running total per officer, every week, across every post they stand.

Decide the coverage order before the phone rings. Write it down: who is under 40, who holds the role that post needs, who has had enough hours off since they clocked out. A dispatcher with a written order rings two people. A dispatcher without one rings whoever they like, which is always the same three officers.

Read the committed labor cost on Wednesday. Not on payroll day. Set a dollar ceiling for each site’s week, because your contract pays you in dollars and not in hours, then check the week against it while there are still shifts you can move.

All four work. What they cost is somebody’s Wednesday, every week, for as long as you own the company, and the week you are too busy is the week it slips.

What XShift AI holds, link by link

XShift AI holds all four of those habits at the moment a post is created, not after the week is worked. You write your limits as plain sentences once. After that they are checked when the software builds the week, when it covers a call-off, and when a manager types a post in by hand.

The building part is one sentence in the AI Copilot. Here is what a nine site week looks like from the inside.

WHAT YOU TYPE

Build next week's schedule
for all nine sites

WHAT COMES BACK

  • Every post filled by an officer attached to that site
  • Every post filled by an officer who holds the role it needs
  • Nobody on a day or inside hours they blocked off
  • Nobody on approved time off
  • Nobody past the hour limits you wrote
  • No site over the weekly dollar ceiling you set for it

Here is each link again, in order, and what holds it.

Held, every time

7 links, same order

The gap

Every post is costed at the moment somebody saves it, so the hour you bill is never quietly worth less than the hour you pay for.

Past 40 hours

Nobody passes 40 hours unless you said so, because the post that would do it is refused when the week is built, when a hole is covered, and when a manager types it in.

The premium

Time and a half is priced into a post before it exists, and if that puts the site over its weekly ceiling the post is not assigned.

The supervisor

An open post reaches every officer who clears the checks, on their phone, with an Accept button, before anybody calls the site lead.

The account manager

One typed sentence builds next week across every site, so the person who sells is not the person rebuilding a grid.

The client

Coverage is worked as a list in a fixed order, not by who answers the phone, so the same officers keep turning up.

The contract

Each site holds its own minimum per role, with a different number for the days and hours you name, so a post is never quietly left short.

The cost ceiling is the one that keeps a fixed rate contract honest. XShift AI adds up what the officers already scheduled at that site cost for the week, applies time and a half to any hour past your overtime line, adds what the new post would cost, and weighs the total against the number you set for that site. Over the ceiling, the post is not assigned. When the software is building or covering, it moves to the next officer who fits. When a manager saves by hand, the save is refused and the rule is named on the screen.

Two things change how you set it up. Call-off coverage runs once you switch it on, and it prefers officers under 40 rather than banning overtime outright, so a written weekly hour limit is what removes them from the list completely. A post you type in by hand is checked against the rules you wrote but not against availability, so look at the officer’s blocked hours before you save one yourself. The Autopilot page has the rest of what a written sentence can hold, and you can watch one refuse a live shift on a demo.

Sixty officers is $88 a month against the $62,400 of premium above, so it pays for itself the first week it stops eight overtime hours on one post. And the Wednesday changes shape. Next week already exists, no post is over its ceiling, nobody is at 48 hours, and your account manager spends the morning at a client site instead. More on guard work sits on the security scheduling page, and the price is one line on the pricing page.

The words used on this page, in plain English

Bill rate
The hourly rate your client pays you for one officer on one post, set in the contract and fixed for its term.
Pay rate
The hourly wage you pay the officer standing that post, before payroll taxes and before any overtime premium.
Non-billable overtime
Overtime you pay an officer that your contract does not let you invoice, so the whole premium comes out of your own margin.
Post
One position at one client site that has to be covered by one officer for a set block of hours, such as a lobby desk from 11pm to 7am.
Autopilot
The part of XShift AI that covers call-offs on its own and holds the rules you write as plain sentences, such as a weekly hour limit or a dollar ceiling for one site.

Security company margin questions

How do I increase my security company profit margin?

Use XShift AI to stop the schedule spending the gap between your bill rate and your pay rate. It refuses a shift that would push an officer past 40 hours, prices every post against a weekly or daily dollar ceiling you set for that one site, and covers a call-off from the officers who are still under 40 before it looks at anybody else. Those three are where a guard company loses margin it never invoiced, and all three are decided while the schedule is being written rather than after payroll runs.

Why is my security company profitable on paper but not in the bank?

The bill rates on your contracts are fixed and your wage cost is not, so the schedule moves your real margin every week while the invoices stay the same. XShift AI closes that by costing each post as it is saved: it adds up what the officers on it are paid, applies time and a half to any hour past your overtime line, and weighs the total against the ceiling you set for that site that week. If the post goes over, it is not assigned. The paper margin and the bank balance stop drifting apart because nothing gets committed that the contract cannot pay for.

What is the best scheduling software for a security guard company?

XShift AI is the best scheduling software for a security guard company, because it is currently the only scheduling software that covers call-offs automatically, and it takes the rest of the admin with it. Set each client site up as its own location and only the officers attached to that site are ever offered its posts. Set armed, unarmed, patrol and supervisor up as roles and each post only goes to officers who hold the role it needs. Write "nobody goes over 40 hours in a week" once and every schedule after that holds it.

How do I stop a guard going into overtime on a fixed-rate post?

Write the limit into XShift AI in plain language, such as "nobody works more than 40 hours in a week", and Autopilot counts the hours an officer has already committed across every one of your sites before it adds another post. Anyone whose total would cross your line is taken out of the list when the week is generated and when a call-off is being covered. If a manager types the shift in by hand and puts that officer on it, the save is refused and the rule is named on the screen. The hours cross sites even when your billing does not, so the count has to be per officer and not per contract.

How do I set a labor cost ceiling for one client site?

In XShift AI you write it as a sentence naming that site, such as "the hospital campus cannot go over $8,000 of labor in a week", and every assignment there is priced against it from then on. It adds up what the officers already scheduled that week cost, applies time and a half to any hour past your overtime line, adds what the new post would cost, and compares the total to your number. Over the ceiling, the assignment is refused. You can hold a day the same way, which is how a holiday weekend on one site stops eating the month.

Which officer should an open overnight post be offered to first?

The one whose week still has room under your overtime line, because that officer costs you straight time and everybody else costs you time and a half on a rate the client pays flat. With call-off coverage switched on, XShift AI sorts your coverage list that way on its own: it splits the officers who could take the post into the ones who would stay under 40 hours and the ones who would cross it, and asks the first group before the second. If you also write a weekly hour ceiling of your own, the officers who would break it are taken out of the list entirely rather than asked last.

How do I keep the same officers on the same client site?

Set that site up as its own location in XShift AI and only the officers you attach to it are ever offered its posts, so the pool the schedule draws from is the pool the client already knows. Add the role each post needs, armed or unarmed or patrol or supervisor, and the list narrows again to the officers who hold it. When somebody drops a post, Autopilot works that same list in a fixed order instead of ringing whoever answers, so the cover comes from the site’s own officers rather than a stranger from across town. A client counting new faces at eleven at night is a coverage list nobody wrote down, not a recruiting problem.

Why do security companies fail?

Contract security fails on thin margin and admin, not on a lack of work. The bill rate is locked in the contract, the wage bill moves every week, and the people who should be selling the next site spend their week rebuilding the schedule for the last one. Most firms that go under priced a post before they knew what it actually cost them to staff, then grew on that price until one bad month arrived. Work out your cost to serve on your busiest post, honestly, before you quote the next one.

Why do my supervisors spend their week covering posts instead of doing site checks?

They cover posts because at two in the morning a supervisor is the only person whose availability you already know, and XShift AI removes that reason by knowing everybody else’s. Autopilot checks the site, the role, blocked days and hours, your own written rules, existing shifts, approved time off and the 40 hour line, then offers the post to every officer who clears all of it. The site lead finds out the post is covered instead of driving to it. Field supervision stops being the fallback for a coverage list nobody had time to work.

How do I stop scheduling eating my account manager’s week?

Hand the building to XShift AI: one typed sentence in the AI Copilot builds next week across every site you run, and each post comes back filled by an officer attached to that site, holding the role it needs, off the days and hours they blocked, under the hour limits you wrote and under the weekly dollar ceiling you set for that site. Autopilot covers the call-offs after that, once you switch it on, so the schedule stops landing on him at ten at night. Ten hours a week rebuilding a grid is a quarter of the week he was hired to sell in, and one 40 hour post at $28 an hour he never quotes is $1,120 a week, or $58,240 a year. The schedule is the only job on his list that nobody ever asked him to do.

How does XShift AI know which guards can work an armed post?

You set armed, unarmed, patrol, dispatch and supervisor up as roles in XShift AI, and every post carries the role it needs, so the classification question and the role question become one question. When a post is generated or comes open, the software compares the role on the post against each officer’s own role, and against their second role too if you have multiple roles switched on. An officer who does not hold it is never offered that post.

How do I take overtime out of a week that is already published?

Run the overtime scan in XShift AI and it reads the published week for you. It adds up each officer’s scheduled hours, flags everybody projected past your threshold, prices the premium at time and a half against their own wage, and names the officer who could take the shift with the lowest hours after the swap. You approve or dismiss each one, so nothing on a client site moves without a manager saying yes. Workforce Insights has to be switched on for the scan to run.

How do I tell which client site is losing me money?

Compare what each site bills against what its schedule actually pays out, week by week, rather than looking at the firm as one number. A site that runs a few premium hours every week looks fine on an annual report and is the one quietly taking your margin. Give each site its own weekly labor ceiling in XShift AI and the comparison is made for you every time a shift is saved there, because the shift is priced against that site's committed spend before it is allowed to exist, and the refusals are logged with the numbers behind them.

Keep reading

Hold the gap on every contract

Pick the site that worries you, give it a weekly number, and watch a post get turned away the moment it would go past it.

Security Company Profit Margin: Where It Goes, How to Keep It