No duplicate people
Each employee is one row, not a copy in payroll, another in the attendance sheet and a third in a shared drive. The profile is the hub every other module reads from.
Employee management software for India
Every employee lives once in LekhaHR: their fields, their documents, the lifecycle state they're in, who is allowed to see what, and a full history of every change. Self-service for the employee, enforced access for everyone else.
A manager opens a profile and the pay block is simply absent. HR sees the whole record and every edit it has ever had. The employee fixes their own details, and the sensitive ones wait for approval.
Real released UI screenshots remain required before public indexing.Quick answer
An employee management system keeps one record per person and runs the everyday work around it: self-service, documents, access control and an audit trail. Most products treat the record as a filing cabinet. LekhaHR treats it as a governed object: the server decides which blocks each role receives, sensitive edits wait for approval, and every change is logged. The map below is the same record seen through three different sets of eyes.
One record, seen through who's allowed to see it
Pick a viewer. LekhaHR renders one governed employee record covering About, Job, Documents and Finances, and the server decides which blocks each role receives. Switch to the manager lens and the whole salary and bank block is gone: not greyed, not locked, simply never sent. That boundary is the product's own rule, shown as it works.
Lifecycle state on the record: a value, not a workflow
The record carries its lifecycle state as a value today, and the directory filters and colours by it. The workflows behind these states, from offer and preboarding into onboarding through resignation, clearance and full-and-final behind notice and exited, arrive with the Onboarding & Exits module (M5). LekhaHR shows the state; it does not run that workflow yet.
GET /api/people/:id payload and its field-level permission behaviour: the salary/CTC/bank block is absent from the response when the caller lacks people.salary.view. Labelled illustrative — not a product screenshot, not employee or customer data; salary is display-only here (Payroll processes money separately, M4).One record, one source of truth
The record is a governed object, not a form. What can be edited, by whom, and through which path is decided by the server from your configuration.
Each employee is one row, not a copy in payroll, another in the attendance sheet and a third in a shared drive. The profile is the hub every other module reads from.
The server returns editableFields and sensitiveFields from tenant config. Safe fields save on the spot; sensitive ones route to approval. No client-side guess about what counts as sensitive.
The directory flags an employee as not-ready and lists the missing field by name, whether that is bank, PAN or the salary structure. It surfaces what is missing, never the value itself.
Directory facets are intersected in SQL, so a group-scoped HR Admin cannot even enumerate people outside their coverage. Scope is a floor, not a front-end filter.
Documents on the record
Employee records management means the paper travels with the person. Upload once, attach where it is needed, and keep an export trail that names who pulled what.
Lifecycle states, honestly scoped
Employment status moves through onboarding, probation, confirmed, notice and exited. LekhaHR renders that state on the record and filters the directory by it today.
What is not here yet: the workflow that drives those transitions, from offer and preboarding through resignation, clearance and full-and-final. That arrives with Onboarding & Exits, behind the M5 release gate. We show the state without pretending to run the process.
Who sees what
The manager lens in the map above is not a demo trick. It is the same field-level authorization the product runs everywhere: seeing a profile and seeing its pay are different permissions.
Five protected roles ship with the product. You cannot edit a core role in place; you clone it into a custom template and adjust that, so the baseline stays intact.
Every grant carries a scope: off, self, direct-team, team-tree, group or org. An assignment can cover several locations or groups at once without ever widening to the whole org.
Seeing a profile and seeing its pay are two different permissions. people.salary.view gates the compensation block on its own, which is how a manager reads the record but not the salary.
The effective-access inspector simulates an actor, a target and a capability, then returns the exact allow-or-deny reason: the role, the scope intersection and the relationship, without anyone logging in as someone else.
Every change, audited
Sensitive edits do not quietly overwrite the truth. They wait for approval, and everything that does change is written down with its before and after.
Built for Indian teams
The record is shaped for Indian payroll and compliance realities without quoting a single statutory number in marketing copy.
A PAN is stored masked and its raw value is encrypted at rest, with a consent notice shown at collection, following the DPDP posture. It is never returned in the clear.
IFSC format and the account number are checked when they are saved, so a payroll run does not inherit a typo from a spreadsheet paste.
Each location carries its own state, and that work-state, not the head office, drives the profession tax and shops-and-establishment rules that apply to the employee.
LekhaHR can capture location when an employee checks in or out and validate the configured office geofence. It does not track movement in the background, build travel routes or monitor employees between punches. That punch-time-only boundary is why LekhaHR is a record and access product, not an employee-monitoring one.
A good fit when
Not the right tool when
Transparent pricing
Operations starts at ₹79 per active employee/month billed annually. Business starts at ₹119. GST extra.
Employee management FAQ
Employee management software keeps one governed record for every employee and runs the routine work around it: self-service edits, document storage, role-based access and an audit trail of changes. It replaces the scattered spreadsheets and shared drives where employee data usually lives, so there is a single, trustworthy source for each person instead of several copies that drift apart.
LekhaHR groups the record into four tabs. About holds name, legal name, date of birth, contact and emergency contact. Job holds title, department, work location and state, the primary manager, typed secondary relationships, the HR Partner, date of joining, employment type and status. Documents holds uploaded files. Finances holds the bank account and IFSC, PAN stored masked, and CTC shown for display only. Which fields count as sensitive comes from tenant config, not from hardcoded client logic.
Yes, with a boundary. Safe fields save directly when the employee edits them. Sensitive fields such as bank, PAN, legal name and date of birth do not change the record on their own; they raise a change-request that routes to an approver, and the stored value only changes once HR approves it. An open request on a field blocks a second one, and no one can approve their own request.
Only roles that hold the people.salary.view permission. Field-level access is a separate permission from seeing the profile, so a manager can open a team member's record but the salary, CTC and bank block is omitted from the server response entirely. It is not greyed out or locked on screen; the data is never sent to the browser at all.
Yes. Every write to a record lands in the audit log with the before value, the after value and the actor who made the change. There is a per-employee change timeline for anyone with people.audit.view, and even bulk operations are audited one row per employee. Report exports are logged too, recording who exported which report containing personal data and when.
Yes. Each profile has a Documents tab where you upload files such as a PAN card, an appointment letter or a certificate. A document on the record can also satisfy a pending leave or regularization requirement in another module by its attachment id, so the same proof is not uploaded twice, and an oversize upload returns a clean error rather than failing silently.
PAN is stored masked with its raw value encrypted at rest, and a consent notice is shown at collection, following the DPDP posture. Bank IFSC and account fields are validated on save. Work location carries its own state so profession tax and shops-and-establishment rules follow the right state per employee. Specific statutory figures are not quoted on this page; those live in dated fixtures rather than in marketing copy.
The record shows the lifecycle state today, whether onboarding, probation, confirmed, notice or exited, and the directory filters by it. The onboarding and exit workflows themselves, from offer and preboarding through resignation, clearance and full-and-final, arrive with the Onboarding & Exits module, which is behind the M5 release gate. We show the state; we do not claim to run that workflow yet.
We will not rank ourselves, and we have no customer logos or testimonials to point at yet, so any "we are number one" claim would be invented. The honest answer is a fit answer: LekhaHR suits an Indian team that wants one governed record with server-enforced access and a real audit trail, and it is the wrong choice if you need released payroll, an onboarding workflow or employee monitoring today.
When you need a released payroll run, an onboarding or exit workflow, performance reviews or workforce analytics right now, since those are gated modules we deliberately do not claim. Also when you want employee monitoring or productivity tracking, or biometric kiosk hardware, since LekhaHR reads location only at a punch and runs no continuous tracking.
There is no free-forever plan. LekhaHR offers a 14-day trial, then per-active-employee pricing with no base platform fee and no minimum headcount. The published rates are on the pricing page and GST is charged separately, so a small team pays only for the people it actually has on the record.