QR codes work because a camera can tell two things apart: the dark squares that carry the data and the light space around them. Everything about colouring a QR code follows from that single fact. The decoder is not looking at your brand palette; it is looking for contrast.
This is worth understanding rather than memorising, because most QR generators will let you produce a code that cannot be read and will show you a preview that looks fine on a bright monitor. The failure appears later, on a printed label, in a corridor, on somebody else's phone.
The four things that actually break a QR code
1. Inverting it
Light modules on a dark background is the most common mistake because it looks the most designed. The QR specification assumes dark-on-light. Some dedicated scanners cope, and some phone cameras do too, but many do not, and you have no way of knowing which phone the person holding it will have.
2. Not enough contrast
Two colours can both be non-white and still fail, if they are close in lightness. A navy code on a mid-grey background, or a gold code on cream, gives the camera almost nothing to separate. The practical test is to convert your pair to greyscale: if you struggle to tell them apart, the camera will too.
3. Losing the quiet zone
The margin around a QR code is not decoration, it is part of the specification. It tells the decoder where the code ends. Designers crop it to fit a label or butt it against a coloured band, and the code stops working for a reason that is invisible in the artwork.
4. Printing it too small, or on the wrong surface
A code needs enough physical size for the camera to resolve individual modules at the distance it will be scanned. Glossy laminate under a ceiling light produces a reflection that hides part of the code. Neither is a colour problem, but both get blamed on colour.
The numbers we use, and why
In QR to Sheets, every generated code passes through a check before it is drawn. The module colour has to sit below roughly 40 percent perceived lightness and the background above roughly 75 percent. Those are not arbitrary: they are conservative enough that a mid-range phone in ordinary indoor light still decodes reliably, which is the condition that actually matters.
If your pair fails the check, the code is not generated wrong and it is not silently accepted either. The colours are corrected to the nearest safe pair, and the interface tells you it happened and which colours were used, so you can adjust and keep more of your brand than the fallback would.
The orientation is corrected first. If you pick white modules on navy, you get navy modules on white rather than an error, because that is almost always what was intended and it preserves both of your colours.
| Capability | A typical QR generator | QR to Sheets |
|---|---|---|
| Lets you pick any two colours | Yes | Yes |
| Warns you when the pair will not scan | Usually not | Yes, and it names the colours it used instead |
| Corrects an inverted pair rather than failing | No | Yes — orientation is swapped, both colours kept |
| Applies the same rule to bulk and automated codes | N/A | Yes, including emailed and per-submission codes |
| Codes can be regenerated if your brand changes | Depends | Yes; codes are generated on demand, not stored as images |
Disclosure: this guide is published by QR to Sheets. The rules in it are properties of the QR format and apply whatever tool you use; the right-hand column above is a vendor claim about our own implementation.
Where QR to Sheets generates codes
There are several places, and the same colour rule applies to all of them, which matters because some of these codes are produced without a human looking at them first.
- The QR generator, for one code at a time, with dot and corner styling. Encodes a link, plain text, an email address, a phone number or wifi credentials.
- The free bulk generator, for up to 500 codes at once from a pasted list or a spreadsheet column, laid out for Avery label sheets. No account needed.
- Scanner links, where the link itself becomes a QR so an admin working at a desk can hand the scanner to a phone.
- The Events add-on, where every guest on your list is emailed their own code before the event.
- Forms, where every submission generates that person's own check-in code, sent in their confirmation email.
The last two are the reason the colour check is enforced at generation rather than left to a designer's eye. Nobody reviews an emailed code before it goes out; if a brand palette were allowed through unchecked, the first person to find out would be a guest at a door.
A five-minute test that catches almost everything
- Generate one code with your chosen colours and print it at the size you will actually use.
- Scan it with an iPhone and with an Android phone, using the built-in camera rather than a scanning app — that is what your audience will use.
- Scan from the real distance: arm's length for a badge, further for a wall poster.
- Try it in the real lighting, including any glossy finish or laminate.
- If any of those fail, darken the module colour or lighten the background before you print the batch.
If you are printing hundreds of labels, test one full sheet rather than one code. Printer colour drift across a sheet is real, and a code at the edge can come out lighter than the one you tested in the middle.
When to give up on colour
Black on white is the most reliable QR code there is, and for anything operational — warehouse shelves, asset tags, site sign-in — that reliability is worth more than the branding. Save the coloured codes for print work where someone is looking at the design, and use plain black on white where a worker in a hurry needs it to read first time.
Step by step
- 1
Start from the darker of your two brand colours
Whichever of your colours is darker becomes the modules. If both are light, or both are dark, only one of them can be used and the other has to give way to white or near-black.
- 2
Keep the background genuinely light
Near-white is the safe choice. A pale tint of your brand colour usually survives; a mid-tone almost never does, because the camera needs a clear difference between module and background.
- 3
Never invert
Light modules on a dark background looks striking and fails often. Some readers handle it, most phone cameras do not, and you cannot control which phone a guest or worker will use.
- 4
Leave the quiet zone alone
The blank margin around the code is part of the code. Cropping it tight to fit a label is one of the most common reasons a printed code stops working.
- 5
Print one and test it before you print the batch
Test on two phones, one iPhone and one Android, at the distance and lighting the code will actually be used in. A code that scans on your desk under a lamp can fail on a wall in daylight.
Frequently asked questions
Can a QR code be any colour?+
The modules and the background can both be coloured, but the modules must be clearly darker than the background. In practice that means one of your brand colours can usually be used for the modules while the background stays near-white, or a very pale tint.
Why does my coloured QR code scan on one phone but not another?+
Because decoders differ in how much contrast they tolerate. A borderline pair sits in the range where a good camera in good light succeeds and an older phone in a dim corridor fails. If a code scans inconsistently, treat it as failing — the inconsistency will not improve once it is printed.
Can I invert a QR code, with light modules on a dark background?+
You can produce one, but you should not rely on it. Many phone cameras will not decode it. QR to Sheets swaps the orientation automatically so you get the dark-on-light version of the same two colours, and tells you it did so.
Does adding a logo in the middle break the code?+
Not necessarily. QR codes carry error correction, so a small central logo can be tolerated. It becomes a problem when it covers too much of the code or overlaps the three large corner squares, which are what the decoder uses to orient itself.
How big does a printed QR code need to be?+
A rough rule is that the code should be at least one tenth of the distance it will be scanned from — a code read at arm's length, about 30 cm, wants to be around 3 cm across. Bigger is safer, and a code that encodes more data needs more size because its modules are smaller.
Do I need to regenerate my codes if we change brand colours?+
In QR to Sheets the codes are generated on demand rather than stored as images, so changing the colour settings changes what is produced next. Codes already printed keep working, because the colour is only about readability — the data encoded in them has not changed.