Attendance & Clocking In
Clocking in and out
Section titled “Clocking in and out”Every branch is set up by a manager to use one of two clock-in methods, chosen on the Restaurant page (see Restaurant & Branches). You don’t choose which one - whatever your branch uses is what you’ll see.
- PIN code - you type a personal numeric code (4-8 digits) on a shared kiosk screen, or clock in directly from the app.
- QR code - you scan a code displayed on a shared kiosk screen using the app’s own camera scanner. Plain clock-in buttons are hidden entirely on QR branches, so every clock-in is tied to physically scanning the screen at the restaurant.
You can clock in and out from either the Attendance page (or the clock-in card at the top of My Shifts) in the app itself, or from a shared kiosk screen at the restaurant that doesn’t require logging in. The full walkthrough of the shared kiosk screen - PIN and QR - is covered in its own section below, since other guides point here for it.
Clocking in from the app instead of a kiosk
Section titled “Clocking in from the app instead of a kiosk”If your branch uses PIN check-in, you can also just tap Clock In directly on the Attendance page or the My Shifts page - no kiosk needed, as long as you’re signed in and assigned to a branch. On the My Shifts page, the clock-in card only appears once you have an approved shift starting within about 15 minutes or already underway; the Attendance page’s plain Clock In button has no such restriction, so it’s available any time you’re assigned to a branch.
If your branch uses QR check-in, the app tells you to scan the code instead of offering a plain clock-in button - this keeps clock-ins tied to actually being at the restaurant. Tapping Scan to clock in (or Scan to clock out) on either page opens the same in-app camera scanner used at the kiosk.
Taking a break
Section titled “Taking a break”Once you’re clocked in (PIN branches), you’ll see Start Break next to Clock Out on the Attendance page. Tap it when you go on break, then tap End Break when you’re back. Your break time is automatically subtracted from your worked hours - if you clock out while still on break, the app automatically closes the break first so your total worked time still comes out right.
You aren’t limited to one break per shift - Start Break/End Break can be used more than once during the same clocked-in session, and each break’s length is added on top of the ones before it. The running total is what gets subtracted from your worked hours (and what shows as Break (min) on a manager’s CSV export), not just the most recent break.
Your weekly hours and history
Section titled “Your weekly hours and history”The Attendance page shows a small tile labeled My hours this week with your total hours worked so far this week (Monday-based, resets every Monday) rounded to one decimal place, and a caption showing how many days you’ve worked. Below that, employees see a running history of their own past clock-ins/clock-outs (your most recent 50 records), each with a status badge (normal or late) and the shift’s duration.
If you’re still clocked in when the week tally is calculated, the hours you’ve worked so far in the open shift count toward the tile immediately - it doesn’t wait for you to clock out.
Guarding against duplicate clock-ins
Section titled “Guarding against duplicate clock-ins”You can only ever be in one of two states - clocked in or clocked out - never both, and the app is built to keep it that way even if a request fires twice (a double-tap on a slow connection, or a QR scan that registers twice). A clock-in first checks whether you already have an open record and simply returns that instead of creating a second one; as a backstop, the database itself enforces this with a uniqueness rule on “one open attendance row per person,” so even a genuine race between two near-simultaneous requests can’t leave you with two open shifts at once.
The kiosk clock-in flow
Section titled “The kiosk clock-in flow”A kiosk is just this page loaded on a shared tablet or terminal at the restaurant, at a link like /kiosk/<token> - no one needs to sign in on it. Managers reveal each branch’s kiosk link and QR code from the Attendance page (see Manager attendance tools below) or from the Branches section on the Restaurant page, and can Reset it at any time to generate a new one (see Branches).
If the kiosk’s link is no longer valid at all (reset, or simply mistyped), the screen shows This kiosk link is not valid. Ask a manager for the current link. instead of the clock-in screen. If the restaurant’s account is suspended, it shows a similar message telling you to have a manager contact SessionPilot.
PIN kiosks
Section titled “PIN kiosks”- On the kiosk screen, enter your personal code using the on-screen keypad (4-8 digits) - dots above the keypad fill in as you type, and C clears what you’ve entered.
- Tap Clock in/out once you’ve entered at least 4 digits.
- The screen confirms your name and the time. If you were already clocked in, the same code clocks you out instead and shows how long you worked.
- If your code isn’t recognized - including if your employment has been marked as terminated - the kiosk shows Code not recognized. Check with your manager. and nothing is recorded.
- The result screen clears itself automatically after a few seconds, or you can tap Done to dismiss it and go straight back to the keypad for the next person.
QR kiosks
Section titled “QR kiosks”- The kiosk screen shows a QR code instead of a keypad, with a short hint to scan it from the app.
- Open the SessionPilot OPS app on your phone, go to Attendance or My Shifts, and tap Scan to clock in (or Scan to clock out if you’re already clocked in). This opens the app’s own camera view - a generic phone camera or QR scanner app can’t read it, since the code doesn’t encode a URL, just an app-specific check-in payload.
- Point your phone’s camera at the code on the kiosk screen until it’s recognized.
- Once it scans successfully, you’re clocked in or out immediately and the app shows a confirmation banner.
The QR code on the kiosk screen refreshes every 5 seconds for security. A freshly displayed code stays scannable for roughly 10-15 seconds total to leave room for camera decoding and network lag, but a photo or screenshot of it stops working almost immediately after that - always scan the code that’s currently on screen. Scanning an expired code gives you This code has expired - scan the current QR code again.
A QR scan can also fail for reasons unrelated to the code’s age:
| Message you see | What it means |
|---|---|
| That QR code is not a SessionPilot check-in code. | You scanned something else - the QR reader didn’t recognize the payload as a SessionPilot code at all. |
| This QR code is no longer valid. | The branch’s kiosk link was reset since this code was generated, or the branch no longer uses QR check-in. |
| Your account isn’t set up to clock in at this branch. | You scanned a QR code belonging to a different branch than the one you’re assigned to, or your account has been marked as terminated. |
Clocking in from a personal phone at the kiosk vs. the app
Section titled “Clocking in from a personal phone at the kiosk vs. the app”The kiosk and the in-app scanner both run through the exact same check-in logic - the only difference is where the camera view opens from (the shared kiosk device has no camera view of its own for QR; scanning always happens from your own phone’s app).
Location-based clock-in checks
Section titled “Location-based clock-in checks”Managers can set a GPS Location for each branch on the Restaurant page (latitude/longitude, entered manually or filled in with Use my location). As of now, this location is used for the branch’s weather widget on the dashboard and to plot branches on SessionPilot’s internal admin map - it does not block, flag, or otherwise check where you are when you clock in. There’s no radius or distance requirement enforced on the clock-in flow itself, whether you use a kiosk or the app.
What actually ties a clock-in to being physically on-site is the kiosk mechanism itself, not GPS:
- QR branches - you can only scan a code that’s currently displayed on the shared screen at the restaurant, and it stops working within seconds of leaving that screen.
- PIN branches - the kiosk keypad is a shared device at the restaurant, but PIN clock-ins from the app itself have no on-site requirement beyond being signed in and assigned to that branch.
If your manager has told you clock-ins are location-restricted at your branch, that’s a policy they’re enforcing themselves (e.g. only allowing the shared kiosk) rather than something the app checks automatically.
Manager attendance tools
Section titled “Manager attendance tools”Managers, supervisors, ops managers, and owners see extra sections on the Attendance page instead of a personal history.
On-site now
Section titled “On-site now”A live list of everyone currently clocked in, with their branch, when they clocked in, and a running duration that ticks upward every 30 seconds while the page is open. Managers and owners (not supervisors) can force-clock someone out from here using the Clock Out button on their card - useful if someone forgot to clock out and their session would otherwise stay open indefinitely. This uses the same clock-out logic as a normal self-clock-out (it closes any open break too), it’s just triggered by a manager on someone else’s record instead of the employee themselves.
Attendance report
Section titled “Attendance report”A filterable table of clock-ins/clock-outs across a date range (defaults to the last 7 days), optionally narrowed to one branch using the Branch dropdown. Each row shows the employee, branch, date, clock-in/out times, duration, and a status badge:
- normal - clocked in on time (or no scheduled shift was found to compare against).
- late - clocked in more than 10 minutes after the scheduled start time of a shift they had underway or starting within the hour.
A shift’s late/normal status is decided automatically at the moment of clock-in and isn’t changed afterwards even if the shift’s scheduled time is edited later. The on-page table itself doesn’t show a break-time column - if you need to see break minutes per punch, use Export CSV below, which adds one.
Export CSV
Section titled “Export CSV”Export CSV downloads the currently filtered report (same date range and branch filter as the table) as a spreadsheet with columns for Employee, Employee Code, Branch, Date, Clock In, Clock Out, Break (min), Duration (hrs), and Status. Clock-outs still in progress show as “In progress” with no duration. This lives on the Attendance page itself rather than under Payroll & Hours, since it’s a raw punch export rather than a payroll calculation - use the Payroll & Hours link from the Attendance page if you need worked time converted into payroll totals.
Kiosk links
Section titled “Kiosk links”Managers can reveal each branch’s kiosk web address with Show kiosk links, and Copy link to set up a shared tablet or terminal at the restaurant. Resetting or regenerating a branch’s kiosk link/QR (from the Restaurant page) is covered in Branches.
Kiosk screen (owners)
Section titled “Kiosk screen (owners)”Instead of setting up a separate tablet, you can hand over the device you are already holding. Kiosk screen appears in two places — on the You page (which is on the phone’s bottom bar and the desktop header) and next to Check-in points on the Attendance page — and is available to managers, ops managers and owners.
It opens a picker listing every check-in point: each branch’s own code, and any shared multi-branch point that has been created, each labelled PIN or QR. Choosing one turns the device into that screen, full-bleed, with the QR or the PIN pad sized to be read from where somebody is standing.
While kiosk mode is on, the device is a kiosk and nothing else. Every other address in the app bounces straight back to the screen, so escaping the page — out of full screen, or by typing a URL — lands back on the check-in code rather than in your dashboard. You stay signed in behind it, which is what makes exiting cheap.
The Exit tab down the left edge asks for a password: the one belonging to whoever started kiosk mode, or any owner’s. A correct password ends kiosk mode and drops you back into the app already signed in — never a fresh login. Staff without a password cannot leave the screen.
A Full screen button sits in the opposite corner where the browser supports it, which hides the address bar as well. iPad Safari has no such control, so for a tablet that must not be used for anything else, pair kiosk mode with the tablet’s own guided-access setting. This is a lock on the app, not on the hardware.
What you can’t do here
Section titled “What you can’t do here”There’s currently no way to edit a past clock-in or clock-out time, manually add a missed punch, or mark someone as absent from the Attendance page - the only correction available is force-clocking out someone whose shift is still open. If a punch needs to be corrected after the fact (wrong time, missing entry entirely), contact SessionPilot support rather than looking for an edit control on the record itself.
How lateness is determined
Section titled “How lateness is determined”The late badge - whether it’s your own history on the Attendance page, a manager’s report row, or the message shown right after a kiosk clock-in - is decided the same way everywhere: at the instant you clock in, the app looks for one of your shifts that’s either already underway or starts within the next hour. If it finds one, you’re marked late when your clock-in is more than 10 minutes after that shift’s scheduled start time; otherwise you’re normal. If no matching shift is found at all (nothing scheduled, or nothing close enough in time), you’re marked normal by default rather than left unflagged.
This check compares two real timestamps - the moment you clocked in and the shift’s stored start time - directly against each other, so it isn’t affected by which timezone the app’s server happens to be running in. That’s a different (and separately-tracked) code path from the one used by the daily/weekly/monthly timesheet report email: that report’s own “late arrivals” section compares against each employee’s optional expected arrival time setting rather than a scheduled shift, and specifically needs to convert that time into the restaurant’s own timezone (e.g. Europe/Stockholm) to compare correctly - a timezone bug in that specific comparison was found and fixed on 2026-07-29. It’s unrelated to the live late badge described here, which never looks at expected arrival time at all.
Troubleshooting / FAQ
Section titled “Troubleshooting / FAQ”I clocked in but it doesn’t show up. Check that you’re looking in the right place: your own clock-ins appear in My history on the Attendance page (capped at your most recent 50) and count toward the My hours this week tile, which resets each Monday - a clock-in from last week won’t show in this week’s tally. If you’re a manager checking the Attendance report instead, make sure the date range and branch filter actually cover the punch you’re looking for; the report defaults to the last 7 days and can be narrowed to one branch. If you just clocked in via the QR scanner and don’t see it reflected yet, give the page a moment - it refreshes automatically right after a successful scan.
The kiosk says my QR code is invalid. This means either the code on screen had already expired (each one is only valid for about 10-15 seconds - always scan what’s currently displayed, not a photo of it) or the branch’s kiosk link/QR was reset by a manager since the page was last loaded, which invalidates every code tied to the old link. Refresh the kiosk page (or ask a manager to reset it again and reload) to get a current, working code.
I’m shown as late but I wasn’t. The late badge is assigned automatically the moment you clock in (see How lateness is determined above): the app looks for a shift of yours starting within the next hour or already underway, and flags you late if you clocked in more than 10 minutes after that shift’s scheduled start time. A few things can cause a mismatch with how you remember it - your shift’s scheduled start time was changed after you clocked in (the status isn’t recalculated after the fact), or there was no matching shift found at all for a different reason and it fell back to normal instead. This status isn’t self-service to change - if you think it’s wrong, ask your manager to check the shift’s scheduled time.

