live in Mumbai, London, NYC 2FA · Audit log · TLS
Attendance & shifts

Attendance that reads itself.

One Clock in / Clock out from the desktop agent. Shifts with timezones, grace periods, working days. Late and early-leave flags computed on a scheduler job — the moment a shift starts, the math is already done. No spreadsheets, no Mondays.

No card needed · 14-day full-access trial
app.getfruitful.io/dashboard/attendance
May 2026
Anita Desai · Atlas
M
T
W
T
F
S
S
1
pres
2
pres
3
late
4
5
6
pres
7
pres
8
pres
9
on l
10
on l
11
12
13
pres
14
late
15
pres
16
abse
17
pres
18
19
20
pres
21
pres
22
half
23
pres
24
pres
25
26
Present Late Absent On leave Half day
Per shift
Timezone & grace stored per shift
Cross-tz teams stop arguing
Automatic
Late / early flags via scheduler
Computed at shift start + grace
Type-aware
Leave types · paid + unpaid
Per-org configurable
One queue
Same approval flow as time entries
Audit-logged
01 · Shift scheduling

Shifts that know
where everyone lives. And what time it is for them.

Every shift carries its own timezone, working days, grace period, and break window. Assign with an effective-from date. A new IST team starting on Monday is one effective-shift row away — past attendance stays untouched.

Shift designer

The form your ops lead
fills out once.

Name, start, end, timezone, grace, break, working-day toggles. Save once, assign to as many employees as you want. Re-assign with a new effective_from date when someone moves teams or rotates onto nights — the past stays clean, the future picks up the new schedule.

  • Timezone per shift, not per org An agency in Bangalore can run an EU-night shift alongside an IST-day shift without the totals drifting. Clock-in math always uses the shift's tz.
  • Grace period stored, audit-clean A 10-minute grace is part of the shift record. Move it to 5 minutes next quarter and only future rows recompute — past attendance keeps the grace it ran under.
  • Effective-from dating Assigning a new shift never rewrites history. The old record stays open with effective_to, the new one starts the next day. The audit log shows both.
app.getfruitful.io/dashboard/attendance?tab=schedules
Shift · APAC night
Active · 14 employees
Name
APAC night
Timezone
Asia/Kolkata
Start
22:00
End
06:30 +1
Grace
10 min
Break
45 min
Working days
M
T
W
T
F
S
S
Effective from 1 Apr 2026 · prior schedule preserved
02 · Clock in / out

One button.
One audit trail. Same on the HUD and the dashboard.

From the desktop agent OR the web

Clock in where the work is.
Web or desktop.

Most teams clock in from the desktop agent HUD — single button, agent starts capturing. Some roles (visiting consultants, field staff) clock in from the web. Both write to the same attendance_logs row. Same status field, same late-by-minutes math, one chain.

  • Re-clock-in on the same day Forgotten clock-outs don't fragment a day. The next clock-in stamps prior-session minutes and reopens the row — totals stay accurate.
  • Status is computed, not guessed Late, half-day, on-leave, present — all derived from clock_in vs the shift's start + grace. No manual marking, no arguments.
  • Web fallback for off-laptop roles Visiting consultants, field reps, mobile-first teams clock in from the dashboard. Same row, same flag math.
fruitful agent · idle
Clocked out · ready
00:00:00
APAC night · starts at 22:00 IST
This week
38h 12m
Last week
41h 04m
Same-day re-clock-in: if you forget to clock out, the next clock-in re-opens today's row instead of splitting it.
03 · Leave management

Leave requests in the
same approval queue. As manual time, as project entries.

One queue, three intents

Approve a week of leave.
Two minutes.

Leave requests land in the same approval queue as manual time entries and project edits. Managers approve all three in one pass with the same shortcuts. Status changes audit-log the manager id + timestamp. The employee gets one email — not three.

  • Per-org leave types Annual, sick, paternity, paid, unpaid — define your own. Days-per-year cap is enforced; balance shows on the employee dashboard.
  • Same shortcuts as time approvals Bulk select via ⌘A, approve via ⌘↵, reject opens a one-line reason input. Ten leaves cleared in ninety seconds.
  • Auto-blocks the calendar Approved leave dates flip the attendance cell to on_leave automatically. No double-bookkeeping, no manual roster edits.
app.getfruitful.io/dashboard/leave-management
Pending leave · 4 requests
⌘A select · ⌘↵ approve
Employee Type Dates Action
Anita Desai Annual Jun 12 → Jun 14 · 3d
Marcus Wong Sick May 28 · 1d
Priya Mehta Paternity Jul 1 → Jul 21 · 15d
Ravi Krishnan Unpaid Aug 5 → Aug 9 · 5d
4 leave types configured · admin-defined
04 · Late + early detection

Computed before
the morning standup. Not after lunch.

How the job runs
  1. 1 Shift starts at 09:00 IST, grace ends 09:10 IST.
  2. 2 Scheduler job fires at 09:11 IST for every active shift.
  3. 3 For each employee whose attendance row has no clock_in yet at that moment, status flips to late (or absent past the threshold).
  4. 4 Manager dashboard + email alerts (if the team opts in) fire at 09:15.
  5. 5 When the employee finally clocks in, late_by_minutes is recorded against the original shift start, not "now."

No surveillance, no badge readers — just one job that knows your shift.

app.getfruitful.io/dashboard/attendance · today
Today · 20 May · APAC night
checked at 22:11 IST
Employee Clock in Status Δ vs shift
Anita Desai 21:58 present -2m
Marcus Wong 22:04 present +4m
Priya Mehta 22:21 late +21m
Ravi Krishnan absent
Sarah Lim 21:54 present -6m
1 late, 1 absent — manager pinged scheduler · 22:11 IST
Also in attendance

The boring bits done right. So payroll day reads itself.

Holiday calendar

Per-region public holidays prefilled, plus your own custom days. Holidays flip cells to leave automatically — no manual roster work.

Shift rotation

Move someone from APAC night to APAC day with an effective_from. The handover preserves history; the next pay cycle reads the new schedule.

Cross-tz totals

Aggregations roll up in the org base timezone. Per-employee figures read in each shift timezone. No more whose-clock confusion.

Missed-clock-in alerts

Opt-in alert that fires X minutes past a shift start. Manager, HR, on-call rota — each side toggles their own delivery.

Payroll-ready exports

CSV and PDF exports plus a REST API. Worked-minutes per employee per pay-period, late and leave columns included. Pick the column layout your payroll tool expects — we hand it the clean numbers, your tool computes pay.

Audit trail

Every status change, every leave decision, every shift assignment writes to the append-only audit log. Filter by actor and export when an auditor asks.

Who uses attendance this way

One module, three buyers.

BPO operations lead
Pain

"Three shifts, two timezones, four supervisors arguing about who was actually late. Spreadsheets every Monday."

Fruitful does

Shift + grace stored per row. Late detection runs as a job at shift_start + grace. The Monday standup reads the dashboard, not an email thread.

11 min weekly attendance review (was 2h)
HR lead · 80-person agency
Pain

"Annual leave balance was an HRBP's spreadsheet. Three accidental over-allocations per quarter."

Fruitful does

Per-type cap enforced at request. Approved leave auto-blocks the calendar. Balance shows on the employee dashboard — zero accidental overallocations this quarter.

Remote ops · 4 timezones
Pain

"One team in BLR, one in LIS, one in MEX, one in NYC. The Mondays were a war zone every single week."

Fruitful does

One shift per region, all running independently. Cross-tz totals roll up in the org base currency for payroll export; employee figures read in their local tz.

4 tz one dashboard
Late detection used to be a Tuesday-afternoon spreadsheet. Now it's a Monday-morning glance.
S
Sarah Lim
Head of Operations · Coalpine BPO
The leave-cap enforcement caught two double-bookings on day one. Paid for itself before the trial ended.
P
Priya Mehta
HRBP · Linework Studio
Honest questions

Buyers ask, we answer.

Can one shift have a different timezone from the company timezone?
Yes. Shifts store their own timezone. A Bangalore-based agency can run an EU-night shift in Europe/Berlin, an IST-day shift in Asia/Kolkata, and a US-prep shift in America/New_York simultaneously. Each one's clock-in math uses its own tz.
How does late detection work?
A background process runs every minute. As soon as a shift start plus its grace period passes, anyone who has not clocked in is flagged as late. When they eventually do clock in, the system records the late minutes against the shift start — not against the moment they finally arrived.
What happens if an employee forgets to clock out?
The next clock-in (same day or next day) re-opens the day instead of splitting it across two rows. The minutes from the earlier session are preserved so the total stays accurate. A friendly ‘you forgot to clock out’ reminder is sent at end-of-shift.
Can we run multiple shifts per employee?
Yes. Each schedule change carries an effective-from / effective-to date. Move someone onto a new shift and the old assignment closes cleanly. History is never overwritten — past attendance keeps the rules it ran under.
How is leave linked to attendance?
When a leave request is approved, the affected days flip to on leave automatically — no double-bookkeeping. If leave overlaps with a partial day, the day shows as half day.
Can we export attendance data to our payroll tool?
Yes. CSV + PDF exports plus a REST API on every report. You pick the column layout that matches your payroll tool — late minutes, leave types, working-minutes per pay-period are all available as columns. Your payroll system computes the pay; Fruitful supplies the clean source data.

Ship attendance by Friday. Mondays go quiet.

14 days, full access, no card. We'll import last year's roster during onboarding so your reports keep their trend the day you switch.

No card needed · Cancel anytime · Onboarding in under 10 minutes