You printed two hundred business cards and the code on the back does not scan. It worked on your monitor. It worked when you held your own phone up to it. Now it fails in front of a client, and the cards are already paid for.
The cause is nearly always the same: too much data crammed into one symbol. Fixing it means removing fields, not buying a better generator.
The vcard qr code size limit nobody mentions
A QR symbol has a hard ceiling. At its largest size it holds 2,953 bytes with the loosest error correction, and 1,273 with the strictest. We checked those numbers against a real encoder rather than copying them from a spec sheet.
You will see 4,296 quoted everywhere. That figure is for alphanumeric mode, which only covers capital letters, digits and a few symbols. A contact card contains lowercase letters and punctuation, so the encoder switches to byte mode and the real ceiling is much lower.
We managed to make this mistake in our own test suite. The test filled a code with capital As, the encoder quietly picked the roomier mode, and the check passed when it should have failed. If it can catch us while we are specifically looking for it, the number in a blog post is worth doubting.
Why a photo guarantees failure
Here is the measurement that ends the argument. A full contact card with name, title, company, mobile, two emails, a website and a postal address came to 353 bytes.
The same card with a small headshot came to 41,744 bytes.
That is roughly eighteen times what the largest symbol can hold. No error-correction setting, print size or generator rescues it, because a photo is stored as text inside the card and there is simply nowhere to put it. Keep the photo in the file you email and leave it out of anything you print. Our vCard QR code generator drops it automatically and shows you the byte count as you type.
What a qr code too dense to scan actually looks like
More data does not make the code bigger. It makes the blocks inside it smaller.
A code carrying 350 bytes has chunky squares a camera resolves instantly. The same physical square carrying 2,000 bytes is a fine grid, and a phone camera at arm’s length in ordinary indoor light struggles to separate one block from the next.
This is why the failure is so inconsistent. Good light, a steady hand and a recent phone will read a dense code. A quick scan across a table in a dim room will not, and that is the situation the code actually has to work in.
Our rule with clients: stay under three quarters of the ceiling for anything printed. Below that, ordinary conditions stop mattering.
Why does my qr code fail on Android but work on an iPhone?
Usually it is not the operating system at all. Android spans an enormous range of hardware, from current flagships to five-year-old budget handsets with slow sensors and weak autofocus.
A dense code is exactly the thing that separates them. The iPhone in your pocket is probably newer than the median Android device that will meet your card.
There is one real software difference worth knowing. Some scanner apps display decoded text rather than recognising it as a contact and offering to save it. That looks like a broken code and is nothing of the sort — the built-in camera apps on both platforms handle it properly.
Trimming the card down to something that works
Cut in this order, and stop as soon as you are under the ceiling.
- The photo. Tens of thousands of bytes. Nothing else comes close.
- Notes. Free text is invisible on a card and expensive in a code.
- Postal address. Seven components, and rarely the reason anyone scans.
- Second and third numbers. One reachable number beats three unreachable ones.
- Social profiles. They travel as extension fields that most address books discard anyway.
Name, mobile, email and company is the version we recommend. It lands near 200 bytes, scans in poor light, and contains everything someone needs to reach you. If you want to understand which fields cost what, writing a vCard by hand makes the structure obvious.
Print settings that decide whether it works
Export SVG rather than PNG for anything going to a printer. An SVG is drawn from instructions instead of pixels, so it stays sharp at any size, and a blurry code is the second most common failure after density.
Leave the quiet margin alone. The specification asks for clear space four blocks wide on all sides, and designers trim it to fit a layout constantly. Scanners use that empty band to find the pattern.
Keep it dark on light. Inverted codes fail outright on a lot of older scanners, and low-contrast colour schemes that look elegant on screen stop working in a dim room.
Test it properly before you commit
Print one copy. Not a screenshot on a monitor — an actual print, on the actual paper stock.
Scan it with a phone that has never seen the code, at arm’s length, indoors, without turning on the torch. That is the real condition, and it is more demanding than anything you will do at your desk.
Then read what came back. Our QR code scanner decodes from a photo and shows the exact text a stranger’s phone receives, which is how you catch a stray line break or a truncated company name before it reaches two hundred cards.
What to do with the cards you already printed
If the code is unreadable, it is unreadable. Nothing at the scanning end fixes a symbol whose blocks are too small for the camera.
The salvage move is a slimmer code on the next run and readable printed text in the meantime. Contact details a person can type still work, which is a good argument for never letting the code replace them.
Build the replacement small, check the size meter, and print a test. For a code that lives on a screen rather than paper, the constraints are looser and worth knowing separately — we covered them in putting a contact QR code in your email signature. To rebuild the card itself, start with the vcard generator.
