Skip to content

Use cases

Which vCard fields belong in a contact QR code

The vCard fields worth encoding in a contact QR code, why version 3.0 still scans more reliably than 4.0, and the point where a URL beats a vCard outright.

by Kyllian 7 min read

You hand someone a card, they scan the code, and their phone offers to save a contact called “Untitled” with a phone number and nothing else. Or the scan produces a wall of text and no offer to save anything at all. Both failures come from the same place: what went into the vCard, and in what order.

The code holds a whole file

A contact QR code does not link to a contact — it contains one. The payload is a complete vCard, the same text format an address book exports, newlines and all. Nothing is fetched, nothing expires, and nothing can be corrected after the cards come back from the printer.

That last point is the one that decides most of what follows.

Version 3.0 or 4.0

vCard 3.0 (RFC 2426)vCard 4.0 (RFC 6350)
Phone valuePlain text: +441179460112URI: tel:+441179460112
Type parametersTYPE=WORK,VOICEReworked; PREF becomes a parameter
Character setUTF-8 in practice, CHARSET sometimes declaredUTF-8 mandatory, no CHARSET
Phone importer supportUniversalUneven

Use 3.0. It is not the newer standard and it is not the tidier one, but it is the one that every phone, every desktop address book and every CRM importer handles without argument. A card is printed once and scanned by strangers on devices you will never see; that is the wrong place to be early.

The field set worth encoding

FieldPurposeSkip it when
NStructured name: family, given, additional, prefix, suffixNever — it is required
FNThe display name, exactly as it should appearNever — also required in 3.0
ORGOrganisation, optionally with a department after a semicolonPersonal card
TITLEJob titleIt changes more often than the card is reprinted
TELNumber in international + formatYou do not want cold calls
EMAILOne address, the one you monitor
URLOne link
ADRStructured postal address, seven componentsNobody will ever post you anything

Everything else — NOTE, BDAY, a second EMAIL, three phone numbers, social profiles — costs modules and buys almost nothing. ADR alone is usually a quarter of the payload.

Write phone numbers in full international form. +441179460112 dials from anywhere; 0117 946 0112 dials from one country and confuses the importer’s parser in every other.

A worked example

BEGIN:VCARD
VERSION:3.0
N:Hartley;Ruth;;;
FN:Ruth Hartley
ORG:Northgate Design Ltd
TITLE:Studio Director
TEL;TYPE=WORK,VOICE:+441179460112
TEL;TYPE=CELL:+447700900412
EMAIL;TYPE=WORK:ruth.hartley@northgate-design.co.uk
URL:https://northgate-design.co.uk
ADR;TYPE=WORK:;;12 Colston Yard;Bristol;;BS1 5BD;United Kingdom
END:VCARD

N takes five components in a fixed order: family name, given name, additional names, honorific prefixes, honorific suffixes. Empty ones still need their semicolons, which is why the line ends Hartley;Ruth;;;.

ADR takes seven, also positional: post office box, extended address, street, locality, region, postal code, country. The two leading semicolons above are empty PO box and extended address fields, and dropping them shifts the street into the wrong slot — a classic cause of contacts that import with the house number in the “PO Box” line.

Escaping and folding

Inside a value, three characters must be backslash-escaped: comma, semicolon and backslash itself. A line break within a value is written \n. So a company called Hartley, Payne & Co. is encoded ORG:Hartley\, Payne & Co. — the comma escaped, the ampersand left alone.

The specification also asks for lines longer than 75 octets to be folded, with each continuation line beginning with a single space. Do not do it here. Folding adds bytes, and a meaningful number of QR contact parsers reassemble folded lines badly and leave you with a stray leading space in the middle of an email address. Keep every line on one line. Likewise, the specification wants CRLF line endings; most parsers accept a bare newline, and if a card is failing on one particular phone this is worth ruling out.

The size problem, in millimetres

The example above is 327 characters. At error correction level M that is a version 13 symbol — 69 modules across. Applying the 0.4 mm-per-module floor for offset and digital print from the print size guide:

  • 69 modules × 0.4 mm ≈ 2.8 cm

The tenth-of-the-distance rule would have suggested 2 cm for something read at arm’s length. The module floor overtakes it, and 2.8 cm is now the number that matters. On an 85 × 55 mm business card, that code is half the height of the card before you add the quiet zone.

Trim it back to name, organisation, one number and one email — 162 characters — and you get a version 9 symbol, 53 modules, about 2.1 cm. Every field you cut buys back print size or scanning distance. Raising error correction has the opposite effect: the same 327-character card at level Q is 81 modules and a 3.2 cm floor. On a card that will not be folded or covered by a logo, M is the right level — the FAQ sets out what each of L, M, Q and H buys you.

And never embed a PHOTO. A QR code holds 2,953 bytes at absolute maximum, at level L, at version 40. A base64 thumbnail alone exceeds that.

MECARD, when you need it smaller

MECARD is the compact alternative — one line, semicolon-separated, originally from Japanese handsets:

MECARD:N:Hartley,Ruth;TEL:+447700900412;EMAIL:ruth.hartley@northgate-design.co.uk;URL:https://northgate-design.co.uk;;

That is 118 characters, version 7 at level M, 45 modules — a 1.8 cm floor against the vCard’s 2.8 cm. The name is Family,Given, and like the WiFi format it terminates with two semicolons.

The trade-off is real, and it has two halves. MECARD has no field for organisation and none for job title; for a personal contact that is no loss, but on a business card dropping the company name from the contact record is usually the wrong economy, and you have bought a centimetre at the price of the thing the card exists to communicate.

The other half is support. Android and Google Lens parse MECARD reliably and offer to save the contact. On iOS it depends on the app: some show the string as plain text and offer nothing, which leaves the person holding your card looking at MECARD:N:Hartley,Ruth;… and no way to act on it. For a card that will be handed to strangers on unknown phones, that alone is usually enough to keep the vCard. For local use where you know the room, MECARD is a legitimate saving.

The pragmatic answer

Around 300 characters is the comfortable ceiling for a business card: up to there the symbol stays under about 3 cm and remains a design element you can live with. Past it the balance tips, and past roughly 500 the code demands more space than a card has. At that point, encode a URL to a contact page instead:

https://northgate-design.co.uk/ruth

Thirty-five characters, version 3, 29 modules, a floor of about 1.2 cm. It scans from further away at any given size, it survives a scuffed card, and the page behind it can offer a proper .vcf download alongside a photo, a map and a booking link. It can also be corrected when the job title changes, which no printed vCard can.

The cost is that it needs a working URL forever. A code on a card outlives the job it was printed for, so put the page on a domain you control and will keep, not on a shortener you rent.

PayloadCharactersModules at MPrint floor
Full vCard 3.0327692.8 cm
Trimmed vCard162532.1 cm
MECARD118451.8 cm
URL to a contact page35291.2 cm

You do not have to assemble any of this by hand. The generator has a vCard content type with separate inputs for name, organisation, title, phone, email, website and address, and it builds the positional semicolons in N and ADR, the escaping and the line endings for you — which is to say, the three things this page has just spent several sections warning about. Make a vCard QR code walks through it field by field and shows the exact string each combination produces; if you already have a vCard from an address book export, paste it into the plain text input instead.

Whichever you pick, export SVG for print because it stays sharp at any size, and scan the printed proof — not the screen — before the run goes ahead.

Frequently asked

Should a contact QR code use vCard 3.0 or 4.0?
Use 3.0. Both iOS and Android import it without complaint, and so does every desktop address book worth the name. Version 4.0 changed the telephone field to a URI value and reworked the type parameters, and support for those changes across phone contact importers is still uneven enough that 3.0 is the safer thing to print.
How much data fits in a QR code before it stops scanning?
A QR symbol tops out at 2,953 bytes at error correction level L, but that is a 177-module monster nobody can print usefully. The practical ceiling for a business card is a few hundred characters, because module count drives minimum print size: every extra field makes each module smaller at a fixed physical size.
Can I put a photo in a vCard QR code?
In theory yes, in practice no. A base64-encoded photo runs to tens of kilobytes and a QR code holds at most 2,953 bytes in total. Even a heavily compressed thumbnail pushes the symbol beyond anything printable at business-card size. Encode a link to a contact page if the photo matters.
What is MECARD and how is it different from vCard?
MECARD is a compact contact format originally from Japanese handsets, written as one line with semicolon-separated keys. It encodes roughly a third smaller than the equivalent vCard, but it has no field for organisation or job title, so it suits a personal contact far better than a business one.

Make the code this guide describes

The generator runs in your browser — add a logo, pick colours, tag the link with UTM parameters and download a PNG or SVG. No account, no watermark.

Keep reading

← All guides