QR codes for asset tags and inventory labels

Last updated: July 2026 · About 7 minutes

Asset labelling is the most common serious use of bulk QR generation. You have a register — laptops, tools, lab equipment, AV kit, furniture — and you want a code on each item that pulls up its record. The generation part is easy. The decisions around it determine whether the labels are still working in three years.

Decide what the code should point at

This choice is harder to change later than any other, so take it first.

Option 1: a URL into your asset system

The best option when you have a system with per-asset pages — Snipe-IT, an ITSM tool, a maintenance platform, even a shared spreadsheet with anchor links:

https://assets.example.com/asset/A-1001

Scanning opens the record directly. The risk is that the URL structure is now baked into physical labels. If you migrate systems, every label points at a dead address.

Option 2: a URL on a domain you control

The safer version of option 1. Encode a short URL on your own domain and redirect from there:

https://example.com/a/A-1001

A migration then means updating one redirect rule instead of reprinting several hundred labels. This costs nothing extra to set up now and is the single best decision you can make about a QR asset programme.

It also produces a shorter URL, which means fewer modules in the pattern, which means chunkier squares that scan more reliably at small sizes.

Option 3: plain text

Encoding just the asset ID with no URL works if scanning happens inside an app that expects a bare identifier. It is robust — nothing to break — but a phone camera will simply display the text, so it is no use to anyone without your app.

Build the CSV

Export your asset register with at least the ID and the URL. If your register only holds IDs, build the URL with a formula: ="https://example.com/a/"&A2.

url,asset_id,location
https://example.com/a/A-1001,A-1001,Workshop
https://example.com/a/A-1002,A-1002,Workshop
https://example.com/a/A-1003,A-1003,Lab 2

Upload it to the generator, select url as the URL column and asset_id as the filename column. Now the image files are named after the same identifier that appears in your register and on the equipment itself, so reprinting a single damaged label is a matter of finding one file by name.

Do not be tempted to name files after location. Assets move. The point covered in choosing a filename column applies with particular force here: name after the thing, not after a fact about the thing.

Individual files or printed sheets?

For asset labelling, 1 QR code per image is usually correct. Asset labels almost always go through label software — Brother P-touch, Dymo, Avery templates, or a thermal printer's own tooling — and those tools want to place one image per label, found by filename.

Set codes per image above 1 only if you are printing onto sheet stock and cutting by hand. In that case leave labels switched on: a grid of unlabelled QR codes is genuinely impossible to sort out once cut, and the printed A-1001 underneath each code is what lets you match label to asset. See printing sheets of codes for the grid sizes.

Print the ID in human-readable text too

Every asset label should carry the identifier as text alongside the code. This is the most frequently skipped step and the most frequently regretted.

Reasons it matters:

If you generate labelled sheets, this comes for free — the label under each code is the asset ID. If you use label software, add a text field next to the image.

Size and materials

A 2 cm (0.8 in) code is comfortably scannable at arm's length for a short URL. Go bigger if the assets are stored high on racking, if scanning happens under poor lighting, or if the URL is long.

Materials matter more than most people expect:

Whatever you choose, keep the white quiet zone around the pattern. Do not crop tight to the black edge, and do not place the label so that the code wraps around a corner or a curved surface — a code bent around a cable or a tube will not scan.

Plan for reprints from day one

Labels get damaged, assets get added, and someone will eventually stick one on upside down. Two habits make this painless:

For new assets, generate small top-up batches with the same settings. The filenames will be consistent with the originals because they come from the same column of the same register.

Test before committing to a run

Print one label on the real material at the real size. Then scan it: in the actual storage location, under the actual lighting, at the distance someone will really stand. A code that scans perfectly on your monitor can fail on matte vinyl in a dim store cupboard.

Check the destination too, not just that the code scans. A code that resolves cleanly to a 404 is worse than no code at all, because people stop trusting the system after two or three of them.

A note on privacy

Asset registers frequently contain internal hostnames, network paths and equipment locations — precisely the kind of data that should not be pasted into an unknown web service. Generation here happens entirely in your browser: the CSV is read locally and never uploaded, which is why this tool is usable on registers that would not otherwise be allowed near an external site. See the Privacy Policy for the details.

The same reasoning argues against routing asset codes through a third-party dynamic-QR service, since every scan would then report equipment locations and timings to an outside server — static vs dynamic QR codes covers when that tradeoff is worth making and when a static code is simply the better engineering.

Open the generator