All guides
Attendance guide

How to take QR code attendance in Google Sheets for free

Free QR code attendance tracking with a Google Form and a Sheet, step by step. Where it breaks for schools and clubs, and the no-app staff-scan fix.

8 min readUpdated 4 October 2026

Short answer

QR attendance in Google Sheets works either through a free Google Form whose printed QR code students scan themselves, or by having one member of staff scan each student's printed code with a scanner link such as QR to Sheets.

The free Google Form route requires every student to have a phone with signal and is self-reported, so a student can submit for an absent friend and there is no offline handling.

Staff scanning students moves the phone requirement onto one adult, makes presence witnessed rather than claimed, and runs at roughly one student per second, so a class of thirty takes under a minute.

Paper registers get lost, names get misread, and roll call eats the first five minutes of every session. QR attendance fixes all three, and you do not need a student information system to do it. A Google Sheet is enough.

This guide covers the free approach first, because for many schools it is genuinely sufficient, then it is specific about where the free approach falls down.

How do I take QR code attendance with a free Google Form?

The best-known approach is a Google Form whose QR code is printed and displayed. Students scan it with their phone camera, the form opens, they enter their name or ID, and the response lands in a linked Sheet. It is free and can be running in ten minutes.

  1. Create a Google Form titled for the session, with fields for student ID and class.
  2. Link it to a Google Sheet under the Responses tab.
  3. Generate a QR code pointing at the form URL and print it for the classroom door.
  4. Students scan and submit as they arrive.

Where the Forms method breaks down

The self-reporting problem is the important one. If attendance carries any consequence — funding, safeguarding, grades — a method a student can trivially game is the wrong method, regardless of price.

What changes when a teacher scans each student?

Inverting the direction fixes most of the above. Instead of every student scanning a shared code, one member of staff scans each student's code as they enter. Now the phone requirement lands on one adult rather than thirty children, presence is witnessed rather than claimed, and the queue moves at roughly one student per second.

This is the model QR to Sheets is built for, and its QR attendance system for schools page shows the whole-school setup, so read the rest of this section with that in mind. A member of staff opens a scanner link in their phone browser, allows the camera once, and scans students in. Each scan appends a timestamped row to the school's own Google Sheet. Staff do not create accounts and do not install anything, which matters when the person on the door is a substitute or a volunteer.

QR Code Attendance in Google Sheets: Scan with Any Phone (No App) (4:02, hosted by Pip). Pip, the QR to Sheets assistant, walks through the staff-scans model: connect a Sheet, create a scanner link, share it with staff, and scan attendance from any phone.Watch on YouTube Chapters and transcript

Which method should a school choose?

Google Forms / Apps Script (DIY) compared with QR to Sheets
CapabilityGoogle Forms / Apps Script (DIY)QR to Sheets
CostFreeFree to 300 scans, then $7 per device per month
Who needs a phoneEvery studentOne member of staff
Proof of presenceSelf-reportedWitnessed by staff
Camera scanner includedNo, uses the phone camera to open a formYes, in the browser
Works with no signalNoBuffers on device, syncs later
Separate sessions cleanlyOne form, needs cleanupOne link per session or class
Where data livesYour Google SheetYour Google Sheet

Privacy, because this is student data

Attendance records about identifiable children carry obligations under GDPR, FERPA, or your local equivalent, whatever tool you use. A few things that make compliance easier rather than harder:

What else can the same student codes track?

Once codes are printed and a scanning habit exists, the same setup handles device and textbook loans, exam room entry, club sign-in, trip headcounts, and equipment checkout. The pattern is identical; only the destination Sheet changes. The same QR code attendance approach covers staff, clubs and events outside the classroom.

What happens if a student scans twice?

Duplicate scans are the most common thing that goes wrong on day one, and almost no attendance guide addresses it. A student joins the back of the queue again, a member of staff is unsure whether the first scan registered, or a code sits face-up on a desk and gets read twice as a phone passes over it. Decide in advance what you want the system to do about it, because the two possible behaviours give you very different registers.

There are two design choices. A system can refuse the second scan, or it can record it and tell you. Refusing feels tidy but destroys information: you can no longer tell the difference between a student who scanned once and a student whose second scan was silently thrown away, and you cannot audit a dispute later. Recording and informing keeps the log complete and pushes the decision into the spreadsheet, where you can change your mind without losing data.

QR to Sheets takes the second approach, so treat this as a description of one design rather than a claim about every tool. When the same value is scanned again within a twelve-hour window, an amber badge appears on the scanner showing the repeat count and the words "Saved anyway". By default both scans are saved and the repeat is flagged. If the repeat lookup is unavailable for any reason the scanner fails open, so the badge simply does not appear and scanning carries on. An admin who does want refusals can switch off a link's Accept duplicate scans setting, and that link then records each code once.

That means deduplication is a spreadsheet decision, not a scanner decision. A register built as a pivot table counting scans per student per day is already immune, because a student with two scans still shows as present. If you want a strictly deduplicated list, wrap the log in a UNIQUE or QUERY formula on a separate tab and leave the raw log alone. The important consequence for a school is that the raw log stays complete and auditable, which is exactly what you want if a parent or a manager queries a record months later. The guide to handling duplicate QR scans has the formulas for each choice.

Does QR attendance stop students signing in for each other?

Not by itself, and any tool that claims otherwise is overselling. A QR code is a printed token. A scan proves that a particular code was presented to a particular camera at a particular time. It does not prove that the person holding the code owns it. This is the same problem that swipe cards and PIN pads have had for decades, and it is usually described as buddy punching or proxy attendance.

What changes the picture is who does the scanning. When students scan a shared code with their own phones, nothing is witnessed and a code can be photographed and shared in a group chat within seconds. When an adult scans each student at the door or at their desk, the adult is the verification layer: they are looking at the face while the camera reads the card. The technology has not solved proxy attendance, but the workflow has moved it back into the room, where a teacher was already solving it.

The honest summary: QR attendance removes transcription errors, lost paper, and self-reporting from the car park. It reduces casual proxy attendance because someone is watching. It does not eliminate a determined student handing their card to a friend, and no camera-based system priced for a school will. Whether QR attendance can stop buddy punching goes through the workflow changes in more detail.

How do I stop students scanning the attendance QR code from home or from a screenshot?

With one code that students scan on their own phones, you cannot fully stop it. A Google Form QR code is only a link: one student photographs it, posts it in a group chat, and a friend at home opens the form and submits. Settings help at the edges. Restricting the form to your school's Google accounts and limiting it to one response per person stops anonymous and repeat submissions, and turning off Accepting responses when the lesson ends closes the window, but none of that proves the person submitting is in the room.

Some attendance tools rotate the code every few seconds or check the phone's location. Both raise the effort and both can be worked around, by a student relaying a live photo of the screen or by indoor location readings that drift, and both keep the assumption that every student has a phone.

The change that removes the problem is reversing who scans. When the teacher scans each student's own printed card, there is no shared code to screenshot: a student at home has nothing to scan and nobody to scan them. Each row records the time of the scan, the link it came from and the type of device that scanned it, so a mark taken at 08:52 on that class's link means someone with the scanner link open had that card in front of the camera at 08:52. A card can still be handed to a friend, as the previous section says, but the friend then has to stand in front of the teacher.

What about students without a smartphone?

The QR to Sheets scanner link open in a phone browser, showing the workspace name, a viewfinder framing the code, the hint 'Center the code in the box', and a manual entry field with a Submit button below it
What a member of staff sees after opening the scanner link. No app, no sign-in, and a manual entry field for the times a code will not read.

In a staff-scanning setup this question disappears, and it is worth stating plainly because it is the assumption that quietly rules out the free Google Forms route in most schools. A student needs a printed code. That is all. No phone, no data plan, no account, no app, and no sign-up. The device requirement lands entirely on the adult holding the scanner.

This matters beyond convenience. Phone ownership in a class is uneven along lines a school is obliged to be careful about, and a register that works better for students with newer phones is a register with a built-in bias. Printed codes are equal: a laminated card in a lanyard, a sticker inside a planner, or a label on the corner of a desk all read the same way.

Plan for the students who arrive without their card, because there will be some every day. Keep a small stack of spare printed codes and a manual entry fallback where the ID can be typed by hand. Both should be part of the routine rather than an exception you handle case by case, and it is worth telling a cover teacher about the fallback in the same message as the link. For other setups, including a shared tablet, see QR attendance for people without smartphones.

How do I get attendance out of Sheets and into our SIS?

Most schools already have a student information system, and the register that counts legally is the one in there. Treat the Sheet as the capture layer and the SIS as the system of record, rather than trying to replace one with the other. That framing keeps the project small enough to actually finish.

The practical route is a pivot table over the raw scan log, keyed on student ID and date, exported as CSV and imported through whatever bulk attendance import your SIS already supports. Almost all of them have one, because they were built for the era of scanning paper marksheets. Keep the student ID column identical to the identifier the SIS uses; a mismatch there is the reason most imports fail, and it is far cheaper to fix at printing time than at import time.

If you want the export to be near-automatic, a small Apps Script on a time trigger can write the pivot to a CSV in Drive on a schedule. That is free, it lives in the same Google account as the Sheet, and it is a genuinely reasonable use of Apps Script even if you chose a dedicated scanner for the capture step. The full walk-through is in exporting QR attendance from Google Sheets to your SIS.

Can I use Excel instead of Google Sheets?

Yes for the free route, with one extra step. Google Forms keeps its responses in Google, but you can take them out whenever you like: the Responses tab downloads a CSV, and the linked Sheet downloads as an Excel workbook from File, Download, Microsoft Excel (.xlsx). Plenty of schools take the register in Google and do their termly analysis in Excel.

To be plain about our own product: QR to Sheets writes to Google Sheets only. It does not write to an Excel workbook or to OneDrive directly. The same export works, so a teacher who reports in Excel downloads the Sheet as .xlsx or CSV when they need it while the live register keeps filling in Google Sheets. If your school blocks Google accounts entirely, check that before you print a single code, because setting up the link needs one.

Can I see each student's attendance history?

Yes, and the one-row-per-scan log is what makes it easy. Every scan is a row with a timestamp and a student ID, so one student's history is a filter on their ID: every date they were scanned, in order, with the time of each scan.

For totals, COUNTIFS counts sessions attended per student over any date range, for example =COUNTIFS(B:B, "S1042", A:A, ">="&DATE(2026,9,1)) with timestamps in column A and student IDs in column B. A pivot table with student ID as rows and date as columns turns the whole log into a register grid where an empty cell is an absence, and dividing each student's count by the number of sessions held gives an attendance percentage.

If a student can be scanned twice in one session, count distinct days rather than rows, for example =COUNTUNIQUE(FILTER(INT(A2:A), B2:B="S1042")), so a repeat scan does not inflate the figure.

Step by step

  1. 1

    Give every student a durable QR code

    Encode the student ID, not the name. IDs are stable, unambiguous between two students with the same name, and do not need reprinting when a name changes. Print onto ID cards or lanyards, or let students keep the image on their phone.

  2. 2

    Build the attendance spreadsheet

    One row per scan is far easier to work with than one row per student per day. Columns: timestamp, student ID, class or session, and who scanned. Pivot into a register later; do not try to write the register directly.

  3. 3

    Set up the capture method

    Either a Google Form that staff paste scans into, or a scanner link that staff open on their own phone. Decide who scans: staff scanning students is far more reliable than students self-reporting.

  4. 4

    Trial with one class before rolling out

    Run one session end to end. Watch how long the queue takes, whether the codes read under the corridor lighting, and whether the timestamps line up with the period boundaries.

  5. 5

    Turn scans into a register

    Use a pivot table over the scan log, keyed on student ID and date. Keep the raw scan log immutable; build every report as a view on top of it.

Frequently asked questions

Do students need to install an app for QR attendance?+

No. With the Google Forms method they use the built-in phone camera to open a form. With a staff-scanning setup, students need nothing at all — only the member of staff scanning has a device, and they use a browser.

Is the Google Forms method good enough for a school?+

For low-stakes registers such as a club or an optional session, often yes, and it is free. For anything with a consequence attached it is weak, because it is self-reported: a student can submit on behalf of an absent friend, and there is no offline handling.

Should the QR code contain the student name or the student ID?+

The ID. It is stable, it disambiguates students with the same name, it does not need reprinting after a name change, and a lost card does not expose personal information.

How do I turn a scan log into a register?+

Keep one row per scan and never edit that log. Build the register as a pivot table over it, keyed on student ID and date. This keeps the underlying record auditable and lets you regenerate any report.

How fast is scanning a class in?+

With one member of staff scanning at the door, roughly one student per second in practice, so a class of thirty takes well under a minute. The limiting factor is usually the queue, not the scanner.

What about students who forget their code?+

Keep a manual fallback. A good scanner allows typing the ID by hand, and you should expect to use it daily. Plan for the exception rather than treating it as a failure.

What happens if a student scans their QR code twice?+

By default the scan is recorded, not refused. In QR to Sheets, a repeat of the same value within twelve hours shows an amber badge with the repeat count and "Saved anyway", and the row is still written. Deduplication is then a spreadsheet decision — a pivot table counting scans per student per day is already immune to it. A link can also be set to refuse repeats, but for a daily register that would block the next day's scan, so leave it on.

Can students use a QR code to sign in for an absent friend?+

Yes, if nobody is watching. A QR scan proves a code was presented, not who presented it. Having an adult scan each student is what prevents it in practice, because the adult sees the face while the camera reads the card. No camera-based attendance system priced for a school eliminates this on its own.

Does QR attendance work if the school wifi drops?+

With a scanner link, yes. Scans are written to the device first as a local CSV backup and retry queue, then synced when signal returns, so staff keep scanning through a dead spot. A Google Form loses a submission made with no signal outright, which is the more common failure in a corridor.

Do students need a smartphone for QR attendance?+

Not when staff do the scanning. Students need only a printed code on a card, planner, or desk label. The device requirement lands on one adult, which also avoids a register that works better for students who happen to own newer phones.

Can two members of staff scan the same class at once?+

Yes. One scanner link can be opened on any number of phones, so two doors or two form groups can run in parallel into the same Sheet. On the paid plan you are billed per registered device rather than per link or per student, so the cost is set by how many phones scan, not how many students you scan.

Will the timestamps match our school day?+

They will if the workspace timezone is set correctly. QR to Sheets writes YYYY-MM-DD HH:MM:SS in the timezone you set under admin settings, so late marks compare cleanly against period start times. A raw ISO timestamp is stored by Sheets as text, which silently breaks sorting and any formula that treats it as a time.

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