QR Studio Pro
Studio-grade QR codes, generated instantly.

vCard QR Codes: Put Your Contact Details on a Business Card

How contact QR codes work, why a full vCard often makes a code too dense to scan, and when to link to a contact page instead.


A vCard QR code stores your contact details directly. Someone scans it, their phone offers to create a contact, and you're in their address book without anyone typing a phone number wrong.

It's a genuinely good use of a QR code — the data is small, the action is obvious, and it works offline because everything is in the code itself.

What's actually in it

vCard is a text format standardised as RFC 6350. A minimal one looks like this:

BEGIN:VCARD
VERSION:3.0
N:Lovelace;Ada;;;
FN:Ada Lovelace
ORG:Moxu
TITLE:Founder
TEL;TYPE=CELL:+15551234567
EMAIL;TYPE=INTERNET:[email protected]
URL:https://moxu.dev
END:VCARD

Two structural details that trip up hand-rolled implementations:

Line endings must be CRLF (\r\n), not plain newlines. Some parsers — notably on iOS — are strict about this and will reject a vCard with Unix line endings.

N: and FN: are both required and different. N: is the structured name in the order Last;First;Middle;Prefix;Suffix. FN: is the formatted display name. Omitting FN: produces a contact with a blank name on several platforms.

Commas and semicolons inside values must be escaped with a backslash. An organisation called Moxu, Ltd becomes ORG:Moxu\, Ltd — otherwise the comma is read as a field separator and the value truncates. Our generator handles this automatically.

The density problem

Here's the catch nobody mentions: vCards make dense codes.

QR capacity is limited, and contact details add up fast:

What you include Length Version Modules
Name + phone 99 chars v6 41 × 41
Name, org, title, phone, email 158 chars v9 53 × 53
Above + website + address 231 chars v11 61 × 61
Above + short note 304 chars v13 69 × 69

Measured at error correction M. Bump to Q or H and each row gets worse.

Now put that on a business card. A v13 code at 2 cm square — 69 modules plus the quiet zone — gives each module about 0.26 mm, well under the ~0.4 mm floor for reliable printing. It will look fine on screen and fail in people's hands.

This is the most common reason business card QR codes don't work. The designer sized the code to fit the layout, and the payload silently outgrew it.

Two ways to fix it

Option 1: Trim the vCard. Include only what you need — name, one phone number, one email, company. Drop the address, the note, the second phone number, the fax number. Going from 304 to 158 characters takes you from v13 to v9, and each module gets 26% larger at the same printed size.

Option 2: Link to a contact page instead. Encode moxu.dev/ada — a short URL pointing at a page with a "Save contact" button that serves a .vcf file.

That's 12 characters, giving you a v1 code with 21 × 21 modules. At 2 cm square that's 0.69 mm per module: rock solid, scannable in bad light at an angle.

You also get benefits a static vCard can't offer:

The trade-off is real, though: it needs an internet connection, and the page must stay online. A static vCard works forever, offline, with no dependency on anything you have to maintain.

My recommendation: for a business card, link to a contact page. For a conference badge, a shop window, or anywhere connectivity is unreliable, use a trimmed static vCard.

Sizing it

If you are going static, size it deliberately:

  1. Generate the code and read the version from our live readout.
  2. Calculate modules: version × 4 + 17, then add 8 for the quiet zone.
  3. Multiply by your target module size — 0.6 mm for reliable print.

A v9 vCard: (9 × 4 + 17) + 8 = 61 modules × 0.6 mm = 37 mm.

That's 3.7 cm — larger than most business card designs allow for. Which is precisely why linking to a contact page usually wins.

Full detail in the print size guide.

Practical tips

Use international phone format. +44 7700 900123, not 07700 900123. A saved contact with a local-format number fails when the person travels or calls from abroad.

Test the actual save. Scan it, save the contact, then open it. Check the name is right way round, the number dials, and the email is correct. Character escaping bugs show up here, not in the scan.

Test on both platforms. iOS and Android present vCards differently and have different tolerances for malformed input.

Print in vector. Business cards are small and detail matters — SVG, not PNG.

Error correction M is right here. Business cards live in wallets and get scuffed, which argues for Q — but the density penalty is severe at this size. M plus a physically larger code beats Q plus a smaller one.


Build a contact code in the studio — fill in the fields and watch the version number as you add details. If it climbs past v10, consider linking to a contact page instead.

Make a QR code now
Free, no sign-up, unlimited previews.
Open the studio