# How to make a QR code in Google Sheets

> Put =IMAGE("https://useqr.app/api/v1/qr?data="&ENCODEURL(A2)) in a cell and a QR code for A2's contents appears. Fill the formula down and every row gets its own code, no add-on, no signup. ENCODEURL keeps special characters safe; use IMAGE mode 4 for exact pixel sizing.

Source: https://useqr.app/docs/how-to/how-to-make-a-qr-code-in-google-sheets · Last reviewed 2026-08-21 · UseQR is free forever, no signup.

---

## 1. The formula

With a URL (or any text) in `A2`, put this in `B2`:

```
=IMAGE("https://useqr.app/api/v1/qr?data="&ENCODEURL(A2))
```

A QR code for `A2`'s contents renders in the cell. That is the whole trick: the
[keyless API](/docs/developers/free-qr-code-api-no-key) returns a PNG for whatever
`data=` carries, and Sheets' `IMAGE()` displays any image URL. No add-on, no signup, no
script.

**`ENCODEURL` is not optional.** Without it, a payload containing `&`, `#`, `+` or spaces
silently truncates, `https://example.com/page?a=1&b=2` becomes a code for
`https://example.com/page?a=1`. Encoding the cell value keeps every character intact.

## 2. Fill down for a whole column

Drag the fill handle (or copy `B2` down) and every row gets its own code, a hundred
product URLs become a hundred QR codes in seconds. Make the rows taller and the column
wider to see them; by default `IMAGE()` fits the cell.

For exact sizing, use mode 4 with pixel dimensions, and ask the API for matching
resolution:

```
=IMAGE("https://useqr.app/api/v1/qr?size=300&data="&ENCODEURL(A2), 4, 150, 150)
```

## 3. Know the limits of in-cell codes

Honest caveats before you build a workflow on this:

- **Each cell is one HTTP fetch.** A thousand-row sheet makes a thousand image requests;
  Sheets throttles and shows some cells as broken images until it retries. Hundreds of
  rows: fine. Many thousands: use the bulk tool instead.
- **Screen resolution only.** In-cell images are for viewing and quick sharing. For
  printing (labels, posters, anything physical) export real files at
  [print resolution](/docs/how-to/how-to-make-a-high-resolution-qr-code) via the
  [bulk workflow](/docs/how-to/how-to-make-qr-codes-from-a-spreadsheet), which also
  decode-verifies every code.
- **You cannot right-click-save an `IMAGE()` cell** as a file. The formula is display, not
  export.
- **The sheet re-fetches images** on some reopens: a static code's *payload* never
  changes, but you need connectivity for the images to display.

## 4. Typed codes, not just URLs

The API has typed endpoints, so a sheet can build WiFi codes from an SSID
column or UPI codes from a VPA column:

```
=IMAGE("https://useqr.app/api/v1/wifi?ssid="&ENCODEURL(A2)&"&password="&ENCODEURL(B2))
```

One thing to weigh first: cell values in a formula URL are sent to the API to render.
UseQR logs nothing, but a spreadsheet of WiFi passwords leaving the sheet at all deserves
[a moment's thought](/docs/security/client-side-vs-server-side-qr-generation), for
sensitive payloads, generate client-side in the [generator](/url) or bulk tool,
where data never leaves the browser.

## 5. Verify a sample

Scan a few rendered cells straight off the monitor (that
works fine), or paste one code's URL
into the [validator](/validate). For anything headed to print, verify the exported files,
not the cells.

## Gotchas

- **Apostrophe-prefixed cells** (`'0012`) encode with the apostrophe stripped by Sheets
  before the formula sees it, usually what you want, but check serials.
- **`#ERROR!` in the cell** usually means unbalanced quotes in the formula; the URL must
  be one quoted string concatenated with `&`.
- **Automation**: for scripted generation, exports or scheduled refreshes, use
  [Apps Script](/docs/developers/generate-a-qr-code-in-google-apps-script) rather than
  formula gymnastics.

Try it with one cell now, or run the whole sheet through the [bulk tool](/bulk) when you
need files.

## FAQ

### What is the Google Sheets formula for a QR code?
=IMAGE("https://useqr.app/api/v1/qr?data="&ENCODEURL(A2)), replace A2 with the cell containing your link or text. Fill down to generate a code per row. It is free and keyless.

### Why does my Sheets QR code cut off part of the URL?
The payload was not URL-encoded, so characters like & split the API request. Wrap the cell reference in ENCODEURL() and the full value encodes correctly.

### Can I print QR codes straight from Google Sheets?
Printing the sheet prints screen-resolution images: acceptable for a quick internal list, wrong for labels or marketing. Export proper files through a bulk generator at 300 DPI instead.

### How many QR codes can a sheet hold?
Each IMAGE() cell is a separate fetch, and Sheets throttles large batches, hundreds work smoothly, thousands get flaky. Past that, generate files in bulk rather than in cells.

## Try it

- https://useqr.app/url
- https://useqr.app/bulk
- https://useqr.app/validate
