Security Agency Management Software
A multi-tenant platform for security and manpower service providers where one attendance record produces both the client invoice and the salary, with GST, ESI and EPF handled on the way through.

Project Overview
- Client
- A security and manpower services provider supplying guards, patrolling staff, gatekeepers, cooks and gardeners
- Their clients
- Banks, government offices and schools
- Our role
- Design and build of the full platform operations, billing, payroll, statutory computation and inventory
- Stack
- Python · Django · React · PostgreSQL
- Deployment
- VPS, with the client owning the environment
- Architecture
- Multi-tenant SaaS the client runs their own agency on it and resells it to other providers
Our client supplies staff to other organisations. Security guards and patrolling teams are mostly, but also gatekeepers, cooks and gardeners, placed with banks, government offices and schools. Every one of those placements sits under a different contract, at a different rate, with a different mix of staff. The business had outgrown the spreadsheets that were being held together, so we built the system that runs it and then built it as a product the client could sell to other agencies.
One attendance record, two very different sums
A guard completes a shift at a bank. That single fact must do two jobs.
It must bill the bank, at whatever rate that particular contract specifies for that category of staff and then carry GST, including the reverse charge treatment that applies to security services. And it must pay the guard, at their own wage, with ESI and EPF calculated on it, net of any advances.
Two calculations, two sets of rules, one underlying record. Run them in separate spreadsheets and they drift a shift billed but not paid, a rate updated on one sheet and not the other, a month that reconciles to nothing. Every agency owner recognises this, usually from an argument with a client about an invoice.
The system exists so that the record is entered once and everything downstream derives from it.
How the platform runs an agency
- 1
Onboard the employee
Personal details, documents, job category and wage recorded once, in one place.
- 2
Set the client's rates
Each client gets its own rate card, priced per staff category rather than one rate for the whole agency.
- 3
Deploy staff to sites
Employees are assigned to client sites according to what that contract requires.
- 4
Record attendance
Shifts are captured against the employee and the site they worked.
- 5
Bill the client
Attendance is priced against that client's rate card, GST applied, invoice issued.
- 6
Run payroll
The same attendance is priced against the employee's wage, with ESI and EPF computed and advances deducted.
- 7
Pay the staff
A bank salary sheet is generated in the format the bank expects, ready to upload.
What we built
Employee onboarding
Staff are added once with their documents, category and wage, then deployed to sites. No re-keying between an HR file and a payroll sheet.
Dynamic rate management
Every client has its own rate card, set per staff category. Rates change without anyone editing a formula, and history is preserved so old invoices still reconcile.
Attendance-driven payroll
Salaries are computed from recorded attendance rather than assumed from a monthly figure, which is what makes part-months, replacements and absences work.
Statutory computation
GST on client invoices including reverse charge treatment, and ESI and EPF on payroll. Rates and thresholds are configuration, not code.
Invoicing
Client invoices generated from priced attendance, per contract, with the tax treatment already applied.
Bank salary sheets
Payroll output produced in the format banks accept for bulk salary transfer, so paying two hundred people is an upload rather than an afternoon.
Uniform and equipment inventory
Dress, batons, caps and other issued items tracked against the staff member holding them, and recoverable at exit.
Multi-tenant SaaS
Each agency on the platform has its own clients, staff, rate cards and payroll data, fully isolated from every other tenant.
The part that keeps agency owners awake: GST, ESI and EPF
Manpower services carry a statutory load that most businesses do not. Getting it wrong is not an accounting inconvenience, it is a notice.
On the billing side, security services have their own GST wrinkles. Where a non-body-corporate supplies security services to a registered recipient, the tax is payable by the recipient under the reverse charge mechanism rather than by the agency. That has applied since 1 January 2019, and it means an invoice raised by a proprietorship and one raised by a private limited company are treated differently for the same work. The system knows which is which, rather than leaving it to whoever is doing the billing that week.
On the payroll side, ESI and EPF contributions are computed per employee against their wages for the period worked.
One deliberate design decision: statutory rates, thresholds and wage ceilings are stored as configuration rather than written into the code. They change and when they do, the client updates the value rather than commissioning a release.
This describes what the software does, not what your business owes. Statutory positions change and vary by entity type — take your own professional advice.
Built for one agency, sold to many
The client did not just want to run their own operation better. They could see that every agency they competed with had the same problem, and most of them were still on paper.
So, the platform was built multi-tenant from the start. Each agency that subscribes gets its own clients, its own staff, its own rate cards and its own payroll data, isolated from everyone else in the system.
That turned an internal tool into a second business, a services company with a software product sold on subscription to its own industry.
Technology, and why
The stack behind the platform, and what each part is doing here.
| Technology | Role | What it does here |
|---|---|---|
| Python and Django | Backend | The whole business engine: onboarding, rate cards, attendance, billing, payroll and statutory computation. Django was the right call for its mature permissions, admin and migration tooling, which matter when tenants and roles multiply. |
| React | Front end | The front end the agency's own team uses daily. Fast, and separable from the backend so either can change without the other. |
| PostgreSQL | Database | Payroll and billing are transactional work where correctness beats raw speed. PostgreSQL handles the constraints, the relationships and the reporting without complaint. |
| VPS deployment | Hosting | Deployed to a VPS the client owns, rather than a platform they rent access to. |
The same engine, other manpower businesses
Staff deployed to client sites, attendance driving both billing and payroll, statutory deductions on top. Change the job categories and the rate cards and the same platform runs:
Frequently Asked Questions
Answers to what agency owners usually ask after reading this case study.
What is security agency management software?
It is a single system that runs the operational and financial side of a manpower services business: onboarding staff, assigning them to client sites, recording attendance, billing each client at their own contracted rate, calculating salaries from the same attendance data, applying statutory deductions, and issuing invoices and bank salary sheets. It replaces the spreadsheet-and-register combination most agencies start with.
How does the system handle different rates for different clients?
Each client has its own rate card, set per staff category rather than per agency. A guard at a bank, a gatekeeper at a school and a cook at a government office can all be billed at different rates under different contracts, and the same attendance record is priced against whichever contract the shift belongs to.
Does the platform calculate GST, ESI and EPF?
Yes. Client invoicing applies GST at the applicable rate and accounts for reverse charge, which applies to security services supplied by a non-body-corporate to a registered recipient. Payroll computes ESI and EPF contributions against each employee's wages. Rates, thresholds and wage ceilings are held as configuration rather than hard-coded, because they change.
Can one platform serve more than one agency?
Yes. The application was built on a multi-tenant SaaS architecture, so the original client operates their own agency on it and also offers it to other service providers on a subscription. Each tenant has its own clients, staff, rate cards and payroll data, isolated from every other tenant.
What technology is the security agency platform built with?
Python and Django on the backend, React on the front end, and PostgreSQL as the database, deployed to a VPS. Django was chosen for its mature admin, permissions and migration tooling; PostgreSQL because payroll and billing are transactional work where correctness matters more than raw speed.
Can this be adapted for other manpower businesses?
Yes. The underlying pattern - staff deployed to client sites, attendance driving both billing and payroll, statutory deductions on top - is the same for facility management, housekeeping and janitorial services, catering and canteen contracts, contract labour supply and staffing agencies. The rate cards and job categories change; the engine does not.
Running an agency on spreadsheets?
If you deploy staff to client sites and you are reconciling billing and payroll by hand, we have built this before and we know where it breaks. Tell us how many people and how many sites, and we will tell you honestly whether you need a platform or just a better process.
Ready to Start Your Project?
Let's discuss how we can help transform your business with our expertise
Send us a message
We respond within 24 hours
Quick Contact
Our Offices
Mohali
Cabin 1, E 279 (Biggbang), Industrial Area, Sector 75, Sahibzada Ajit Singh Nagar, Punjab 140307
Minneapolis
Unit B11, St Louis Park, MN 55426, United States
Moncton
Gordon Street, Moncton, NB E1C 5K9, Canada
Fast Response Guarantee
We respond to all inquiries within 24 hours. Most queries get a response within 2-4 hours during business hours.
