A QR code on a business card has one job: turn a scan into a saved contact in under five seconds. The difference between a code that does that and one that opens a wall of raw text is whether the payload is a real vCard. This guide covers the format rules that make contact imports work, the size math that decides whether your code scans off cardstock, and the trade-offs the free generators rarely mention.
A vCard is the standard electronic business card format (RFC 2426 for version 3.0, RFC 6350 for version 4.0) that phones, email clients and CRM systems have exchanged since the Palm Pilot era. A vCard QR code simply encodes that text into a QR code. Scan it with an iPhone or Android camera and the phone parses the properties, shows a prefilled contact sheet with name, company, phones, email and address, and saves it on tap. No app install, no typing, no "let me text you my info."
The alternative most people regret is encoding plain text or a mailto: link. Plain text scans fine but lands in Notes. A mailto: opens a blank email. Neither fills in the contact fields, which is the entire point of the exercise. Try the business card QR generator to see the difference live: it builds the vCard as you type and shows the exact payload going into the code.
Plain text, one property per line:
BEGIN:VCARD
VERSION:3.0
N:Nguyen;Bao;;;
FN:Bao Nguyen
ORG:Nguyen Dental\, LLC
TITLE:Owner & DDS
TEL;TYPE=WORK,VOICE:(512) 555-0134
TEL;TYPE=CELL:(512) 555-0192
EMAIL;TYPE=INTERNET,WORK:[email protected]
URL:https://nguyendental.com
ADR;TYPE=WORK:;;1200 S Congress Ave\, Suite 210;Austin;TX;78704;USA
NOTE:New patients welcome.
END:VCARD
Three details in there trip up homemade generators. First, the N property is structured: family name, given name, middle, prefix, suffix, separated by semicolons. Second, that company name: the comma in Nguyen Dental, LLC must be escaped as \,, because in vCard an unescaped comma splits a value into a list. Third, the address contains one too. Every comma, semicolon, backslash and line break in user data needs a backslash in front of it, or the card that scans perfectly on your phone gets mangled on someone else's.
Both import cleanly everywhere that matters. The practical difference for printed codes is size:
| vCard 3.0 | vCard 4.0 | |
|---|---|---|
| Phone numbers | TEL;TYPE=CELL:(512) 555-0192 | TEL;VALUE=URI;TYPE="cell":tel:+15125550192 |
| Same sample card | 389 octets → QR v15 (77×77) | 415 octets → QR v16 (81×81) |
| Where it shines | QR codes, maximum compatibility | Server-to-server contact sync, jCard |
Version 4.0 is the better format: it ranks preferred numbers with PREF=1, handles social profiles properly, and aligns with the JSON-based jCard. But it costs bytes, because every phone number becomes a tel: URI. On a business card, bytes translate directly into module count, and module count translates into how small you can print the thing. For a code glued to cardstock, 3.0 is the pragmatic pick.
Do the module math instead of guessing. A QR code's version determines its module grid; at error correction M, a 389-octet vCard needs version 15, which is 77 modules on a side. Industry print floor is about 0.33 mm per module, so 77 × 0.33 mm ≈ 25.4 mm, almost exactly one inch. The 10:1 rule of thumb says a code that size reads comfortably from about 25 cm, which is roughly how far away a card sits when someone scans it.
Cut fields and the whole chain improves. Drop the note and second phone: 293 octets, version 13, 69×69 modules, 22.8 mm minimum. Drop the address as well: 224 octets, version 11, 61×61, fine at 20.1 mm. A lean card gives you margin for print bleed, matte laminate, and the one friend whose camera lens is scratched. If you want a code smaller than 2 cm, keep the vCard to name, one phone, one email and a URL.
MECARD is a Denso-era shorthand that predates widespread vCard support: MECARD:N:Nguyen,Bao;TEL:5125550192;EMAIL:[email protected];;. It's compact, and for a name-plus-phone card it produces a visibly smaller QR code. The catch is the ceiling: no versioning, no structured addresses beyond a single string, no multiple typed phone numbers, and increasingly quirky handling on modern phones. Contact apps still accept it, but vCard is what Apple and Google actually exchange between devices, so it's the safe default for anything you're printing a thousand of.
Fill the form, watch the payload and QR version update live, then export PNG, SVG, the .vcf file, or a 10-up print sheet PDF.
Business Card QR Generator →\, \; \\. This is the number one cause of half-imported contacts.N alone isn't enough; some apps display an empty name without the formatted FN property.URL: or PHOTO: instead.Once the card imports cleanly, the rest of your print collateral can carry codes too: point visitors at your Google listing with the Google review QR generator, put the guest network on the counter with a WiFi QR code, or run large batches of unique codes through the QR batch generator. For general encoding questions, the standard QR generator handles URLs and plain text.
Yes. Both iOS Camera and the Android camera or Google Lens recognize a scanned vCard QR code and offer to create a contact. Use VERSION:3.0 for the widest compatibility; 4.0 also imports but produces a larger code because phone numbers become tel: URIs.
A QR code at error correction M holds up to 2,331 bytes at version 40, but business cards should stay far below that. A full card with name, company, title, two phones, email, website, address and note runs 389 octets (QR version 15, 77 by 77 modules). Each field you drop shrinks the version and makes the printed code easier to scan.
Almost always escaping or encoding. Commas, semicolons and backslashes need a preceding backslash; a company name like Smith, Inc. becomes Smith\, Inc. Lines must fold at 75 octets with CRLF plus a space, and the file needs UTF-8 encoding for accented characters. Generators that skip these rules produce cards some phones read incorrectly or reject.
Usually no for contact details. A dynamic QR redirects through a server you rent, so if the subscription lapses, every printed card stops working. A static vCard QR contains the data itself and never expires. Dynamic makes sense only when you expect the destination to change, like a portfolio URL.
You can embed a PHOTO property pointing at a hosted JPEG URL, which keeps the payload small, or embed the image bytes base64-encoded, which balloons the payload by megabytes and destroys scannability. Most generators skip PHOTO in QR codes for exactly this reason; link your headshot on the website instead.