no login · no cookies · works offline

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:

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.

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:

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.

Make yours at dottr — it’s free and runs in your browser.