QR code asset tags for inventory: identity first

2026-09-07

Two laptops, same model, same configuration, bought in the same week. One has an open repair ticket against it and the other does not. If both carry the same QR code, the tags are decoration: they tell you what you could already learn by looking at the machine.

Identity is the whole job of an asset tag, and it is where most inventory projects go wrong before the first label is applied. Everything else, what to encode, what to print beside the code, which stock to buy, follows from getting that part right.

One code per object, never one per model

Give every physical unit its own code, even when fifty of them came out of the same box. A school tagging 300 Chromebooks needs 300 different codes, not one code for "Chromebook, 11 inch, 2025 intake". The unique code is what lets a scan answer the questions that matter: this one, the one that lives in room 4, the one that came back from repair in March, the one with fourteen months of warranty left.

Tie each code to the manufacturer serial number in your records, and do it at the moment you apply the label. Serials are the identity that outlives your tagging scheme. Labels peel, adhesive fails, systems get replaced, and the number etched into the case is what lets you rebuild the mapping later without touching every device twice.

Do it as one motion per object: scan the new tag, capture the serial, stick the label on, move to the next. Splitting that into three passes across a stockroom reliably produces tagged equipment that appears nowhere in the register, which is worse than no tags at all, because now the count looks complete.

Encode a link, not a bare identifier

A code carrying the plain text ASSET-00184 is a dead end for whoever scans it. iOS shows the string and offers to copy it. Android offers to search the web for it. Neither opens a record, so the technician standing at the rack still has to go and look the thing up by hand, which is the work the tag was supposed to remove.

Encode a URL with the identifier in it instead, and the scan lands on the asset itself: model, serial, purchase date, warranty end, the manual, a button to report a fault. For a small team the far end can be a spreadsheet row or an Airtable view. What matters is that one stable URL exists per asset.

Keep that URL short, because on a small tag every character costs resolution. A 27 character link encodes as a 29 by 29 module grid at error correction level M. Push the correction level up to H, which is sensible on anything that gets handled or scuffed, and the same link needs 33 by 33. Add another 30 characters of tracking junk and you are at 41 modules across, on a label the size of a postage stamp.

Two decisions about the identifier itself. If the record behind it is public, sequential numbers let anyone who scans one tag walk your entire estate by editing the digits, so randomise the code or put the record behind a login. And point the tag at a redirect you control rather than directly at whichever system currently holds the data, because a label glued to a forklift may well outlast three inventory tools. Static and dynamic codes covers that distinction properly.

printed once on paper everqr.io/r/kmBntbr the redirect you control spring-menu.pdf autumn-menu.pdf swap
The printed code never changes. Only the far end does.

Print the number under the code

Every tag should carry its identifier as human readable text as well. The reasons show up on the bad days: a label scuffed past scanning, a phone with a dead battery, an auditor working from a paper sheet, someone reading the number down a phone line to the service desk, an insurance claim on equipment that no longer exists to be scanned.

Design the identifier so it can be read aloud without ambiguity. Drop the characters that collide in a sans serif face at 6 point: 0 and O, 1 and I and l, 5 and S, 8 and B. A 24 character alphabet or plain digits removes the argument entirely. Group long numbers in blocks of four, the way card numbers are grouped, because people transcribe blocks accurately and twelve unbroken characters badly.

On anything that leaves the building, add the organisation name and a return line. A tool with a code and nothing else looks like scrap; a tool with a name on it gets handed back.

Match the label to where the object lives

Matte white polyester with a permanent acrylic adhesive is the sane default indoors. It takes a QR code cleanly, does not glare under strip lighting, and survives handling. Two numbers to respect: acrylic adhesives typically hold from -40C to 150C, and they reach full bond strength after 24 to 72 hours, not immediately, so an hour after application is the wrong moment to test one by picking at a corner.

Outdoors, in heat, or around solvents, move to anodised aluminium plates or laser marked metal, which cost more per unit and stop being a recurring problem. For anything handled daily, specify an overlaminate over the printed face; abrasion is what kills tags in workshops, not weather.

Awkward surfaces need a different answer rather than more adhesive. Powder coated steel, polypropylene bins and other low energy plastics shed standard labels within weeks, so use a conformable face stock rated for them or a tie on tag. Curvature is the other trap: wrap a code around a cylinder narrower than about 5 cm and the modules at the far edge compress out of readability at any realistic angle. Use a smaller code on a flag tag that stands off the surface instead.

If you are printing tags yourself, use thermal transfer with a resin ribbon rather than direct thermal, which darkens with heat and fades in sunlight within months. Give each module at least four printer dots. On a 300 dpi printer a dot is about 0.085 mm, so the smallest safe module is roughly 0.34 mm, which puts a 33 module code at about 12 mm square as an absolute floor and 20 mm as a size that still scans once the tag is scratched. The wider pre-press rules on size, margin and contrast apply here too.

Then pick one position and keep it. Same face, same corner, on every unit of the same type. An audit where the tag is always in the top right of the rear panel is twice as fast as one where somebody has to turn each machine over looking for it.

Counting 300 things in an afternoon

Tag the places as well as the objects. A code on the door of each room, the end of each rack, the front of each shelf, means an audit becomes: scan the location, then scan everything in it. The location scan gives every following scan its context, which is what turns a list of assets into a list of assets that are where they should be.

Be realistic about speed. A phone camera scan that opens a page, loads it, and returns to the camera takes something like five to eight seconds per item once the walking is included. That is 25 to 40 minutes for 300 assets, which is fine annually and painful weekly. If you are counting often, a Bluetooth 2D imager in keyboard mode reads a tag in under a second and types the identifier into whatever field has focus, or use a scanning mode that queues codes locally and uploads the batch at the end.

Whichever you use, decide in advance what a scan means. Confirming presence, moving an asset to a new location and starting a repair are three different actions, and an audit that records all scans as one undifferentiated event leaves you with a timestamped list that answers nothing.

EverQR generates codes in bulk with a unique short link each, all repointable later, so the labels you glue on this month keep working when the system behind them changes. You can make the first one free and print a test tag before committing to a run.

Make a QR code that never dies

Free, no account, editable after printing, and it will never expire on you.

Create a free QR code

More guides: Restaurant menu QR codes that actually get scanned · How to see QR code scans in Google Analytics · Print-safe QR codes: sizes, quiet zones, and testing before the big run