The employee walked in, pressed their thumb on the reader, got a green light and a beep, and went to their desk. You run the monthly attendance report in ZKT BioTime — and that same employee has an absent mark for that entire day. Their manager escalates. Payroll is miscalculated. Trust in the system breaks down.
This is not a rare edge case. It happens regularly in Dubai offices that have deployed ZKTeco biometric readers or integrated Hikvision access control with BioTime. The device did its job. The problem is in how — or whether — that punch data ever reached BioTime's calculation engine.
There are five distinct causes. Each has a different fix. Here is how to diagnose which one you are dealing with.
Most commonly, the punch was recorded on the device but never synced to the BioTime server — either because the network was down at that moment, or because automatic syncing is not configured. Other causes: device clock out of sync with server time, employee not assigned to the correct device in BioTime, duplicate employee IDs, or punches landing outside the shift's valid window.
Cause 1: The Device Recorded the Punch but Never Synced to BioTime
ZKTeco biometric devices and Hikvision access controllers store attendance records locally on the device, then push them to BioTime over the network. If the network connection was interrupted at the moment of the punch — or if the device is set to manual sync mode — the record sits on the device but never reaches the software.
This is the most common cause of missing records and it is entirely recoverable, because the punch is still stored on the device.
Fix: In BioTime, go to Device → Device Management → select the device → click Get Attendance Records (or "Sync Data" depending on your BioTime version). This pulls all locally stored transaction logs from the device into BioTime's database. After the sync completes, go to Attendance → Calculate and run a recalculation for the affected date range. Without the recalculation step, the newly imported punches will appear in the raw transaction log but will not update the attendance status columns in reports.
Cause 2: Device Clock Out of Sync with the BioTime Server
BioTime assigns every punch to a specific date and time slot based on the timestamp the device attaches to the record. If the device clock has drifted — even by a few hours — punches land in the wrong shift window. A 7:55am check-in on a device running 3 hours fast arrives in BioTime as 10:55am, which may fall outside the shift's valid start window and appear as an unmatched or late record rather than a valid check-in.
Timezone is the other common variant. Devices shipped or reset to UTC, not UTC+4 (Asia/Dubai), will consistently produce records that are 4 hours off. A full working day of punches arrives in BioTime attributed to the previous calendar day.
Fix: On the device itself, go to Settings → System → Date and Time. Verify the timezone is UTC+4 (Asia/Dubai) and the time matches the BioTime server exactly. Enable NTP synchronisation and point it to the same NTP server your server uses (pool.ntp.org works, or your local Windows/Linux NTP server). Re-sync records after correcting the time. Note: correcting the time does not fix already-imported records with wrong timestamps — those need to be deleted from BioTime and re-imported after the device time is corrected.
Cause 3: Employee Not Assigned to the Device in BioTime
In BioTime, employees must be enrolled and assigned to specific devices. If an employee's biometric template exists on the device (they can scan and get a green light) but their employee record in BioTime is not linked to that device, incoming punches from that person have no employee to attach to — they arrive in the raw log as unknown transactions and are excluded from attendance reports.
This happens most often when an employee is added directly on the device (enrolled locally at the reader) rather than enrolled and synced from BioTime centrally, or when an employee transfers between departments or site locations and their device assignment is not updated.
Fix: In BioTime, go to Personnel → Employees → edit the employee record. Under the device assignment section, confirm the correct device is selected. If not, add the device. Then use Device → Sync Personnel to push the correct mapping to the device. After syncing, any future punches from that employee will be correctly attributed. For historical records already in the raw log as unknown, those can sometimes be manually attributed — contact your BioTime administrator.
Cause 4: Duplicate Employee Records with Mismatched IDs
When BioTime is set up by a non-specialist, employee IDs are sometimes created inconsistently. The same person has employee ID 0042 in the device and employee ID 42 in BioTime — these are treated as different people. Punches from the device arrive for ID 0042, but BioTime expects to see ID 42, so the records do not match and the employee appears absent.
This is particularly common in installations where staff were enrolled using the device's built-in interface, then a separate BioTime employee list was imported from an HR spreadsheet with different ID formatting.
Fix: In BioTime, go to Reports → Raw Transaction Log. Look for punches that have no employee name attached — these are orphaned records. Note the employee IDs on those transactions. Compare with your employee list under Personnel → Employees. If you find a mismatch, correct the ID in BioTime to match what the device is sending. After correcting, run a recalculation. Going forward, always enrol employees from within BioTime (Personnel → Add Employee → Push to Device) rather than at the device level, to prevent ID mismatches.
Cause 5: Punch Fell Outside the Shift's Valid Window
BioTime's timetable settings include a "valid check-in window" — a time range within which a punch is accepted as a legitimate attendance event for that shift. Punches outside this window are recorded in the raw log but are not counted as attendance for the shift. The employee appears absent even though the punch is visible in the transaction data.
For example, if your shift is 9:00am–6:00pm and the valid check-in window is set to 7:00am–10:00am, an employee who arrives at 10:30am will have their punch in the log but BioTime treats them as absent for that day (rather than very late).
Fix: In BioTime, go to Attendance → Timetable → edit the relevant shift. Review the "Valid Check-in Start Time" and "Valid Check-in End Time" fields. Widen the window to accommodate your actual staff arrival patterns. Most Dubai offices set this to start 2 hours before the shift and end 3–4 hours after the shift starts. After updating the timetable, run a recalculation for the affected period.
How to Check if a Device Is Actually Online in BioTime
Before chasing individual records, confirm the device is communicating with BioTime. Go to Device → Device Management. Each device shows a Status indicator — Online or Offline. An offline device is not syncing anything.
If the device shows Offline:
- Ping the device IP address from the BioTime server — confirms basic network connectivity
- Verify the IP address in BioTime matches the actual device IP (devices can get a new IP after a network change or DHCP lease renewal)
- Check the communication password in BioTime matches the device (default is usually 0 or blank — some installations change this and forget to update BioTime)
- Confirm port 4370 is open between the device and server — this is ZKTeco's ADMS communication port and is sometimes blocked by firewall rules in larger Abu Dhabi and Dubai corporate networks
Recovering Historical Missing Records
ZKTeco devices typically store 100,000 to 500,000 attendance transactions locally before overwriting old records. If your missing records are within the last few months, they are almost certainly still on the device. A manual sync followed by a recalculation will recover them.
If the device has been factory reset, swapped, or the local storage has genuinely been overwritten, those records cannot be recovered from BioTime. This is one reason we recommend configuring automatic daily sync in BioTime (Device → Communication Settings → enable automatic sync) so records are pulled into the database continuously rather than relying on the device's local buffer.
If your organisation uses Hikvision access control as the punch source, Hikvision's iVMS-4200 or DS-K platform also stores a local access event log that can be cross-referenced for missing records. SAS IT Services can assist with pulling this data and reconciling it with BioTime.
Preventing Missing Records Going Forward
Once you have resolved the immediate issue, these three settings prevent most recurrence:
- Enable automatic sync — BioTime should pull records from all devices at least every 15–30 minutes, not just on demand.
- Enable NTP on all devices — sync device clocks to a reliable time source automatically rather than relying on manual clock setting.
- Enrol all employees from BioTime, not from the device — this guarantees ID consistency and prevents the mapping problems in Cause 3 and 4 above.
At SAS IT Services, we configure time attendance systems across Dubai, Sharjah, and Abu Dhabi — including BioTime setup, device integration, shift configuration, and the kind of post-installation review that catches these issues before they become a one-year backlog of missing payroll data. WhatsApp us at +971 52 886 7253 for a remote diagnostic on your BioTime setup.
Frequently Asked Questions
Why does ZKT BioTime show an employee as absent when they definitely scanned in?
The most common cause is a communication failure between the biometric device and the BioTime server — the device recorded the punch locally but it was never synced to the software. Other causes include a device time mismatch, the employee not being mapped to the correct device in BioTime, duplicate employee IDs, or punches falling outside the shift's valid check-in window.
How do I manually sync attendance records from a ZKTeco device to BioTime?
In BioTime, go to Device → Device Management → select the affected device → click Get Attendance Records. This pulls all locally stored punches from the device into BioTime. After syncing, go to Attendance → Calculate and run a recalculation for the affected date range. Without the recalculation step, the newly imported punches will appear in the raw log but will not update the attendance status report.
Does a device time difference cause attendance records to go missing in BioTime?
Yes. If the device clock is out of sync with the BioTime server clock, punches land in the wrong shift window and appear as unmatched or absent records. Enable NTP synchronisation on the device and confirm the timezone is set to Asia/Dubai (UTC+4).
Can old missing attendance records be recovered in ZKT BioTime?
Yes, provided the punches are still stored locally on the device. ZKTeco readers store 100,000–500,000 transactions locally. Pull records via manual sync then run a recalculation for the full missing date range. If the device has been reset or overwritten, recovery is not possible.
How do I check if a ZKTeco biometric device is connected to BioTime?
In BioTime go to Device → Device Management. Each device shows an Online/Offline status. If offline, check network connectivity, the device IP address in BioTime, the communication password, and that port 4370 is open. SAS IT Services provides remote BioTime diagnostics for Dubai and UAE businesses — WhatsApp +971 52 886 7253.