vCard QR code for a business card
A vCard code spares the reader from typing. The scan opens the phone contact dialog with the name, number, company and address already filled in, and the person only taps save.
Create a vCard codevCard 3.0, tested on iOS and Android
Editorial teamLast reviewed: 29 October 2026Editorial standards
Short answer
Write the contact as vCard 3.0 with N and FN, a phone number in international format and one line per detail. Leave the photo out. A photo multiplies the payload and turns a readable card into a code that needs a flat surface and good light.
The format is an old standard with two widely used versions, and the difference between them is the reason some cards scan and import cleanly while others open a screen of raw text.
A card is also the most space-constrained place a QR code ever goes, which makes the size of the payload the deciding factor rather than the encoding.
What is inside the code
A vCard block: BEGIN:VCARD, VERSION:3.0, then fields such as N, FN, ORG, TITLE, TEL, EMAIL, ADR, URL and NOTE, and END:VCARD at the close. Version 3.0 is the deliberate choice here. Version 4.0 is more cleanly specified but older Android address books and some scanner apps read it only partially, and a partially read card is worse than no card.
- N and FN are not optional, a card without a name is not shown by the phone
- Numbers in international format with the country code, so the card works abroad
- One value per line rather than everything crammed into NOTE
- No photo, and no logo as a base64 block, both inflate the pattern
Why a photo breaks the card
An embedded image adds kilobytes to a payload that was a few hundred bytes. The QR standard has to fit that into the same square, so the module count climbs and each module shrinks. On a 3.5 by 2 cm card there is simply not enough room left, and the code stops scanning at an angle or in poor light.
The honest alternative is a link code that leads to a contact page with the photo, alongside a vCard code with the data. Two codes on a card is one more than most cards can carry well, so pick one and make it work.
Where the code sits on the card
A vCard code wants a corner. Place it with at least one border free on two sides, keep it away from folds, staples and the edge where a thumb lands, and give it a white area around the pattern. A code printed over a photograph or a dark background loses contrast exactly where the scanner needs it.
On a card that is already full, the back is the better place than squeezing the front. A 2.5 cm square on clean white is more useful than a 1.8 cm square between two lines of type.
Test the card, not the screen
A contact code that scans from your monitor says nothing about the printed card. Test with two phones, one iOS and one Android, on the actual card, in the lighting of the place it will be handed over, and check that the name, the number and the company land in the right fields.
If a field arrives empty, the cause is usually a missing field separator or an extra line break inside a value. Keep one line per field and the import behaves.
Questions about vCard codes
Which vCard version should I use?
3.0. It is read by every phone built in the last fifteen years, while 4.0 still trips older Android address books and some scanner apps.
Can the contact details be updated later?
Not in a static code. If your number changes, the printed card keeps the old one. A dynamic code with a redirect to a hosted contact page solves that, at the cost of a provider in between.
How much text fits on a card?
Name, title, company, two numbers, an email and a website fit comfortably at 2.5 to 3 cm. Every extra field costs size or reliability, and a photo costs both at once.
Where on the card should the code go?
A corner with white space around it, at least 2.5 cm wide. On a busy layout put it on the back rather than shrinking it between two lines of text.
Do people actually scan business cards?
Some do, and the ones who do save the contact. The code is a convenience next to the printed details, not a replacement, so the card has to stay readable without it.