All guides
Nonprofit guide

How to track volunteer hours with QR codes in Google Sheets

Log volunteer sign-in and sign-out in Google Sheets and total hours per shift and per month, with formulas that flag a missed sign-out instead of guessing.

By the QR to Sheets team 11 min readUpdated 8 October 2026

Short answer

To track volunteer hours in Google Sheets, record a sign-in and a sign-out row for every shift, pair each sign-in with the same volunteer's next sign-out that day, and total the hours per volunteer per month with SUMIFS.

A free Google Form on each volunteer's phone or a paper sheet typed up later both work; the formulas are the same, and a shift with no sign-out should be flagged and confirmed, never guessed.

With QR to Sheets, a coordinator phone or a tablet at the sign-in table scans each volunteer's badge on two links, Sign in and Sign out, so names are never typed and every row carries its direction.

Most volunteer programmes track hours on a clipboard at the sign-in table: name, date, time in, time out. It works until someone needs a total. Then a coordinator types a month of handwriting into a spreadsheet, finds rows with no time out, and has to decide what to do about them. Food banks, charity shops, hospital volunteer services, animal shelters, churches and clean-up crews all hit the same three problems: totals that take hours to build, names spelled three ways, and missing sign-outs.

This guide covers the free routes first, then the formulas that turn sign-in and sign-out rows into hours per shift and per month, then where the free routes break and where a badge scanner fits. The formulas work on rows from any source, including a Google Form, a typed-up paper sheet or a scanner.

Written by QR to Sheets, which sells the scanner link described later in this guide, so weigh that accordingly. The Google Form and paper routes come first, and for a small team they are genuinely enough. The formulas below work whichever way the rows arrive.

Can a free Google Form or a paper sheet track volunteer hours?

Yes. A paper sign-in sheet costs nothing and needs no signal. Type each line into a Log tab later: the date and time in column A, the volunteer's ID in column B, and Sign in or Sign out in column C. A date and time typed as 2026-10-08 09:00 becomes a real date-time in Google Sheets, so the formulas below work on it directly.

A Google Form is the free digital version, and here it is fine for volunteers to use their own phones. Make two questions, in this order: a dropdown with each volunteer's ID or exact name, matching column A of the Roster, and a choice of Sign in or Sign out. Print the form's link as a QR poster at the sign-in table. Responses land in a linked spreadsheet with the timestamp in column A, the volunteer in column B and the direction in column C. Google Forms timestamps are real date-times, so no conversion is needed.

How do I turn sign-ins and sign-outs into hours per shift?

Leave the raw rows alone and build a Calc tab beside them. Type the headers Time, ID, Link, Signed out, Status and Hours into A1 to F1. Then copy the rows across in A2, converting the time as you go.

Now three formulas in row 2, filled down well past the last row you expect, say to row 2000. Rows with no data stay blank.

How it works: for each sign-in row, MINIFS finds the same volunteer's earliest sign-out that is later than the sign-in and on the same day. INT($A2)+1 is midnight at the end of that day, so a forgotten sign-out on Saturday never pairs with next week's sign-out to make a week-long shift. The 1/172800 in the Status formula is half a second: it stops a sign-in from counting itself as a later sign-in when Sheets rounds its time inside the comparison. Each OK row is one shift, and the hours are the difference multiplied by 24, rounded to two decimals. Two shifts on one day pair correctly, and because the formulas compare times rather than row positions, a row that reached the sheet late still pairs with the right partner.

The status column catches the three things that go wrong. A double tap at the sign-in table, or a volunteer who forgot to sign out in the morning and signed in again after lunch, leaves two sign-ins before one sign-out; only the later one counts, and the earlier one is marked to check. A sign-in with no sign-out that day is marked Check: no sign-out. A sign-out with no sign-in that day is marked too. The same pairing logic, with more on overnight shifts and rounding, is in the guide to calculating hours from scan rows.

The same-day rule suits daytime shifts. For an overnight shelter or a night-time event that crosses midnight, the pairing needs a different window; that guide's MINIFS without the end-of-day condition is the starting point, with the trade-off that a missed sign-out can then pair with a later shift, so check the long ones by eye.

How do I total volunteer hours per month?

Add a Month tab. Type the first day of the month, such as 2026-10-01, into B1. In row 3 type the headers ID, Name, Hours, Shifts and To check. In A4, list every volunteer with =FILTER(Roster!A2:B, Roster!A2:A<>""). Then in row 4, filled down as far as the list goes:

To see every row that needs attention in one place, put =FILTER(Calc!A2:E, LEFT(Calc!E2:E, 6)="Check:") on a Review tab. Sort the Month tab by hours if you want the most active volunteers at the top.

What do I do about a missing sign-out?

Flag it and ask; do not guess. A missing sign-out counts as zero hours in the totals above, which is deliberately visible in the To check column rather than quietly filled with a standard shift length. Filling it in with a typical shift makes every total look complete and makes none of them trustworthy.

Where do the free routes break?

Where does a badge scanner fit?

The scanned version turns the work around. Instead of each volunteer filling something in, one phone or tablet at the sign-in table scans a printed badge for each volunteer. The badge holds only the ID, never a name or phone number, so a lost badge reveals nothing. The free QR code ID card maker turns a pasted list of names and IDs into printable badges in the browser, with no signup; a keyring card or a lanyard both work.

In QR to Sheets you connect the programme's Google Sheet once, then create two scanner links named Sign in and Sign out, both writing to the same tab, here called Log. Each scan adds a row: the scan time in column A, the badge ID in column B and the link in column C. Column C holds link: followed by the link's name, so the rows read link:Sign in and link:Sign out, which is exactly what the Calc formulas above match. Columns D, E and F hold the workspace name, the device type and a scan ID.

If the signal drops, the open scanner keeps saving scans on the phone and sends them when the signal is back, each with its original scan time. Those rows can land lower in the sheet than later scans, which the Calc formulas already handle because they compare times, not row order.

Who scans, and on which phone?

The coordinator scans, or volunteers hold their badge up to a tablet on a stand at the sign-in table. Volunteers do not open the scanner link on their own phones. Each phone that scans counts as one device. Free covers one phone; Premium is $7 per phone per month. People being scanned never open the link and need nothing.

Paper sheet or Google Form compared with QR to Sheets
CapabilityPaper sheet or Google FormQR to Sheets
CostFreeFree for one phone, one link and 300 scans in total; two links need the paid plan
Who does the workEach volunteer writes or submits twice a shiftOne coordinator phone or tablet scans a badge
Names that do not matchCommon on paper; a dropdown helpsRare, because the ID is read from the badge
Forgotten sign-outsCommon; flagged by the formulas aboveStill happen; flagged by the same formulas
Signal dropsPaper is unaffected; a form fails to submitScans are kept on the phone and sent when the signal is back
Hours per shift and per monthThe formulas in this guideThe same formulas in this guide
Where the record livesA clipboard or your Google SheetYour Google Sheet
Ways to record volunteer sign-in and sign-out for a Google Sheet.
MethodWho records the timePhones neededCost
Paper sign-in sheet, typed up laterThe volunteer writes itNoneFree
Google Form on volunteers' own phonesThe form, when the volunteer submitsEach volunteer's own phoneFree
Google Form on a tablet at the tableThe form, one volunteer at a timeOne shared tabletFree
QR to Sheets, badge scanned on two linksThe scan, at the moment the badge is readOne coordinator phone or tablet7 USD per scanning phone per month for two links
Ways to record volunteer sign-in and sign-out for a Google Sheet.

Is this a time clock?

No. Everything here records presence: a badge or a name was presented at a time. A scan shows a badge was presented; it does not show who presented it. The hours are a record for your volunteer programme, useful for rotas, thank-yous, recognition and your own reporting. They are not a wage or time-clock record, and a spreadsheet that anyone with edit access can change is not a compliance record.

For headcounts at services, children's check-in and the wider picture for faith and community groups, the church and nonprofit attendance guide covers what this one does not, and after-school sign-in and sign-out uses the same two links for children's arrival and pickup.

Pricing, stated plainly. One phone, one scanner link and up to 300 scans in total cost nothing, which covers a trial of sign-in only. Sign-in and sign-out need two links, which means the paid plan at 7 USD per registered device per month: one coordinator phone or one tablet is 7 USD a month, however many volunteers it scans. The badges come from a free tool that needs no signup.

Step by step

  1. 1

    Give every volunteer an ID on a Roster tab

    One row per volunteer: a short ID such as V-014 in column A and the name in column B. The ID is what gets scanned or chosen; the name stays in the sheet.

  2. 2

    Record a sign-in and a sign-out for every shift

    Use a Google Form with a Sign in or Sign out question, a paper sheet typed up later, or two scanner links named Sign in and Sign out. Every row needs a time, an ID and a direction.

  3. 3

    Pair each sign-in with its sign-out on a Calc tab

    A MINIFS finds the same volunteer's next sign-out on the same day, and a status column marks each shift as OK or as something to check.

  4. 4

    Total hours per volunteer per month

    A Month tab lists every volunteer from the Roster, with SUMIFS for hours and COUNTIFS for shifts and for anything still to check in that month.

  5. 5

    Confirm missed sign-outs with the volunteer

    A shift with no sign-out counts as zero until someone asks the volunteer. Record the confirmed hours on a Corrections tab and leave the raw log untouched.

Frequently asked questions

How do I calculate volunteer hours in Google Sheets?+

Record a sign-in and a sign-out row for each shift. On a Calc tab, use MINIFS to find the same volunteer's next sign-out on the same day, subtract the sign-in time and multiply by 24 for decimal hours. A SUMIFS on a Month tab then totals the hours per volunteer for any month.

What should I do when a volunteer forgets to sign out?+

Flag it and ask. The formulas mark the shift as Check: no sign-out and count it as zero until someone confirms the time. Record the confirmed hours on a separate Corrections tab with who confirmed them, and never type an estimated time into the raw log.

Can volunteers scan with their own phones?+

Not on a scanner link. Each phone that scans counts as one device, so forty volunteers on their own phones would be forty devices. Use one coordinator phone or a tablet at the sign-in table to scan badges, or use a free Google Form if volunteers must use their own phones.

Why do my hours formulas not work on QR to Sheets rows?+

QR to Sheets writes the time as text in the form YYYY-MM-DD HH:MM:SS, and date comparisons and arithmetic need real date-times. Convert the time with VALUE(), as the Calc tab in this guide does. Google Forms timestamps are already real date-times and need no conversion.

Is a volunteer hours sheet a timesheet for paid staff?+

No. It records presence for your volunteer programme. It has no break rules, no approval step and no protection against editing, so anyone who is paid should be on your payroll process instead.

What does it cost to track sign-in and sign-out with QR to Sheets?+

Trying one link on one phone is free up to 300 scans in total. Sign-in and sign-out need two links, which is the paid plan at 7 USD a month for the one phone or tablet at the sign-in table. The badge maker is free.

Try it on your own Google Sheet

Connect Google, create a scanner link, and share the URL with your team. The free tier covers 300 scans, and nobody you share it with has to install anything.

Start for free

No credit card required

Keep reading