CozyHR
Menu
Products
Docs
Resources
Compliance
Company
Support
Setup guide

Biometric device sync

Connect your fingerprint / face devices to CozyHR in a few steps, and optionally import everyone enrolled on a device to kick off onboarding.

Your biometric devices sit on your local network; CozyHRruns in the cloud and can't reach private IPs directly. So you run the small CozyHR Biometric Syncapp on any always-on computer in your office — it reads your ESSL / ZKTeco IN & OUT devices and securely syncs punches (and can import enrolled users as employees) to CozyHR.

Step 1. Download & install the app

Download the app for the computer that stays on in your office (same network as the devices):

Download for your OS

Builds for macOS, Windows and Linux (auto-detected).

Step 2. Open it the first time (security prompt)

The app isn't code-signed yet, so your OS shows a one-time “unverified developer” warning. This is expected — allow it once:

macOS

If you see “Apple could not verify… Not Opened”, click Done, then go to System Settings → Privacy & Security, scroll down, and next to the blocked app click “Open Anyway” → confirm. (On macOS 15 the old right-click → Open trick is gone — use this Settings step.)

Windows

If “Windows protected your PC” appears, click More info → Run anyway.

Linux

Make it executable (right-click → Properties → Permissions → “Allow executing”), then open it.

Step 3. Connect it to CozyHR

In the app, fill in:

  • CozyHR URL — already set to your workspace.
  • API key — create one in Developers → API keys with scopes attendance.read, attendance.write, employees.write, paste it in.
  • IN / OUT device IPs — your two devices.

Click Save, then Test devices — you should see each device connect with its user count.

Step 4. Import your people (onboarding)

Starting fresh? Click Import users — everyone enrolled on the device (their ID + name) is created in CozyHR as draft employees. Their device User ID becomes the Employee Code, so attendance matches automatically. Finish each profile later in the workspace.

Step 5. Start syncing

Click Sync punches now for an immediate pull, then Start auto-sync to keep it running in the background (every minute). Leave the app open on that computer.

Step 6. Verify

Open Time → Attendance— punches appear there. Anything whose ID doesn't match an employee waits safely in Time → Failed push inbox.

Troubleshooting
  • Device won't connect — the computer must be on the same network as the devices (ZK devices use TCP port 4370).
  • Some punches skipped — that ID has no matching Employee Code. Run Import users, or map in Time → Biometric mappings.
  • Key error — the API key is wrong or missing a scope (needs attendance + employees).

Running a headless server instead of a desktop? A command-line version is available here.