Security Guard Services
Guard deployment with geofenced posts, photo proof, patrols and lone-worker alarms.
The short answer
Security Guard Services runs a guarding company from Odoo. Sites hold posts, each post owns its geofence, and every shift on that post inherits it, so five guards on one gate are five jobs rather than five fences. Check-ins, photo proofs, patrol scans, welfare checks and check-outs are rows carrying their own form definition, and guards work them from a Flutter app over a documented REST API.
Last updated
What it is for
We do not sell hours. We sell the ability to answer one question on Wednesday morning about Tuesday night: was anybody there, and can you prove it. That evidence normally lives in a paper occurrence book, a phone thread full of photos and a supervisor's memory, none of which survive a client asking about a specific gate on a specific night. A fleet tracker does not help either. It can say a device was online and moving, which is not the guarding question, because the guarding question is whether the post that needs two officers has two officers and whether they are inside the fence.
- Platform
- Odoo
- Category
- Field service
- Works with
- Odoo 18 · Odoo 19
- Technical name
guard_services- Status
- Direct from webbox
- Pricing
- Paid
What is inside it
- 01
The live map
Built from posts and perimeters instead of devices, so it opens on the post that needs a human. Both screens refresh every thirty seconds and sort worst first: off post, late, short-handed, then the posts that are fine.
- 02
Proof of presence
You say how many photo proofs and patrol rounds a shift needs, and the schedule falls out of the shift length, the first well after arrival and the last well before departure. Randomise jitters each prompt inside its own window.
- 03
What it catches
A mock-location flag, tracking that quietly died, not moving as against not reporting, and a licence that lapsed overnight. The last one blocks assignment until somebody overrides it with a written reason on the record.
- 04
The mobile app
Guards are portal users on a documented REST API, resolved from their token rather than any id the request supplies. Every write carries a phone-generated identifier, so a replay returns the original answer instead of acting twice.
What it looks like in practice
-
An officer steps off a gate and the board says so first
A post carries a radius fence and one officer is booked on it. The handset is still reporting normally.
The post owns the fence, so the shift is judged against it. The map draws the distance itself as a dashed line, the tile turns red, and the panel alongside names the rule the shift is judged against, so nobody has to open the record to learn whether the boundary is drawn or a radius.
- Distance outside the fence
- 289 metres
- The fence it broke
- 60-metre fence
Figures from the module's own demo data, on a fresh install. Open the live map on a demo-data install; the failing post sorts to the top.
The live mapWhat it catches
-
A night shift needs photo proof at times nobody can predict
A supervisor sets a count of photo proofs and patrol rounds on the shift instead of typing a list of times.
The schedule falls out of the shift length, so six proofs across a twelve-hour night land every hour and forty-three minutes, the first well after the guard arrives and the last well before they leave. Ticking randomise jitters each one inside its own window.
- Photo proofs asked for
- six
- Shift length
- twelve-hour
- Spacing that falls out
- hour and forty-three minutes
A default you can change.
Proof of presence
-
A handset goes into a plant room and the queue catches up later
Signal drops mid-shift. The guard keeps working and the app keeps queueing what they answered.
Every write carries a phone-generated identifier, so the offline queue can retry as hard as it likes and a replayed request returns the original answer instead of acting twice. The ledger keeps occurred-at beside received-at, so nothing is quietly backdated.
- Occurred at
- 1:40
- Received at
- 2:21
- The gap it sat offline
- forty-one minutes
Figures from the module's own demo data, on a fresh install. Open the sync log on a demo install and read Occurred At beside Received At.
The mobile app
What it deliberately does not do
- No billing or payroll
- No bill rates, no pay rates, no invoicing and no margin per site. Hours worked are recorded and exportable; turning them into money is Odoo's job or yours.
- No drag-and-drop roster
- Shifts are created from a form or generated from a weekday pattern. The Gantt widget is Enterprise-only, and a custom scheduling board is its own product.
- No open-shift marketplace
- A supervisor offers a shift to a named guard. Publishing an unfilled shift for qualified guards to claim is not built.
- The map needs the internet
- Tiles come from a public basemap, so an air-gapped server shows the list and the alerts with nothing drawn behind them. There is no offline tile pack.
- Background tracking needs the app
- The server side is complete: gaps, silent-device alarms and per-duty sampling all ship here. Tracking that survives the phone being killed depends on the mobile client.
Questions
Can I install this on Odoo Online?
Does it invoice the client or pay the guards?
What does the control room see on a server with no internet?
Is there anything else to install first?
Have something to build?
Tell us the problem. We'll come back with a plan, a price, and who'd actually build it.
- Free scoping call
- Reply within 1 business day
- No lock-in