Fundamentals

vCard QR codes that actually save the contact

Paolo Matias TonelloUpdated 7 min read

A vCard QR code does not point at a server — it contains the entire contact card as plain text, encoded directly into the pattern. That is exactly why it works offline with no lookup delay, and exactly why sloppy field choices make it too dense to print small and too cluttered to scan cleanly.

What a vCard QR really contains

When you scan a vCard QR code, the phone is not fetching anything from the internet. The full VCARD block — name, organisation, phone numbers, email, address, notes — is embedded in the modules of the code itself, and the camera app parses that text locally and offers to save it as a new contact. This is what makes vCard codes reliable in places with no signal: airports, basements, elevators, print materials handed out at events.

The trade-off is size. Every character in the VCARD text adds to the payload the QR code has to carry, and unlike a URL there is no way to shorten a vCard through a redirect — the whole thing has to be present in the code. A contact with a full postal address, two phone numbers, a note and a company name will produce a noticeably denser code than a plain URL of similar visual size.

vCard 3.0 vs 4.0 compatibility

vCard 4.0 is the current standard on paper, but iOS and many Android contact apps still parse 3.0 more reliably, especially for fields like TYPE parameters on phone numbers and addresses. In practice, 3.0 remains the pragmatic default for a QR code meant to be scanned by an unknown mix of devices, because the goal is universal compatibility, not spec purity.

Qreator's vCard QR generator builds 3.0 output for this reason. If you have a specific reason to need 4.0 — for example, integrating with a system that only ingests that version — test it on both a recent iPhone and a recent Android device before you commit to print, since parser support genuinely varies.

BEGIN:VCARD
VERSION:3.0
N:Alvarez;Marina;;;
FN:Marina Alvarez
ORG:Northlane Studio
TITLE:Creative Director
TEL;TYPE=CELL:+15551234567
TEL;TYPE=WORK,VOICE:+15559876543
EMAIL;TYPE=INTERNET:marina@northlanestudio.com
URL:https://northlanestudio.com
ADR;TYPE=WORK:;;220 Baker Street;Austin;TX;78701;USA
NOTE:Available Mon-Thu
END:VCARD

The field set that actually matters

Not every vCard field renders visibly, and some render differently across platforms. N and FN are both worth setting: N is the structured name (family; given) some apps use for sorting, while FN is the display name shown in previews — leaving FN blank or inconsistent with N causes some parsers to show a blank or garbled name in the save prompt.

  • N and FN — structured and display name; always set both consistently
  • ORG and TITLE — show together under the name on iOS and Android previews
  • TEL with a TYPE parameter (CELL, WORK, HOME) — lets the phone label the number correctly instead of defaulting to 'other'
  • EMAIL — usually shown directly under the name; keep to one or two addresses
  • URL — a website field; skip it if a bio link or dynamic code covers this elsewhere
  • ADR — structured address; heaviest field in character count, include only if genuinely needed
  • NOTE — free text; useful for a short tagline, costly in payload size

Phone number formatting in E.164

Format every TEL value in E.164 — a leading plus sign and country code, then the national number with no spaces or punctuation, for example +15551234567. This ensures the saved contact dials correctly regardless of which country the recipient is calling from later, which matters for any card that might end up in someone's phone while they are travelling.

Avoid mixing formatting styles between multiple TEL entries on the same card; some parsers get confused by inconsistent separators and either drop a digit or misassign the TYPE label. Keep every number in the same strict E.164 form.

A realistic field budget for a 2 x 2 cm code

At business-card scale, aim for name, one organisation line, one title, one phone number, one email. That combination typically stays in a low QR version that scans reliably at 2 x 2 cm with a phone held at a normal reading distance. Add a postal address or a second phone number only if you are willing to print the code larger, at 2.5 to 3 cm per side, and test it before the full print run.

If you want the website, portfolio or booking link on the card too, do not stuff it into the vCard's URL field — put it in a second, separate QR code instead, ideally a dynamic one so it can be updated later without reprinting the card.

MECARD as the older alternative

MECARD is a lighter, Japan-originated format that predates wide vCard support in QR scanning apps. It produces a smaller payload for the same basic fields, but it supports far fewer fields, has no consistent TYPE parameters, and is parsed inconsistently across modern operating systems compared to vCard 3.0. There is little reason to choose it today unless you are targeting a very specific legacy device fleet — vCard 3.0 covers the same ground with better compatibility.

Static by nature — plan for that

A vCard QR code cannot be edited after it is printed, because the entire contact is baked into the pattern. If someone changes job title, phone number or company, the printed code becomes wrong and there is no way to fix it remotely. Use vCard codes for details that are genuinely stable — a personal name and a direct number you control, for instance — and keep anything volatile out of them.

For details that change, use a dynamic QR code pointing at a hosted contact page or a downloadable vCard file on a server you control. Editing the destination lets you update the underlying contact information at any time without reprinting a single card.

The hybrid approach for business cards

A practical pattern is to print a static vCard QR code on the back of the card with the minimal, stable field set, and a second dynamic QR code elsewhere on the card pointing at a portfolio, booking page or a hosted 'save contact' page that can be refreshed independently. This gives recipients an instant, offline-safe way to save your basic details, plus a route to content that is expected to change.

Field-by-field decision for a business-card vCard
FieldKeep or cutNote
N / FNKeepRequired for a readable save prompt on both platforms
ORG / TITLEKeepSmall character cost, shows directly under the name
One TEL (E.164)KeepFormat as +country code with no separators
Second TELCut unless essentialDoubles phone-number payload for marginal benefit
EMAILKeepOne address; cut a secondary alias
URLCutRoute to a separate dynamic QR code instead
ADR (full address)Cut for small printHeaviest field; only include if printing larger than 2.5 cm
NOTECutFree text rarely earns its payload cost on a card

Testing and print guidance

Test the finished code on both a recent iPhone and a recent Android phone before ordering a print run. Check three things specifically: that accented characters and non-ASCII names render correctly (the vCard should be encoded as UTF-8), that the 'Add to Contacts' preview is not truncating the name or organisation, and that the phone number is offered with the correct country context.

For print, keep a clean quiet zone around the code, use strong black-on-white contrast, choose a higher error-correction level if the design includes a logo or is printed on a textured stock, and export as SVG so the print shop can scale the vector without any loss of sharpness at whatever final size the card requires.

FAQ

Which vCard QR code generator saves contacts correctly on iPhone and Android?

Any generator that writes standards-compliant vCard 3.0 in UTF-8 with an E.164 phone number. The failures people blame on the phone are almost always malformed field syntax or an overloaded payload.

Why does my vCard QR code not save the contact?

The usual causes are a missing N or FN field, a phone number without its country code, non-UTF-8 accented characters, or a payload so long that the code is printed too dense to decode reliably.

Can I edit a vCard QR code after printing?

No. The contact is encoded inside the image. To keep details editable, print a dynamic QR code pointing at a hosted contact page instead.

How large should a vCard QR code be on a business card?

At least 2 cm per side, and larger if you keep an address or a second phone number. Cutting optional fields is usually the better fix, because it enlarges every module.

Author

Paolo Matias TonelloFounder, Qreator

Founder of MT Digital Services LLC and builder of Qreator. Writes about QR codes, print production and privacy-friendly analytics.

Put it into practice