Skip to content
UseQR

QR code type

vCard QR codes — how they work

A vCard QR code stores a complete contact record — name, phones, emails, company, address, website — which the phone offers to save straight into its address book. It is the largest common payload type, so keep it lean: every extra field makes the code denser and harder to scan.

The payload

A literal vCard file, encoded as text:

BEGIN:VCARD
VERSION:3.0
N:Lovelace;Ada;;;
FN:Ada Lovelace
ORG:Analytical Engines Ltd
TITLE:Mathematician
TEL;TYPE=CELL:+14155552671
EMAIL;TYPE=WORK:ada@example.com
URL:https://example.com
END:VCARD

N is the structured name in the order family;given;middle;prefix;suffix — the semicolons are positional and must all be present even when empty. FN is the display name. Omitting FN is the most common reason a contact imports with a blank name.

3.0 versus 4.0

vCard 3.0 vCard 4.0
Phone type syntax TEL;TYPE=CELL: TEL;TYPE="cell":
Support on iOS/Android cameras universal good, not universal
Older scanner apps universal patchy

Use 3.0 unless you have a specific reason not to. The extra fields in 4.0 rarely survive the round trip into a phone address book anyway.

Escaping and folding — where it goes wrong

Inside a value, four characters must be escaped with a backslash: comma, semicolon, backslash and newline (written \n). A job title of "Director, Engineering" written unescaped splits into two values, and most address books then show only "Director".

The spec also folds lines longer than 75 octets by inserting CRLF followed by a single space. Some scanners are strict about this. UseQR folds and escapes automatically — the failure mode when hand-rolling is a contact that imports half-populated.

Size is the real constraint

A full vCard with two phones, two emails, an address, a job title and a website runs about 300–400 bytes, which is a version-11 to version-13 code — 61 to 69 modules across. Add a photo (PHOTO;ENCODING=b) and you exceed the entire capacity of a QR code; base64 image data is measured in kilobytes and the maximum payload is 2,953 bytes.

Practical rules:

  • Never embed a photo. Link to one with PHOTO;VALUE=URI:.
  • One phone number and one email unless you genuinely need more.
  • Skip the postal address on a business card — it costs ~80 bytes and is rarely used.
  • On a printed card, a vCard code should be at least 2 cm square; below that the module size falls under what a phone camera resolves at arm's length.

If you need it smaller, use MeCard, which encodes the same essentials in roughly 40% fewer bytes.

What phones do on scan

iOS shows a contact preview with an Add to Contacts option. Android offers the same via Google Contacts. Neither saves anything without confirmation. Fields the address book does not recognise are silently dropped, which is why obscure vCard properties are not worth the bytes.

FAQ

Should I use vCard 3.0 or 4.0?

Use 3.0. It is universally supported by phone cameras and older scanner apps, and the extra 4.0 properties rarely survive import into a phone address book anyway.

Why does my contact import with missing fields?

Usually unescaped commas or semicolons inside a value, or a missing FN line. Both split or blank the record. Generating the vCard rather than hand-writing it avoids this.

Can I put my photo in a vCard QR code?

No. Base64 image data runs to kilobytes and a QR code holds at most 2,953 bytes. Link to a hosted image with PHOTO;VALUE=URI: instead.

How big should a vCard QR code be printed?

At least 2 cm square on a business card. vCards are dense payloads, so a code that is small enough to look tidy is often too small for a phone camera to resolve at arm's length.

What is the difference from MeCard?

MeCard encodes the same essential fields in about 40% fewer bytes, producing a visibly less dense code. vCard carries more field types and is the richer format.

Try it — free, no signup