contact codes
How to make a contact (vCard) QR code
Build a business-card QR that saves your details with one scan — the vCard format, a copy-paste example, and how to keep it scannable.
A contact QR code is just a QR that holds a small block of text in the vCard format. Scan it and the phone offers to save the details straight to contacts — no app needed on most modern phones (iOS 11+ reads it from the camera, and most Android phones on 9+ do too via the camera or Google Lens).
What goes in a vCard
A vCard is plain text with a fixed wrapper: BEGIN:VCARD on the first line, END:VCARD on the last, and VERSION right after the start. Stick to version 3.0 — it has the widest device support. Here’s a clean, scannable one:
BEGIN:VCARD
VERSION:3.0
N:Doe;Jane;;;
FN:Jane Doe
TEL;TYPE=CELL:+15555550123
EMAIL:[email protected]
ORG:Example Co
URL:https://example.com
END:VCARD
A few things that trip people up:
Nis last-name-first, semicolon-separated. The five slots areFamily;Given;Additional;Prefix;Suffix, soN:Doe;Jane;;;. The trailing semicolons mark the empty slots — leave them in.FNis required. It’s the display name (FN:Jane Doe). Skip it and some phones save a blank-named contact or refuse the import.TYPEis optional.TEL;TYPE=CELL:is tidy, but a bareTEL:+15555550123works too and saves characters.- Escape commas and semicolons inside values. A surname like
Smith, Jr.must be writtenSmith\, Jr.or it’ll corrupt the fields.
The shorter option: MECARD
MECARD is a more compact alternative that lives on a single line:
MECARD:N:Doe,John;TEL:13035551212;EMAIL:[email protected];;
Note the differences: the name uses a comma (N:Doe,John), fields are separated by semicolons, and the whole thing ends in a double semicolon ;;. Because it’s smaller, it draws a less dense, easier-to-scan code. The trade-off: MECARD is a de-facto format (originally from NTT DoCoMo) rather than a published standard, so vCard is the safer pick for maximum compatibility. Don’t mix the two formats’ separators — that just produces a broken payload.
On an iPhone
You don’t need an app. Open the normal Camera and point it at a contact code: iOS reads the vCard, shows a little contacts banner, and tapping it opens an Add to Contacts card pre-filled with the name, number, email and so on. Tap Create New Contact (or Add to Existing) and it’s saved — the person never types a thing. It works the same from a code in Photos: press and hold it, or use the Live Text button.
A couple of iPhone-specific things worth knowing:
FNbecomes the display name. iOS leans on the formatted name, so ifFNis missing you can get a blank-looking contact — keep it in (see above).TEL;TYPE=CELLsets the label. TheCELL,WORKorHOMEtype is what shows up as the little grey label next to the number in Contacts. Tidy types make a tidier saved card.- Photos don’t help here. An embedded
PHOTObloats the code without improving the iPhone save flow — link a hosted image withURLinstead.
Android is much the same via the camera or Google Lens, which likewise offers to add the details to Contacts.
Trim it so it scans
More fields means more characters, which means a denser grid with smaller squares — harder to scan, especially printed small on a card. Keep to the essentials: name, phone, email, maybe company and a URL. As a rough guide, under ~150 characters scans very easily, and 500+ gets risky on small prints — treat those as ballpark figures, not hard limits.
Two things to never do:
- Don’t embed a photo. A base64
PHOTOcan add 10,000+ characters and make the code unscannable. Link to a hosted image withURLinstead. - Don’t cram in every phone number, your full address and social links. Bloat is the enemy of a reliable scan.
Static vCard, or a link you can change?
A raw vCard is baked into the squares — it can never be edited once printed. For a personal card that rarely changes, that’s fine. But for marketing, where details shift, the honest move is to point the code at a short link to a contact page you control, so you can update it without reprinting. That’s the whole static vs dynamic idea — and it keeps the code shorter too.
Making one in dottr
Paste your vCard (or MECARD) text into dottr, download the PNG or SVG, done. It’s a static, in-browser generator: the code holds exactly what you typed and nothing leaves your browser. Keep the contrast high and the quiet zone clear and it’ll scan first time.
Prefer to show it, not print it? Keep your contact code in your dottr wallet — it stays on your phone, ready to pull up so someone can scan and save you on the spot, then swipe to your next code.
Make yours at dottr — it’s free and runs in your browser.