Auto Attendance
The Production team at the Nova Industries Pune branch punches in and out at a biometric device at the gate. On Tuesday, 3 November 2026, the device recorded check-ins and check-outs for seven people on the Day Shift, 09:00 to 18:00. Kavya Rao left at 13:00 for a family matter, and Divya Menon arrived at 09:24.
Checking every punch by hand and typing an Attendance record for each person takes HR an hour a day, and mistakes go straight into payroll. A short day counted as a full day overpays, and a late arrival that nobody records cannot be followed up.
Auto Attendance turns the punches into attendance on its own. For each shift that has it enabled, Frappe HR groups each employee's Employee Checkin logs by shift, calculates the working hours, and creates a submitted Attendance record. The status follows the rules on the shift: in the example, six people are Present, Kavya is Half Day with 4.07 hours, and Divya's record is flagged Late Entry. Employees with no logs on a working day are marked Absent later.
Before you begin
- A Shift Type exists for the working hours, for example Day Shift, 09:00 to 18:00.
- Each employee has the shift through a Shift Assignment for the dates, or as Default Shift on the Employee record. A Shift Assignment takes priority over the Default Shift.
- Each employee's Attendance Device ID (Biometric/RF tag ID) matches the ID that the device sends, so that punches reach the right person. See Integrating Frappe HR with Biometric Attendance Devices.
- A Holiday List applies to the employees, so that holidays are not marked Absent.
- Set up the shift and assign it before check-ins arrive. A log saved without a shift is Off-Shift and Auto Attendance ignores it.
Set up Auto Attendance on a shift
- Open the Shift Type, for example Day Shift, from Shift & Attendance, Shift Type. Check Start Time and End Time, and tick Enable Auto Attendance. The Auto Attendance Settings section appears.

- In Auto Attendance Settings, set how punches are read and when the shift is processed. In the example: Alternating entries as IN and OUT, First Check-in and Last Check-out, 60 minutes before and after the shift, Half Day below 6 hours, Absent below 3 hours, and Process Attendance After 3 November 2026.

- Set Absent Buffer (Days) and, if one device or the mobile app is your only source of punches, tick Automatically update Last Sync of Checkin. Under Late Entry & Early Exit Settings for Auto Attendance, tick the markings you need and set the grace periods, 15 minutes each in the example.

- Select Save.
| Setting | What it does |
|---|---|
| Determine Check-in and Check-out | Alternating entries as IN and OUT treats the 1st, 3rd and 5th punch as IN and the others as OUT, for devices that do not send a direction. Strictly based on Log Type uses the IN or OUT on each log. |
| Working Hours Calculation Based On | First Check-in and Last Check-out counts the time between them. Every Valid Check-in and Check-out adds up each IN to OUT pair, so breaks are not counted. |
| Begin check-in before / Allow check-out after (minutes) | Widen the shift into the window in which punches belong to it. Day Shift 09:00 to 18:00 with 60 minutes on each side accepts punches from 08:00 to 19:00. |
| Working Hours Threshold for Half Day / for Absent | Working hours below these values give Half Day or Absent. Zero turns a threshold off. On a half holiday, both thresholds are halved. |
| Process Attendance After | Logs before this date are never processed. Set it to the day you start, so that old days are not marked Absent. |
| Last Sync of Checkin | The time up to which all punches have arrived. Shifts whose window ends before it are processed. |
| Automatically update Last Sync of Checkin | Moves Last Sync of Checkin forward after each shift ends. Use it when one device or the mobile app sends punches in real time. |
| Absent Buffer (Days) | Days to wait after a shift before marking Absent for employees with no logs, to leave time for leave and manual corrections. Zero marks Absent the same day and requires Automatically update Last Sync of Checkin. |
| Mark Auto Attendance on Holidays | Marks attendance on holidays when the employee has logs. Otherwise logs on holidays are ignored. |
| Late Entry / Early Exit Grace Period | A first IN later than shift start plus the grace period is Late Entry; a last OUT earlier than shift end minus the grace period is Early Exit. The flags do not change the status. |
When attendance is marked
Frappe HR runs Auto Attendance every hour for every shift that has it enabled. A shift is processed once its window has ended before Last Sync of Checkin: for Day Shift on 3 November, after 19:00, when all punches for that shift can be expected to have arrived. In the example, Last Sync of Checkin is 19:05, so the shift is ready.
To process a shift now instead of waiting for the hourly run, open the Shift Type and select Mark Attendance. Frappe HR confirms that attendance has been marked as per employee check-ins.
Check the result
Open the Attendance list and filter by Attendance Date and Shift. For 3 November, Day Shift has seven records: six Present and Kavya Rao as Half Day, because her 4.07 hours are below the 6-hour threshold but above the 3-hour one.

Open a record to see how it was worked out. Divya Menon's record shows In Time 09:24, Out Time 18:01 and 8.62 working hours, so she is Present. Her first punch is more than 15 minutes after 09:00, so Late Entry is ticked. The two logs are listed under Employee Checkin at the top of the form.

Each processed log now shows the record in Attendance Marked, and its time can no longer be changed. Logs that were Off-Shift, such as Vikram Joshi's punch at 22:30, are not processed.

Employees assigned to the shift who have no logs on a working day are marked Absent once the Absent Buffer has passed, with the comment "Employee was marked Absent due to missing Employee Checkins". Days that already have attendance, including days covered by an approved Leave Application, are skipped.
How the shift and holidays are found
For each employee and date, the shift comes from an active Shift Assignment for that date; if there is none, from the Default Shift on the Employee record. An employee without either is not processed. Holidays come from the Holiday List on the Shift Type when one is set. Otherwise Frappe HR uses the Holiday List Assignment for the employee, or for their company, that covers the date.
Troubleshooting
No attendance was marked
Check that Enable Auto Attendance, Process Attendance After and Last Sync of Checkin are set on the Shift Type, and that Last Sync of Checkin is later than the end of the shift window. Then open a log for the day: if it has no Shift or is Off-Shift, fix the Shift Assignment and use Fetch Shift on the log.
Everyone was marked Absent for past days
Process Attendance After was set before employees had check-ins, so Auto Attendance marked the missing days Absent. Cancel those records, set Process Attendance After to the first day with check-ins, and run Mark Attendance again.
A full day was marked Half Day or Absent
A punch is missing, so the working hours are too short. Add the missing log on the Employee Checkin, cancel the Attendance record so its logs are unlinked, and run Mark Attendance again.
Employees are marked Absent on holidays
The employees have no Holiday List that covers the date. Set a Holiday List on the Shift Type or add a Holiday List Assignment, then cancel the wrong records.
Absent Buffer cannot be 0
Marking Absent on the same day needs Last Sync of Checkin to move forward on its own. Tick Automatically update Last Sync of Checkin, or set the buffer to at least one day.
Frequently asked questions
Can HR correct an auto-marked record?
Cancel the Attendance record and amend it, or ask the employee to raise an Attendance Request, which updates the record with a reason.
Does Auto Attendance need a biometric device?
Any Employee Checkin works, including logs from the Check In button in the mobile app. Without check-ins, mark attendance with the Employee Attendance Tool or upload it from a spreadsheet.
How are night shifts handled?
Logs are grouped by the shift start, so a shift from 22:00 to 06:00 is marked on the date it starts, even when the check-out is on the next day.