Skip to content

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.

Request this module

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

  1. 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.

  2. 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.

  3. 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.

  4. 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

  1. 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

  2. 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

  3. 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?
No. Odoo Online cannot install modules that contain Python, so this runs on Odoo.sh or a self-hosted instance. Check the versions listed above for the series and edition it is verified against.
Does it invoice the client or pay the guards?
No. There are no bill rates, no pay rates, no invoicing and no margin per site. Hours worked are recorded and exportable, and turning them into money happens in Odoo or wherever you do it now. Rostering is a form or a weekday pattern too, not a drag-and-drop board.
What does the control room see on a server with no internet?
Map tiles come from a public basemap, so an air-gapped server shows the post list, the counters and the alert feed with nothing drawn behind them, and there is no offline tile pack. Everything else on the board keeps working, because a control room offline is still a control room.
Is there anything else to install first?
One dependency, fleet_tracking, which supplies GPS ingest and geofencing, installs on Community and is published alongside this one. The dashboard framework and design system ship inside the module itself. Guards are portal users, so they are free at any headcount and cannot reach the back office at all.

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