How to Create a vCard QR Code for Your Business Card
A vCard QR code lets someone scan your business card and instantly save your contact information -- name, phone, email, company, website, even your photo -- directly to their phone's address book. No typing, no misspellings, no lost cards.
Here is how to create one properly, with the vCard format explained so you understand what you are generating.
What Is a vCard?
vCard (.vcf) is a standard file format for electronic business cards. It has been around since 1995 and is supported by every phone, email client, and contacts app. When a QR code contains vCard data, scanning it triggers the phone's "Add Contact" dialog with all fields pre-filled.
The vCard 3.0 Format
vCard 3.0 is the most widely supported version. Here is a complete example:
BEGIN:VCARD
VERSION:3.0
N:Johnson;Alice;;Ms.;
FN:Alice Johnson
ORG:Acme Corp
TITLE:Senior Software Engineer
TEL;TYPE=WORK,VOICE:+1-555-123-4567
TEL;TYPE=CELL:+1-555-987-6543
EMAIL;TYPE=WORK:alice@acmecorp.com
EMAIL;TYPE=HOME:alice.johnson@gmail.com
URL:https://alicejohnson.dev
ADR;TYPE=WORK:;;123 Main Street;San Francisco;CA;94105;USA
NOTE:Met at DevConf 2026
END:VCARD
Field Reference
| Field | Format | Required |
BEGIN:VCARD | Literal | Yes |
VERSION:3.0 | Literal | Yes |
N | Last;First;Middle;Prefix;Suffix | Yes |
FN | Full display name | Yes |
ORG | Company name | No |
TITLE | Job title | No |
TEL;TYPE=X | Phone (types: WORK, CELL, HOME, FAX) | No |
EMAIL;TYPE=X | Email (types: WORK, HOME) | No |
URL | Website | No |
ADR;TYPE=X | PO Box;Suite;Street;City;State;Zip;Country | No |
NOTE | Free text note | No |
PHOTO;VALUE=URI | URL to photo | No |
END:VCARD | Literal | Yes |
Adding a Photo
PHOTO;VALUE=URI:https://example.com/alice-photo.jpg
Keep in mind that photos increase the QR code data significantly. A URL to a photo is better than embedding base64 image data, which would make the QR code too dense to scan reliably.
Method 1: Generate with Code
JavaScript
function generateVCard({
firstName, lastName, org, title,
cellPhone, workPhone, email, website, note
}) {
const lines = [
'BEGIN:VCARD',
'VERSION:3.0',
N:${lastName};${firstName};;;,
FN:${firstName} ${lastName},
]; if (org) lines.push(ORG:${org});
if (title) lines.push(TITLE:${title});
if (cellPhone) lines.push(TEL;TYPE=CELL:${cellPhone});
if (workPhone) lines.push(TEL;TYPE=WORK,VOICE:${workPhone});
if (email) lines.push(EMAIL;TYPE=WORK:${email});
if (website) lines.push(URL:${website});
if (note) lines.push(NOTE:${note});
lines.push('END:VCARD');
return lines.join('\r\n');
}
// Generate the vCard string
const vcard = generateVCard({
firstName: 'Alice',
lastName: 'Johnson',
org: 'Acme Corp',
title: 'Senior Software Engineer',
cellPhone: '+1-555-987-6543',
workPhone: '+1-555-123-4567',
email: 'alice@acmecorp.com',
website: 'https://alicejohnson.dev'
});
// Generate QR code (using qrcode npm package)
import QRCode from 'qrcode';
const qrDataUrl = await QRCode.toDataURL(vcard, {
errorCorrectionLevel: 'M',
margin: 4,
width: 300,
color: { dark: '#000000', light: '#ffffff' }
});
Python
import qrcodevcard = """BEGIN:VCARD
VERSION:3.0
N:Johnson;Alice;;;
FN:Alice Johnson
ORG:Acme Corp
TITLE:Senior Software Engineer
TEL;TYPE=CELL:+1-555-987-6543
EMAIL;TYPE=WORK:alice@acmecorp.com
URL:https://alicejohnson.dev
END:VCARD"""
qr = qrcode.QRCode(
version=None, # auto-size
error_correction=qrcode.constants.ERROR_CORRECT_M,
box_size=10,
border=4
)
qr.add_data(vcard)
qr.make(fit=True)
img = qr.make_image(fill_color="black", back_color="white")
img.save("business-card-qr.png")
Method 2: Online Generators
Several QR code generators have a vCard mode with a form interface:
- QRCode Monkey (qrcodemonkey.com) -- Fill in the fields, customize colors and shape, download as SVG for print. Free, no signup.
- GoQR.me -- Has a vCard tab. Minimal but functional. Exports PNG, SVG, PDF, EPS.
- freeqr.io -- vCard generator with bulk support. Useful if you are generating cards for a team.
The advantage of online tools is the form interface -- you do not need to know the vCard format. The advantage of code is automation and version control.
Best Practices for Business Cards
Keep Data Minimal
Every character you add increases QR code density, making it harder to scan. Stick to the essentials:
- Full name
- Job title and company
- One phone number
- One email
- Website URL
A vCard with these 5 fields generates a QR code that is easy to scan even at small sizes. Adding a mailing address, multiple phone numbers, and a photo URL pushes it to the edge.
Error Correction Level
QR codes have four error correction levels:
| Level | Recovery | Use Case |
| L (7%) | Low | Maximum data, screens only |
| M (15%) | Medium | Standard business cards |
| Q (25%) | Quartile | Cards with logo overlay |
| H (30%) | High | Cards with heavy branding |
Use Level M for standard business cards. Use Level H if you are overlaying a logo on top of the QR code.
Sizing for Print
- Minimum QR code size: 2cm x 2cm (0.8" x 0.8")
- Recommended size: 2.5cm x 2.5cm (1" x 1") for vCards with typical data
- Standard business card: 8.5cm x 5.5cm (3.5" x 2") -- the QR code should take up roughly 25-30% of one side
File Format
Always export as SVG or PDF for print. PNG files pixelate when scaled. SVG is vector-based and looks crisp at any size.
If your printer requires PNG, export at least 1200x1200 pixels for a 1-inch print at 300 DPI.
Color and Contrast
- The QR code modules (squares) must be darker than the background
- Minimum contrast ratio: 4:1 (but aim for higher)
- Black on white is safest
- If using brand colors, test with multiple phones before printing a batch
- Do not use gradients on the modules -- some scanners struggle with them
Placement on the Card
- Back of the card: Most common. Dedicates the full back to the QR code with a "Scan to save contact" label.
- Front, bottom-right corner: Works if the card design accommodates it. Keep it at least 2cm away from edges (printers have bleed zones).
Testing Checklist
Before you print 500 business cards, verify:
- [ ] Scan with iPhone Camera app (no third-party app needed)
- [ ] Scan with Android camera (varies by manufacturer)
- [ ] Scan with Google Lens
- [ ] Check that all fields populate correctly in the Contacts app
- [ ] Phone numbers include country code
- [ ] Special characters in names (accents, non-Latin scripts) display correctly
- [ ] Scan works under indoor lighting and outdoor daylight
- [ ] Scan works at the size it will be printed
vCard 4.0: Should You Use It?
vCard 4.0 (RFC 6350) exists and adds features like multiple languages and better structured addresses. However, support is inconsistent -- some Android phones and older iOS versions handle it poorly. Stick with vCard 3.0 for maximum compatibility.
The one exception: if your contacts app supports vCard 4.0 and you need the KIND property (to distinguish individual vs organization vs group), upgrade. For standard business card use, 3.0 is the safe choice.