Logo
Back to Blog
Tools August 16, 2026 7 min read

Why Your vCard QR Code Will Not Scan

O

OmniWebKit Team

Tooling

Share:
Article Cover Image

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.

  1. The photo. Tens of thousands of bytes. Nothing else comes close.
  2. Notes. Free text is invisible on a card and expensive in a code.
  3. Postal address. Seven components, and rarely the reason anyone scans.
  4. Second and third numbers. One reachable number beats three unreachable ones.
  5. 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.

Frequently Asked Questions

My code scans on my phone but not on anyone else’s. Why?

+
Your phone knows what it is looking for because you generated it, and it is usually held closer under better light. Other phones get one attempt at an unfamiliar pattern. Test on a device that has never seen the code, at arm’s length, indoors.

Does adding a logo in the middle break the code?

+
It can, and the risk is hidden. A logo works by covering data and relying on error correction to rebuild it, spending the same budget that protects against scratches and folds. A logo code often scans on a clean screen and fails on paper.

Why do Android phones seem worse at this than iPhones?

+
It is rarely the operating system. Android covers a huge range of camera hardware, so a five-year-old budget phone has a slower sensor and less capable autofocus than a current flagship. Denser codes expose that gap first.

Is there a minimum print size I should use?

+
It depends on density rather than a single number, which is why a size meter beats a rule of thumb. A code carrying 350 bytes has chunky blocks that survive being small; the same code carrying 2,000 bytes has blocks a third the size. Print one and test before ordering a run.

Can I make the code smaller by shortening my name?

+
Barely, and it is the wrong lever. Names are a handful of bytes while a photo is tens of thousands, so removing the photo and any note is what actually changes the picture. Drop the postal address next.

Why does my code change every time I generate it?

+
Most generators write a revision timestamp into the card, so the data differs slightly on each run. The contact details are identical and any scanner reads the same result. It only matters if you are comparing files byte for byte.

Does a coloured or inverted QR code scan reliably?

+
Dark on light is what the specification assumes, and plenty of older scanners refuse a light-on-dark code outright. Low-contrast colour pairs fail in dim light even when they look fine on screen. Keep strong contrast if the code has a job to do.

The scanner shows text instead of offering to save a contact.

+
That is the scanning app, not your code. Built-in camera apps on iPhone and Android recognise the vCard structure and offer to create a contact, while many third-party scanners just display whatever they decoded. Nothing in the code can force the behaviour.

Should I use a URL that points to my details instead?

+
It makes the code far simpler to scan, and it costs you something real. The code now depends on a server staying up and a domain staying renewed, and every scan is logged somewhere. For a printed card meant to last, static data is the safer trade.

How much quiet space does a code need around it?

+
The specification asks for a clear margin four blocks wide on every side. Designers trim it constantly to fit a layout, and it is a genuinely common cause of failure. Scanners use that empty space to find the edges of the pattern.

Tags

#vCard#QR Codes#Contacts#Troubleshooting