What a vCard QR code is
A vCard QR code does not open a website. It contains a contact record — the same kind of file a phone exports when you share a contact — written as plain text inside the code. When someone scans it, their phone reads that record and offers to save it into the address book, with every field already filled in.
The format is vCard 3.0, published as RFC 2426 and
supported by essentially every phone made in the last fifteen years. It is
a text format: a record begins with BEGIN:VCARD, lists one
property per line, and ends with END:VCARD. There is no
server, no account and no expiry involved.
The appeal over reading your number aloud is the same as with any contact exchange, only more so. A vCard code carries seven fields in one gesture, and the person saving it does not have to spell your surname back to you or guess whether that is a zero or the letter O.
What the payload contains
This is what the generator actually puts inside the code when every field is filled in. Each line is a property; the part before the first colon is the property name, and anything after a semicolon on the left of the colon is a parameter:
BEGIN:VCARD
VERSION:3.0
N:Doe;Jane;;;
FN:Jane Doe
ORG:Acme Inc.
TITLE:Head of Design
TEL;TYPE=CELL:+1 555 010 9999
EMAIL;TYPE=INTERNET:jane@acme.com
URL:https://acme.com
ADR:;;1 Market St, San Francisco;;;;
END:VCARD
The two lines that matter most are N and FN, and
they are not duplicates:
| Property | What it holds |
|---|---|
N |
The name split into its parts, in the order family;given;middle;prefix;suffix. For Jane Doe that is Doe;Jane;;; — which is why the surname comes first. Phones use it to sort contacts by last name. |
FN |
The formatted name, exactly as it should be displayed. Jane Doe. |
ORG, TITLE |
Company and job title, shown on the contact card under the name. |
TEL, EMAIL, URL |
The phone number, email address and website. The TYPE=CELL and TYPE=INTERNET parameters tell the phone which slot to file them under. |
ADR |
A structured address with seven parts. The generator takes the single address line you type and puts it in the street component — ADR:;;1 Market St, San Francisco;;;; — rather than guessing which part is the city. |
The format supports considerably more than this: a photograph, a note, a birthday, several phone numbers with different labels, instant-messaging handles. The generator offers the fields phones import reliably and quietly, because a property that a phone ignores is only extra length making the code denser.
What actually lands in the contact
Payload and result are not the same thing, and the difference is worth knowing before you print. The code is read correctly by every phone; what each one does with it varies.
On an iPhone, scanning with the Camera app shows a contact preview with the name, company and job title, and buttons to create a new contact or add the details to an existing one. The preview is the useful part: you can see what you are about to save.
On Android, the camera and the Contacts app generally recognise the code and offer to add it, again with the fields filled in. Behaviour is less uniform across manufacturers than on iOS: most devices handle it well, but a few camera apps display the raw vCard text instead of a contact preview, which looks alarming and is not an error — the record is intact, the app simply is not parsing it.
Addresses are the field most likely to arrive differently than you expect,
because ADR is the only structured property in common use.
Some phones file the whole line as a single address, some split it at
commas, and some drop it. If the address genuinely matters, it is worth
scanning your own finished code on two different phones before you commit
it to print.
What does not fit
A QR code holds far less than people assume, and contact records grow quietly. QR Studio caps a code's content at 1,200 bytes, which sounds small and is in fact generous for a contact record — the example above is a little over 200 bytes. But it is nowhere near enough for an image.
This is the single most common disappointment with vCard codes. The format
has a PHOTO property, so it looks as though a portrait or a
logo should be possible. A small JPEG is a few kilobytes, and a QR code
carrying one would need to be so dense that a phone camera could not
resolve it at any size you would print. No generator can do this well, and
one that claims to is producing a code that will not scan reliably.
The practical limit is not the hard ceiling but the grid it produces. Each extra property makes the payload longer, which pushes the code to a higher version — more modules in the same square. More modules means smaller dots, which is exactly what fails when the code is printed at the size of a business card. A name, a phone number and an email address produce a comfortable, readable code. Adding a company, a job title, a website and a full postal address roughly doubles the content, and the code visibly thickens.
If you find yourself wanting more fields than fit comfortably, that is a signal to use a link instead. See when not to use a vCard code.
Names and addresses with commas and line breaks
A vCard is a line-based format, which makes two characters dangerous and one outright hostile.
The dangerous ones are the semicolon, the
comma and the backslash, all of which
have structural meaning. A semicolon separates the parts of a structured
value, so a company called Smith; Jones & Co has to be
written ORG:Smith\; Jones & Co. A backslash escapes, so a
literal one is written twice. This matters most in the N
property, where the semicolons are the field separators: a name containing
one would otherwise be split into the wrong parts.
The hostile one is the line break. A vCard value cannot
span lines, so a name containing a newline could start a new property — or
a whole second BEGIN:VCARD record — inside the same code. An
injected END:VCARD is the worst version of it, because it
closes the record early and hides the real contact behind a forged one.
The generator collapses every character a phone might read as a
line break before escaping — not only the obvious carriage return and line
feed, but the vertical tab, form feed and the Unicode separators that some
parsers split on just the same. So a value like Jane
BEGIN:VCARD is stored as
inert text rather than being allowed to forge a property. That is a real
injection path, not a theoretical one, because anyone who can talk you
into encoding their name controls the text you type in.
In the generator this is handled for you, and the preview shows the result, so the only case you need to think about is a value with a comma or a semicolon in it: type it as it should read, and let the escaping happen.
Why updating your details means reprinting
A vCard code is a static code: the contact record is inside the picture. That is why it needs no server, works offline, and never expires — and it is also why printing a thousand of them fixes your phone number in place. Change the number and every card, badge and poster still carries the old one, and the phone that scans it will happily save a stale contact.
If your details are stable, that is the right trade and you should take it. If they are not — a role that changes, a business line that gets replaced, a company that moves — the alternative is a dynamic QR code: the printed code points at a short URL you control, and you can repoint that URL at a new destination without reprinting anything. The cost is that the code now depends on a service resolving a redirect, and you need somewhere for it to point — a contact page rather than a raw vCard file.
A reasonable middle route for a growing business: static vCard codes on business cards, which are reprinted often anyway and should carry a personal number, and a dynamic code on anything long-lived, such as a shop window or a vehicle.
Printing it on a card or badge
A contact code is scanned deliberately and from close range — someone holds their phone twenty or thirty centimetres away and waits for the prompt — so it can be much smaller than a poster code. On a standard business card, a square of about 2 cm is comfortable for a short record, and 2.5 cm is safer once the code carries a company, a title and an address.
The usual printing rules still apply, and the first one is the one people break:
- Do not invert the colours. Dark modules on a light background is what scanners expect. A light code on a dark card looks sharp and fails often, because many cameras treat the darker area as the background.
- Keep the margin. The generator includes the clear border the format requires. Cropping it to make the layout line up is the classic way to break a working code.
- Choose matte over gloss. A reflective card reflects the ceiling lights back into the camera, and a highlight across the middle of a code is enough to stop it scanning.
- Do not print it too small to save money. A code that fails is more expensive than the centimetre you saved, because the person holding it just types nothing and moves on.
The size calculator works the minimum print size out from your actual content rather than a rule of thumb, which is worth doing once the record grows past a few fields. And before any print run, scan the code with a phone that does not already have you as a contact — a phone that knows you may fill in the gaps from its own address book and make a broken code look correct. The scanner shows exactly what a code contains, which is the fastest way to check one you have been given rather than one you made.
When not to use a vCard code
A vCard code is a contact exchange. It is the wrong tool when what you actually want is a destination:
- When you want someone to visit a page. A vCard opens the address book, not a browser. If the goal is traffic — a menu, a booking page, a campaign — use a URL code. A vCard cannot carry analytics worth having, because nothing is requested when it is scanned.
- When the record needs more than fits comfortably. If you want a photo, a biography, opening hours and three phone numbers, that is a page, not a code. Encode a link and put the rest on the page.
- When the details change often. Static codes cannot be edited; reprinting is the only update. Use a dynamic code for anything long-lived.
- When the details are private. Everything in the code is readable by anyone who can see or photograph it. A personal mobile number on a poster in a public place is published, not shared.
For the case it is built for — a card, a badge, a signature block, a reception desk — nothing beats it, because it removes typing entirely.
Make one in the generator
The generator has a contact card type with a live preview: enter your name and whichever details you want saved, and it builds the vCard, shows the code, and offers PNG or SVG. It escapes commas, semicolons and line breaks for you. Codes are free, carry no watermark and never expire.
Open the vCard QR code generator
Tip: keep the record short. A name, a phone number and an email address make a code that scans from further away and prints smaller than one carrying every field you own.
Frequently asked questions
What is a vCard QR code?
It is a QR code that contains a complete contact record in the vCard format. Scanning it opens the phone's address book with the fields already filled in, so nothing is typed and nothing is mistyped. It is the digital equivalent of handing over a business card, except the phone does the copying.
Does a vCard QR code work on iPhone and Android?
Yes. Both modern iPhones and most Android phones recognise a vCard code from the built-in camera, show a preview of the contact, and offer to add it. Older Android devices may need Google Lens or a dedicated scanner app, and a few camera apps show the raw text instead of a contact preview.
Can I include my photo or company logo in the vCard?
No. The vCard format allows a photo, but a photograph is orders of magnitude larger than a QR code can hold — QR Studio caps a code's content at 1,200 bytes. A portrait would need a code too dense to scan. If a picture matters, put a link in the code and show the photo on the page it opens.
What happens when my details change?
A static vCard code has to be reprinted, because the details are inside the code itself. If your number or job title changes often, use a dynamic code pointing at a contact page you control instead, so the printed code stays valid.
How many fields should I include?
As few as you can. Each field lengthens the payload and pushes the code towards a higher version with more, smaller modules, which makes it harder to scan when printed at business-card size. Name, phone and email are usually enough; the address is the first thing to drop.
Is it safe to put my phone number in a QR code?
Treat it exactly like a printed business card: anyone who can see the code, and anyone who photographs it, can read everything in it. Use a number and address you are content to hand out publicly, and keep a personal mobile off anything that will sit on a wall or a shop counter.
Does a vCard QR code expire?
No. The contact details are encoded directly in the code, so it works with no server involved and never expires. It only becomes out of date when the information inside it does.