The vCard QR Code Format
A contact QR code is a whole vCard file compressed into a printed square. That is why it works offline, and also why it is the payload most likely to produce a code nobody can scan.
The template
This is a complete, working vCard 3.0. Everything a phone will reliably import is here; anything not on this list is a gamble.
BEGIN:VCARD
VERSION:3.0
N:Llovet;Manuel;;;
FN:Manuel Llovet
ORG:Northgate Design
TITLE:Studio Director
TEL;TYPE=CELL:+34600123456
TEL;TYPE=WORK,VOICE:+34910123456
EMAIL;TYPE=INTERNET:manuel@example.com
URL:https://example.com
ADR;TYPE=WORK:;;Carrer Gran 14;Barcelona;;08001;Spain
END:VCARD
Version 3.0, not 4.0. Version 4 is the newer standard and is worse supported by the contact importers built into phones; 3.0 is what every device has handled for over a decade. This is one of the rare cases where the older spec is the right answer.
Field by field
| Field | Required | Format | Notes |
|---|---|---|---|
N | Yes | Surname;Given;Middle;Prefix;Suffix | Five parts, semicolon separated, trailing ones empty |
FN | Yes | Free text | The display name. Put it the way people read it |
ORG | No | Company;Department | Department is optional |
TITLE | No | Free text | Job title |
TEL | No | TYPE=CELL / WORK / HOME | Repeatable. Always use +country format |
EMAIL | No | TYPE=INTERNET | Repeatable |
URL | No | Full URL with scheme | Repeatable |
ADR | No | 7 parts, see below | Two leading empty parts are normal |
NOTE | No | Free text | Costs a lot of bytes |
The ADR line catches everyone. It has seven semicolon-separated components in a fixed order:
ADR;TYPE=WORK:PO box;extended;street;city;region;postcode;country
The first two are almost always empty, which is why a correct address line starts with two semicolons. Leaving them out shifts every other component one place to the left, and the phone imports the street as a PO box.
+34600123456, no spaces, no parentheses. A number saved without a country code will fail the moment the contact travels, and a QR code on a business card is precisely a contact that travels.Escaping, and the line that breaks it
Three characters are structural inside a vCard value and must be escaped with a backslash when they appear in your data:
\ , ;
So a company called Smith, Jones & Co. is written ORG:Smith\, Jones & Co. A line break inside a NOTE is written as the two characters \n, not an actual newline.
The bigger structural rule: every property must be on its own line. The vCard specification wants CRLF line endings, and while nearly all phone importers accept a plain newline, none of them accept two properties run together on one line. If a contact code imports a name and nothing else, this is almost always why.
MECARD, the compact alternative
MECARD is a much terser format that predates the general use of vCard in QR codes:
MECARD:N:Llovet,Manuel;TEL:+34600123456;EMAIL:manuel@example.com;URL:https://example.com;;
Note the differences: the name is Surname,Given with a comma rather than a semicolon, fields are separated by semicolons, and the record ends with two semicolons, the same convention as the WiFi format.
| vCard 3.0 | MECARD | |
|---|---|---|
| Typical size | 250–400 bytes | 80–150 bytes |
| Resulting symbol | Version 10–14 | Version 6–8 |
| iPhone support | Reliable | Generally works, less predictable |
| Android support | Reliable | Reliable |
| Fields available | Full contact record | Name, phone, email, URL, address, birthday |
MECARD produces a dramatically smaller and therefore more scannable code. The trade is that vCard is the one every importer has handled for years. For a business card that has to work for everyone, vCard 3.0 with only the fields you need is the safer choice; for an asset tag or a badge where size is critical and the audience is known, MECARD is worth considering.
The size problem, and what to do about it
The template above is about 300 bytes. At error-correction level M that needs a version 13 symbol — 69×69 modules. Printed at 20 mm on a business card, each module is 0.29 mm, which is below the 0.5 mm floor our resolution tests found for reliable phone scanning.
In other words: a full vCard on a standard business card is usually too dense to scan. This is the most common failure in the whole category, and it is invisible until the cards are printed.
Three ways out, in order of how well they work:
- Point at a contact page instead. Encode
example.com/manuel— twenty-odd characters, a version 2 symbol, coarse and robust — and put a "download contact" button on the page serving a.vcffile. This is what most people should do. - Cut the vCard down. Name, one phone, one email, one URL. Drop
ADR,NOTE,TITLEand the second phone number and you can halve the payload. - Make the code bigger. 25 mm rather than 18 mm makes a real difference, if the card design has room.
And one thing never to do: embed a photograph. A PHOTO property with base64 image data will push the symbol to version 30 or beyond, producing a dense grey square that no phone will ever read.
QR codes for business cards works through the layout side of this.
Written by Manuel Llovet, who builds and maintains QR Code Free Forever. Published 2026-08-31, last checked 2026-09-08. Figures and measurements on this page were produced for this site; the method is described in each caption.