This is the opposite direction from scanning: you have a list of items, people or locations in a Google Sheet, and you want a QR code for each one. There are three practical methods, and which is right depends entirely on whether you need the codes on screen, as files, or on a sheet of labels.
We make a free tool for the third case, which is disclosed below where it is relevant. The first two methods involve no products at all.
Method 1: the IMAGE formula, entirely inside Sheets
Google Sheets can render a QR code in a cell with a single formula, using a public chart endpoint that returns an image. Put your value in A2 and this in B2:
- =IMAGE("https://api.qrserver.com/v1/create-qr-code/?size=150x150&data=" & ENCODEURL(A2))
- Fill the formula down the column and every row gets its own code.
- ENCODEURL matters — without it, spaces, ampersands and slashes break the request.
- Codes update automatically when the cell value changes, which is genuinely useful.
The honest limitations: these are live images fetched from a third-party service, so they need a network connection to display, they disappear if that service changes, and the values in your column are being sent to it. They also cannot be exported as individual image files, and printing them means printing the spreadsheet.
Do not use this method for anything confidential. Every value in the column is sent to a third-party URL as a query parameter. For internal asset IDs that is usually fine; for names or anything sensitive it is not.
One warning about older tutorials, because most of the guides ranking for this question are broken. Nearly all of them tell you to use chart.googleapis.com — Google Image Charts, with cht=qr. That service was turned off in March 2019 and the endpoint now returns a 404, so the formula produces a permanently empty cell. If you have copied a formula containing chart.googleapis.com and nothing appears, the formula is not wrong and neither is your sheet; the service behind it no longer exists. Any endpoint that still returns an image works the same way in the formula above.
Method 2: Apps Script, for files and full control
A short Apps Script can loop your column, fetch or generate a code per row, and either insert it into the sheet or save PNGs to a Drive folder. Free, no third-party dependency if you use a local library, and completely yours.
- Produces real image files you can drop into labels, emails or documents.
- You control size, error-correction level and quiet-zone margin.
- Runs on a schedule, so a growing list can generate codes automatically.
- It is code you now maintain, and Apps Script quotas apply to large batches.
Method 3: a bulk generator with printable labels
This is the case we built a free tool for, so treat this section as interested. If what you actually want is a sheet of labels to stick on things, neither method above gets you there without a lot of manual layout work.
The tool at qrtosheets.com/tools/bulk-qr-codes takes a pasted list or a column copied from Google Sheets, generates up to 500 codes, and lays them out on print-ready label grids matching Avery L7160/5160 and L7165/5163 stock. It runs entirely in the browser, so the list never leaves the device, and there is no account and no watermark.
- Free with no signup, and no email required.
- Print layouts in millimetres with an 18mm minimum, so printed codes stay scannable.
- Nothing is uploaded — relevant if your values are internal identifiers.
- It is one-directional: it makes codes, it does not read them back.
What to encode
- Short internal IDs, not descriptions. Descriptions go stale the moment an item is repurposed.
- A short ID prints smaller and scans faster and more reliably than a long string.
- A URL only if the person scanning needs to land somewhere. Otherwise it is wasted density.
- Never encode personal names on anything that will be stuck to an object and left in public.
- If you might migrate to a real asset system later, IDs port cleanly. Descriptions do not.
Printing so they actually scan
- 18mm square minimum on a normal office printer. Bigger if the surface curves.
- Keep the quiet zone — the white border. A code trimmed flush to its edge often will not read.
- High contrast only. Dark code on a light background; skip the brand colours here.
- Matte labels over glossy, because glare defeats a camera under ceiling lights.
- Cold, damp or greasy environments need laminated or synthetic labels, not paper.
Then what?
Generating codes is half a system. The other half is reading them back into a sheet, which is a genuinely separate problem with its own methods — Google Forms, Apps Script, phone apps, USB scanners or a hosted scanner link. If your plan is to label items and then count or track them, decide how you will scan before you print five hundred labels.
Step by step
- 1
Put the values in one clean column
One value per row, no blanks, no trailing spaces. Whatever is in the cell is exactly what the code will contain, including a stray space you cannot see.
- 2
Decide what the code should contain
A short ID scans faster and prints smaller than a long URL. Encode an ID and look up the detail in your sheet, rather than encoding a description that will go stale.
- 3
Pick a method by what you need out
Codes visible inside the sheet, codes as image files, or codes laid out on a printable label sheet. These are three different jobs and three different methods.
- 4
Print at 18mm or larger
Below roughly 18mm square, phone cameras start failing on ordinary office printers. Test one sheet before printing five hundred.
- 5
Scan a sample before committing
Print one page, scan every code on it with an actual phone. Finding an encoding problem now costs a sheet of paper; finding it after labelling 500 items costs a day.
Frequently asked questions
Can Google Sheets generate a QR code with a formula?+
Yes. =IMAGE("https://api.qrserver.com/v1/create-qr-code/?size=150x150&data=" & ENCODEURL(A2)) renders a code in the cell and updates when A2 changes. The caveats: it needs a network connection to display, it depends on a third-party service, and your cell values are sent to that service as URL parameters.
Is there a built-in QR code function in Google Sheets?+
No. There is no native QR function — every formula method calls an external image service through IMAGE(). For codes that do not depend on a third party, use Apps Script or a client-side generator.
How do I create QR codes for a whole column at once?+
Fill the IMAGE formula down for codes inside the sheet, use an Apps Script loop if you need image files, or paste the column into a bulk generator if what you want is a printable label sheet. The right choice depends on whether you need them on screen, as files, or on labels.
How small can a printed QR code be?+
About 18mm square is the practical floor on an ordinary office printer for reliable phone scanning. Go larger for curved surfaces, poor lighting, or codes that will be scanned at speed, and always keep the white quiet zone around the edge.
Should I encode an ID or a description?+
An ID. Descriptions go stale as soon as an item is repurposed, they print larger, and they scan less reliably. Encode a short ID and keep the descriptive detail in your sheet, where you can edit it.
Is it safe to use the IMAGE formula method for private data?+
No. Every value in the column is sent to a third-party service as a URL query parameter. For internal asset IDs that is normally acceptable; for names or anything sensitive, use a method that generates codes locally instead.
Can I generate codes for free without an account?+
Yes. The formula method is free, Apps Script is free, and qrtosheets.com/tools/bulk-qr-codes is free with no signup, no email and no watermark, generating up to 500 codes entirely in your browser.