How to check in graduation guests with QR codes and Google Sheets
Check in graduation guests from a Google Sheet: one QR ticket per guest, a limit per graduate, each ticket scanned once at the door. Free route first.
Short answer
To check in graduation guests from a Google Sheet, give every guest their own numbered ticket code, print or send it as a QR code, and scan each ticket once at the door on a staff phone.
The free route is a Google Form where graduates register their guests, a formula that flags anyone over the ticket allowance, and a printed list or a search of the Sheet at the door.
QR to Sheets refuses a ticket that was already scanned when Accept duplicate scans is off, and its Events add-on can email each guest a QR invitation and write the check-in back to the guest list.
On this page
- What makes graduation check-in different from other events?
- How do I run graduation registration free with a Google Form?
- Where does the free route break at a ceremony door?
- How do I make each ticket scan only once?
- How do I email every guest their own QR ticket?
- How many doors and phones do we need?
- Who has not arrived yet?
- Which tool fits a graduation?
- Guest data in a school spreadsheet
Graduation is the event a school cannot rerun. The hall holds a fixed number of people, every graduate wants their family inside, and most of the guests arrive in the half hour before the procession. Paper tickets and a list at the door work, and many schools run them well. This guide covers that free route in full first, then where it breaks at a busy door, then a setup where each guest's QR ticket is scanned once into a Google Sheet the school controls.
Written by QR to Sheets, which sells the scanner link and the Events add-on described in the second half of this guide, so weigh that accordingly. The Google Forms route comes first and works without us. Google and Darkaa facts were read on their own pages on 2026-10-10.
What makes graduation check-in different from other events?
- A ticket allowance per graduate. Seats are limited, so each graduate gets a number of guest tickets, often two to four, and the school has to notice when one family registers more.
- A short, heavy arrival window. Most guests arrive in the 30 to 60 minutes before the ceremony starts, so the door has to move a queue, not a trickle.
- Families arrive together. One person often holds four tickets, and the door has to count four people in, not one family.
- Graduates come in separately. They gather elsewhere for the procession, so they usually need no guest ticket. If you want a roll call of graduates, that is a separate list, not the guest list.
- A re-entry rule. Guests step out with a crying baby or to find parking. Decide before the day whether a ticket that was already scanned may come back in.
How do I run graduation registration free with a Google Form?
Create a Google Form with two questions, Student ID and Guest name, and link it to a spreadsheet. Ask graduates to submit one response per guest, using Submit another response for the second and third. If your students have school Google accounts, set Collect email addresses to Verified under Settings, Responses. Google's help page says that with Verified, "Respondents must confirm their Google Account email address gets collected with their response." That gives you a reliable graduate email in column B to count by, instead of a typed ID. The response tab then reads: A Timestamp, B Email address, C Student ID, D Guest name.
Google Forms adds each response as a new row, so a formula filled down beside the responses does not reach the rows that arrive later. Put each formula in the header cell of an empty column instead, and it covers every row. Add any form questions first, then these:
- Guest number, in E1: ={"Guest no."; ARRAYFORMULA(IF(B2:B="", "", COUNTIFS(B2:B, B2:B, ROW(B2:B), "<="&ROW(B2:B))))}. It numbers each graduate's guests 1, 2, 3 in the order they registered.
- Over the allowance, in F1, for an allowance of four: ={"Over limit?"; ARRAYFORMULA(IF(B2:B="", "", IF(COUNTIFS(B2:B, B2:B, ROW(B2:B), "<="&ROW(B2:B))>4, "OVER LIMIT", "")))}. It marks the fifth and every later guest of the same graduate.
- Google's help notes that COUNTIF is not case sensitive, so ana@school.edu and ANA@school.edu count as one graduate.
- Without Verified email collection, count by column C, the student ID, instead. Typed IDs are less reliable: a space or a wrong digit starts a new count.
The form setting Limit to 1 response does not do this job. Google's help says that with it on, "To access and fill out the form, users must sign in to their Google Account," and it allows one response per account, which would stop a graduate registering a second guest at all.
Issue one ticket code per guest
- When registration closes, add a tab called Tickets with the headers Ticket, Graduate email, Student ID and Guest name in A1 to D1.
- In B2: =FILTER('Form Responses 1'!B2:D, 'Form Responses 1'!B2:B<>"", 'Form Responses 1'!F2:F<>"OVER LIMIT"). It copies every guest within the allowance. Then copy columns B to D and paste them back with Edit, Paste special, Values only, so a late response cannot shift the list.
- In A2, filled down to the last guest: ="G26-"&TEXT(ROW()-1, "0000")&"-"&DEC2HEX(RANDBETWEEN(4096, 65535)). That gives codes such as G26-0042-7F3A. The random part stops anyone guessing the next ticket from their own.
- Paste column A back as values too. RANDBETWEEN picks new numbers every time the sheet changes, so until you paste the values, the codes keep changing.
To print, paste column A into the free bulk QR code generator, which lays the codes out on label sheets with no account, and hand each graduate their guests' tickets at rehearsal. To email them, Gmail has a built-in mail merge that can use any spreadsheet column as a merge tag, but Google's help lists it only for Workspace Individual, Business Standard and Plus, Enterprise Standard and Plus, and Education Standard and Plus, so many schools on a free education plan will not have it. A mail merge sends the ticket code as text, not as a QR image.
At the door, free
Print the Tickets tab sorted by guest name with a tick column, or keep the Sheet open on a phone and search for each name. For a small ceremony where staff know most families, that is enough, and it costs nothing.
Where does the free route break at a ceremony door?
- Searching names is slow with a queue. Two families share a surname, a name is spelled differently from the form, and typing on a phone takes longer than the guest takes to walk in.
- A copied ticket gets in twice. A paper list or a printed QR code cannot tell the second person with the same ticket that it was already used. A formula can flag the repeat afterwards; it cannot stop it at the door.
- Two doors cannot see each other's ticks. A guest turned away at the front can walk round to the side door with the same ticket.
- Several people typing into one shared Sheet at the same time can type over each other's entries.
- Signal inside a gym or a hall is often poor, and a Sheet that cannot load cannot be searched.
How do I make each ticket scan only once?
In QR to Sheets, the admin signs in with Google once, connects the spreadsheet and creates a scanner link, here called Graduation doors, that writes to a tab called Log. Door staff open the link in Safari or Chrome on their phones, allow the camera once and scan tickets, with no app and no account. Each link has a setting called Accept duplicate scans. For tickets, switch it off.
- With it off, the link records each code once, ever. The first scan of G26-0042-7F3A is written to the Log tab as a row with its scan time.
- A second scan of the same ticket shows Already scanned, with the time it was first scanned, and nothing is added to the Sheet. The member of staff sees the refusal on the scan they just made.
- It holds across doors: a ticket used at the front door is refused on every other phone using the same link, and if two phones scan the same ticket at the same moment, only one row is kept.
- Change the setting before the day, then open or refresh the link on each door phone, because a phone picks up the link's settings when the scanner page loads.
- Any code already recorded on the link is refused, including test scans made at rehearsal. Rehearse with codes you will not issue, or create a fresh link for the ceremony.
- The link does not know which tickets you issued. It refuses repeats; it does not refuse a code it has never seen. The report below lists any scanned code that is not on the Tickets tab.
Re-entry needs a decision. With the setting off, a guest who steps out and comes back is refused on the way in, so give guests a hand stamp or a wristband at the exit and let staff wave those back in. If you would rather record every entry, leave the setting on: a ticket scanned again on the same link within 12 hours then shows an amber Already scanned badge with the words Saved anyway, and the Sheet keeps both rows. Single-use QR codes covers the once-only rule in more detail.
Each scan adds one row to the Log tab: the scan time in column A, the ticket code in column B, and link:Graduation doors in column C, followed by the workspace name, the device type and a scan ID. The time is written as text in the form YYYY-MM-DD HH:MM:SS, in the timezone set for your workspace, so formulas that do arithmetic on it wrap it in VALUE(). If the Log tab was empty when scanning started, type the column names scanned_at, qr_value, scanner_email, organization, device_type and scan_id into row 1 first, so the formulas below can start at row 2.
How do I email every guest their own QR ticket?
That is the job of the QR to Sheets Events add-on. You import the guest list from a Google Sheet, and it emails each guest a personalised QR invitation. At the door, staff scan with a check-in link: the phone shows the guest's name, and the check-in time is written back to that guest's own row in the guest-list Sheet. A second scan of the same invitation shows already checked in, with the original check-in time. Guests marked VIP in the list get a distinct gold screen, which suits dignitaries and speakers.
- It costs $25/month on top of Premium, which it requires, so one door phone plus Events is $32 a month.
- Each import reads up to 1,000 guests. Invitations draw on the workspace's monthly email allowance, shared with Forms confirmation emails: 2,000 a month plus 500 per extra device.
- Each guest needs a name and their own email address. A row without either is skipped, and the invitation is tied to the email address, so four rows carrying the same graduate's address produce one invitation, not four.
That last point decides the route for most graduations. If each guest has their own email address, the Events add-on fills in the guest list as people arrive. If graduates collect their family's tickets, issue the codes yourself as above and scan them on a plain scanner link. A scanner link appends rows to the Log tab; only the Events add-on writes check-ins back into the guest list.
How many doors and phones do we need?
Staff scanning per-guest codes move at roughly one guest per second per phone. Six hundred guests through one door is about ten minutes of scanning, but they do not arrive evenly, so open a second door for the last half hour. Put the same link on every door phone: one Sheet, one set of refusals. Several phones scanning into one Google Sheet covers telling the doors apart, if you need to.
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. The free plan also has one scanner link and 300 scans in total, not per month, and rehearsal scans count, so a small ceremony with one door can run on it. Two door phones on Premium are $14 for the month, and $39 with the Events add-on.
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. Without a signal, though, a phone can refuse only a ticket it has already scanned itself; a ticket used at another door is refused only once the signal returns, after the guest is inside. Put the door phones on the venue's Wi-Fi and test it in the hall beforehand.
Who has not arrived yet?
Add an Arrived at column to the Tickets tab and a Report tab. The Tickets tab is not a form response tab, so here a formula filled down is fine:
- Arrived at, in E2 of the Tickets tab, filled down: =IFERROR(INDEX(Log!A:A, MATCH(A2, Log!B:B, 0)), "Not yet"). It shows the scan time of each ticket, or Not yet.
- How many guests are in, on the Report tab: =COUNTIFS(Tickets!A2:A, "<>", Tickets!E2:E, "<>Not yet")
- Who has not arrived: =FILTER(Tickets!D2:D, Tickets!A2:A<>"", Tickets!E2:E="Not yet"). Swap D for C to list the graduates whose guests are missing.
- Codes scanned that were never issued: =IFERROR(FILTER(Log!B2:B, Log!B2:B<>"", COUNTIF(Tickets!A:A, Log!B2:B)=0), "None")
- Arrivals per quarter hour, for planning next year: type the start time, such as 2026-11-20 16:45, in A6 of the Report tab and =A6+TIME(0,15,0) below it, then in B6, filled down: =SUMPRODUCT((IFERROR(VALUE(Log!$A$2:$A), 0)>=A6)*(IFERROR(VALUE(Log!$A$2:$A), 0)<A6+TIME(0,15,0)))
VALUE() turns each text timestamp into a real time before it is compared, so a scan at exactly 17:15:00 counts in the 17:15 slot, not the one before. For more ways to compare a list with the people who turned up, finding who is absent has the Google Form versions of each formula.
Which tool fits a graduation?
The one vendor with a page built for this is Darkaa, whose QR Code Ticket graduation page, updated May 20, 2026, describes a Google Sheets add-on that "creates one unique QR code for each row or form response" and can "Write check-in status and timestamps back into Google Sheets." It lists Guest Limit Enforcement and Allocated Seating Support among the features of its graduation pack. Its Marketplace listing, QR Code Ticket Per Row For Check-In, says it can send tickets by email or WhatsApp, and that "You can check-in 10 guests for free."
| Option | How guests get a ticket | A second scan of the same ticket | Check-in recorded where | Seating and guest limits | Cost as published |
|---|---|---|---|---|---|
| Google Form and a printed list | Printed by the school, or a code sent by Gmail mail merge on eligible Workspace plans | Not caught at the door; a formula can flag it afterwards | Ticked by hand on paper or in the Sheet | Guest limit flagged by your formula; seating by hand | Free |
| QR Code Ticket Per Row For Check-In (Darkaa) | A QR code per row or form response, sent by email or WhatsApp | Not stated on the pages read | Check-in status and timestamps written back to Google Sheets | Guest Limit Enforcement and Allocated Seating Support listed in its graduation pack | 10 free check-ins per event for testing; then paid check-ins, per event or in a bundle |
| QR to Sheets scanner link | Codes you issue, printed or sent by you | Refused with Already scanned and the first scan time, on every door phone | A row on a Log tab, matched to the ticket list by a formula | Guest limit by your form formula; no seating features | Free for one phone, one link and 300 scans in total; then $7 per phone per month |
| QR to Sheets Events add-on | A QR invitation emailed to each guest, one per email address | Shows already checked in with the original time | Check-in time written back to the guest's row | No seating features; a VIP screen for flagged guests | $25 a month on top of Premium; one door phone plus Events is $32 a month |
Where each one wins: the Form and a printed list win for a small ceremony where staff know the families. Darkaa's add-on wins when you need allocated seats or WhatsApp delivery, which QR to Sheets does not offer. The scanner link wins when the school issues the tickets and wants a copied ticket refused at every door, priced per door phone rather than per attendee. The Events add-on wins when every guest has an email address and you want the guest list itself to fill in as people arrive.
Guest data in a school spreadsheet
- Put a ticket number in the QR code, never a name or an email address. Any phone camera can read a QR code, so a dropped ticket should reveal nothing.
- Keep the spreadsheet in the school's own Google account and share it only with the organisers. Door staff scanning through the link never get access to the spreadsheet.
- Delete the guest list when your retention policy says so. This guide is not legal advice.
Visitor days use the same tools with a different list: school open day check-in covers walk-in visitors who did not register.
Pricing, stated plainly. One door phone, one scanner link and up to 300 scans in total cost nothing. More phones or more scans need Premium at $7 per phone per month, with no annual lock-in. Emailed invitations with check-in written back to the guest list need the Events add-on, $25/month on top of Premium. QR to Sheets has no seating plan.
Step by step
- 1
Set the allowance and open registration
Decide how many guests each graduate may bring, then open a Google Form where graduates enter one response per guest, with their student ID and the guest's name.
- 2
Close registration and issue one code per guest
Copy every guest within the allowance to a Tickets tab and give each one a numbered code with a short random part, then paste the codes as values so they stop changing.
- 3
Print or send the QR tickets
Turn the codes into QR codes with a free bulk generator and hand the printed tickets to graduates, or email them. Each code contains only its ticket number.
- 4
Set up the door link to record each ticket once
Create a scanner link for the doors, switch off Accept duplicate scans, and rehearse with codes you will not issue, because any code scanned on the link before the day is refused on the day.
- 5
Scan at the doors and watch who has not arrived
Door staff scan each ticket on their phones. A formula on the Tickets tab shows each guest's arrival time and lists the guests who have not arrived yet.
Frequently asked questions
Can a graduation ticket be scanned only once?+
Yes, with QR to Sheets: switch off Accept duplicate scans on the door link. The link then records each ticket once, and a second scan shows Already scanned with the time it was first scanned, on every door phone using that link. A paper list or a Google Form can only flag a repeat afterwards.
What happens if a guest forwards or photocopies their ticket?+
Only the first scan counts. The second person with the same code is refused at the door with the first scan time on screen, and staff decide what to do. Put a random part in each ticket code so the next number cannot be guessed.
Do guests need a smartphone or an app?+
No. A printed ticket works, and staff scan it on their own phone in the browser, with no app and no account. People being scanned never open the scanner link and need nothing.
Can it limit how many guests each graduate brings?+
The limit is set where guests register. A header-cell COUNTIFS formula on the Google Form responses numbers each graduate's guests and marks any guest over the allowance, and only guests within it are issued a ticket code.
Does QR to Sheets handle seating?+
No. It records who arrived and when. Allocated seating has to be planned in the Sheet or with another tool; Darkaa's QR Code Ticket lists allocated seating support in its graduation pack.
What does it cost for one ceremony?+
A ceremony with one door phone and up to 300 scans in total is free. More door phones need Premium at $7 per phone per month. Emailing each guest a QR invitation needs the Events add-on, $25/month on top of Premium, so one door phone plus Events is $32 a month.