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.
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 value | Plain text: +441179460112 | URI: tel:+441179460112 |
| Type parameters | TYPE=WORK,VOICE | Reworked; PREF becomes a parameter |
| Character set | UTF-8 in practice, CHARSET sometimes declared | UTF-8 mandatory, no CHARSET |
| Phone importer support | Universal | Uneven |
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
| Field | Purpose | Skip it when |
|---|---|---|
N | Structured name: family, given, additional, prefix, suffix | Never — it is required |
FN | The display name, exactly as it should appear | Never — also required in 3.0 |
ORG | Organisation, optionally with a department after a semicolon | Personal card |
TITLE | Job title | It changes more often than the card is reprinted |
TEL | Number in international + format | You do not want cold calls |
EMAIL | One address, the one you monitor | — |
URL | One link | — |
ADR | Structured postal address, seven components | Nobody 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.
| Payload | Characters | Modules at M | Print floor |
|---|---|---|---|
| Full vCard 3.0 | 327 | 69 | 2.8 cm |
| Trimmed vCard | 162 | 53 | 2.1 cm |
| MECARD | 118 | 45 | 1.8 cm |
| URL to a contact page | 35 | 29 | 1.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?
How much data fits in a QR code before it stops scanning?
Can I put a photo in a vCard QR code?
What is MECARD and how is it different from vCard?
- vcard
- contact
- format
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
-
Use cases
The WIFI: string behind a WiFi QR code
The exact WIFI: syntax a WiFi QR code encodes, which characters need escaping, why iOS and Android differ, and why the password sits there in cleartext.
-
Printing
What size should a printed QR code be?
The distance-to-size rule that decides whether a printed QR code scans, the minimum millimetres per module, and the quiet zone people keep cropping off.
-
Design
QR code error correction: what L, M, Q and H really cost you
Higher error correction is not automatically safer. Here is what each level recovers, what it costs in capacity and module size, and when to use which one.