vCard QR codes: field limits and compatibility across phones
Level: intermediate · ~14 min read · Intent: informational
Audience: Developers, Marketers, Ops engineers, Technical teams
Prerequisites
- Basic familiarity with QR codes
- Basic familiarity with contact cards or vCard files
- Optional understanding of mobile app interoperability
Key takeaways
- vCard QR compatibility is mostly a payload-design problem, not only a QR-generation problem. The more fields and formatting you add, the more likely a phone or contact app will ignore, truncate, or mis-map something.
- The safest cross-phone strategy is usually a small common subset of contact fields: FN, N, one or two TEL values, one EMAIL, one ORG, optional TITLE, optional URL, and a short NOTE only when truly needed.
- vCard 4.0 is the formal current standard, but broad phone compatibility often benefits from conservative vCard output because Apple still defaults to exporting vCard 3.0 and even recommends 2.1 fallback for apps that cannot import 3.0.
- Larger vCards create denser QR symbols. DENSO’s QR capacity guidance makes the tradeoff explicit: more data and higher error correction produce larger module counts, which can reduce scan reliability on small printed codes.
References
FAQ
- What is the safest vCard version for QR compatibility?
- Use a conservative payload and test on target devices. vCard 4.0 is the current standard, but Apple still defaults to exporting 3.0 and even documents 2.1 fallback for apps that cannot import 3.0, which is a strong practical sign that compatibility still depends on older versions.
- Why do some vCard QR codes scan but import fields incorrectly?
- Because contact apps differ on field support and mapping. A QR code can decode successfully while the receiving contacts app ignores, truncates, or remaps fields it does not fully support.
- What fields should I keep for broad compatibility?
- Usually FN, N, one or two phone numbers, one email address, organization, optional title, optional website, and a short note if needed. Large photos, many social fields, and long notes make compatibility worse.
- Why does adding more vCard fields make scanning worse?
- Because QR codes have finite capacity. More payload data increases symbol density, and higher error correction also increases size, which can hurt scan reliability in print.
- Should I embed a photo in a vCard QR code?
- Usually no for printed business-card style QR codes. PHOTO is valid in vCard, but image data quickly inflates the payload and makes the QR code much harder to scan reliably.
vCard QR codes: field limits and compatibility across phones
A vCard QR code can fail in two different ways:
- the phone cannot scan the QR code reliably
- or the phone scans it, but the contact import is incomplete, mis-mapped, or ugly
A lot of teams only think about the first problem.
They ask:
- is the QR code big enough?
- is the contrast high enough?
- does the camera read it?
Those questions matter. But the second problem is often where compatibility actually breaks:
- job title appears in the wrong place
- multiple phone numbers collapse strangely
- notes are truncated
- URL fields disappear
- or a perfectly valid vCard property is ignored by the importing contacts app
That is why vCard QR compatibility is mostly about restraint.
The cleanest cross-phone vCard QR code is usually not the most expressive one. It is the one that stays inside the common subset most phones and contacts apps handle well.
Why this topic matters
Teams usually hit this issue after one of these problems:
- the QR scans on Android but not on iPhone, or vice versa
- both phones scan it, but they create slightly different contacts
- a QR generator claims “full vCard support,” but the imported result loses fields
- the QR code becomes visually dense after adding notes, addresses, logos, or photos
- print tests succeed on flagship phones and fail on older or lower-end cameras
- or one contact app imports the VCF while another expects simpler field usage
The root issue is that this is a layered interoperability problem:
- vCard syntax
- QR payload size
- scanner decoding
- OS-level handoff
- and contacts-app field support
The QR can be valid. The vCard can be valid. The final contact import can still be disappointing.
Start with the standards reality: vCard is flexible, phone compatibility is selective
RFC 6350 defines vCard 4.0 as the standard format for representing and exchanging information about people and other entities. It supports a very broad property set including formatted names, structured names, addresses, multiple phone numbers, email addresses, photos, logos, URLs, and more. citeturn133129search1turn558288view3turn558288view4
That flexibility is useful. It is also why phone compatibility varies in practice.
A phone contact importer does not need to support every property equally well just because the RFC defines it. That is the first big mindset shift.
The safest question is not:
- “What can vCard represent?”
It is:
- “What is the smallest field set that still solves the real use case?”
That is how you maximize compatibility.
The most practical compatibility clue: Apple still defaults to vCard 3.0
Apple’s current Contacts settings docs say the default export format is vCard 3.0. Apple also documents a fallback workflow for apps that cannot import exported vCards: switch to vCard 2.1, export again, then switch back to 3.0 afterwards. citeturn891561view2turn891561view4
That is a very strong real-world signal.
It does not mean vCard 4.0 is unusable. RFC 6350 is still the formal standard. citeturn133129search1
But it does mean that broad compatibility across address-book ecosystems still benefits from conservative formatting and field choices. If Apple’s own default export is 3.0 and its support docs still mention 2.1 fallback for interoperability, you should assume version and field support are not perfectly uniform across clients. citeturn891561view2turn891561view4
That is why QR-focused vCard payloads should usually optimize for the common denominator, not the full theoretical feature set.
Google and Android support VCF import, but that still does not guarantee equal field behavior
Google’s Android Contacts help says users can import contacts from a VCF file on Android. citeturn726372view1
That confirms the broad platform reality:
- VCF/vCard is part of the ecosystem
- phones and contact apps do import it
- the format is the right family for QR contact sharing
But this still does not guarantee that every imported field behaves identically across:
- Android Contacts
- iPhone contact creation flows
- vendor scanner apps
- OEM contact apps
- or account-sync layers
So compatibility strategy should not assume:
- “imports” equals “imports every field the same way”
Instead, assume:
- the broadest support lives in the small common subset
The safest field set for broad phone compatibility
For a printed or on-screen vCard QR meant to create a contact quickly, the most reliable set is usually:
BEGIN:VCARDVERSIONFNN- one or two
TEL - one
EMAIL - one
ORG - optional
TITLE - optional
URL - optional short
NOTE END:VCARD
Why this subset?
Because RFC 6350 makes FN mandatory and defines widely used contact properties like N, TEL, and EMAIL clearly. citeturn558288view2turn558288view3turn558288view4
This subset also aligns with what users usually expect when they scan a contact QR:
- name
- phone
- company
- maybe role
- maybe website
That is enough for most business-card workflows.
Why FN and N matter more than teams expect
RFC 6350 says the FN property MUST be present in the vCard object. It also defines N as the structured name field whose components are separated by semicolons in family/given/additional/prefix/suffix order. citeturn558288view2turn891561view0
That means:
FNis the formatted display nameNis the structured name model
If you omit N, some clients may still import the contact, but you may get poorer sorting or name-field behavior.
If you omit FN, you are outside the standard requirement for a proper vCard 4.0 object. citeturn558288view2
So a strong safe default is:
- always include both
FNandN
That gives both:
- human display
- and structured contact semantics
Phone, email, and organization fields are usually worth keeping simple
RFC 6350 allows multiple TEL and EMAIL properties and supports parameters like preferred use and type. It also allows TEL values as URIs such as tel:+1-555-555-5555. citeturn558288view3turn558288view4
That flexibility is useful, but QR compatibility often improves when you keep these simple.
A practical rule is:
- one mobile number
- maybe one work number
- one primary email
- one organization
- one title if it matters
This avoids payload bloat and reduces the chance that a phone’s contact app will:
- flatten multiple similar fields oddly
- ignore uncommon parameters
- or show a result that feels inconsistent
The more variants you add, the more you should test on real devices.
The biggest payload mistake: treating QR like a full contact archive
A QR code is not a synced address book. It is a constrained transport surface.
DENSO’s capacity docs say that as the amount of data increases, more modules are required, which makes the QR symbol larger and denser. They also say version size grows from 21×21 modules at Version 1 to 177×177 at Version 40. citeturn891561view1
DENSO’s error-correction guidance says higher error-correction levels improve restoration capability but also increase the QR code size because they reduce available data capacity. citeturn133129search0turn133129search8
That means a vCard QR payload gets harder to scan when you add:
- long notes
- full postal addresses
- many phone numbers
- many emails
- social links
- large URLs
- embedded image data
This is why vCard QR compatibility is strongly affected by field budget, not just by standards compliance.
Why PHOTO is usually a bad idea in QR vCards
RFC 6350 supports rich properties like photos and logos. citeturn133129search1turn133129search5
But for QR transport, inline image content is usually a bad trade.
Why? Because images explode payload size very quickly. And QR capacity is finite:
- more bytes means denser modules
- denser modules mean a larger or harder-to-scan symbol
- higher error correction makes this even tighter
For printed business cards, badges, posters, or packaging, PHOTO is usually the wrong optimization.
A short URL to a profile or contact page is much safer than embedding image-heavy contact data into the QR itself.
Notes, addresses, and long URLs also deserve restraint
Teams often assume a few extra fields cannot hurt.
In QR, they can.
A long NOTE, a detailed postal ADR, and a very long tracking-heavy URL all increase payload size.
If the QR is small in print, the result may still scan on one flagship phone and fail on another older or noisier camera.
This is one of the best practical rules in the whole article: every extra field must justify its scan-cost.
If the business-card use case does not require:
- full address
- long biography
- multiple department lines
- or campaign-heavy URLs
leave them out.
Escaping and line folding still matter
Even if the QR is large enough, the vCard text still needs correct formatting.
RFC 6350 says:
- lines are delimited by CRLF
- long logical lines may be folded
- content lines should be folded to a maximum width of 75 octets excluding the line break
- multi-octet characters must remain contiguous citeturn558288view0turn558288view1
It also shows escaping behavior in examples like:
FN:Mr. John Q. Public\, Esq.ORG:ABC\, Inc.;North American Division;Marketingciteturn558288view2turn891561view0
That means generators should get:
- escaping
- line folding
- and UTF-8 handling right before you even start device testing
A QR that decodes to malformed or badly escaped vCard text may still be scanned, but the contact import can mis-map fields or break silently.
Why version choice should be conservative, not ideological
There is no single universal answer like:
- “always use 4.0” or
- “always use 3.0”
The practical rule is:
Use standards-aware conservative generation
- know that RFC 6350 defines 4.0 citeturn133129search1
- know that Apple defaults to 3.0 export and documents 2.1 fallback for compatibility citeturn891561view2turn891561view4
- know that Android/Google imports VCF files broadly citeturn726372view1
From those facts, the safest production recommendation is:
- keep the payload conservative
- avoid exotic fields
- test on the real target devices
- and do not assume the richest format wins
That is a better operational rule than any blanket version preference.
A practical compatibility workflow
Use this when generating vCard QR codes for real users.
1. Start with the smallest field set that solves the use case
Do not begin by exporting every available contact field.
2. Include FN and N
These are foundational for name display and structure. RFC 6350 makes FN mandatory. citeturn558288view2
3. Keep phone and email fields limited
Start with one preferred phone and one preferred email. Add more only if the product need is clear.
4. Prefer short URLs
If you include URL, keep it concise and avoid unnecessary query strings.
5. Avoid PHOTO in printed QR use cases
Link out instead of embedding heavy media data.
6. Test both scan and import
The QR must:
- decode successfully
- and produce a correct contact
Those are different tests.
7. Test on at least one recent iPhone and one recent Android device
This is the minimum practical interop baseline.
8. Print-test the real size
Dense QR payloads are much more sensitive to small print sizes.
That workflow catches more compatibility problems than standards reading alone.
Good examples
Safe compact example
BEGIN:VCARD
VERSION:3.0
FN:Ada Lovelace
N:Lovelace;Ada;;;
ORG:Elysiate
TITLE:Research Lead
TEL;TYPE=CELL:+27123456789
EMAIL:ada@example.com
URL:https://elysiate.com
END:VCARD
Why this is good:
- compact
- common fields only
- easy to scan
- likely to import sensibly across devices
Riskier example
BEGIN:VCARD
VERSION:4.0
FN:Ada Lovelace
N:Lovelace;Ada;;;
ORG:Elysiate;Advanced Research;Signals
TITLE:Research Lead
TEL;VALUE=uri;TYPE="voice,work":tel:+27-12-345-6789
TEL;VALUE=uri;TYPE="cell,work":tel:+27-82-000-0000
EMAIL;TYPE=work:ada@example.com
EMAIL;TYPE=home:ada.personal@example.net
ADR:;;Long address line with suite, district, floor, and region details;;;;
NOTE:Long note with bio, instructions, and campaign text...
URL:https://elysiate.com/contact?utm_source=business-card&utm_medium=qr&utm_campaign=signals-launch-2026
PHOTO:data:image/jpeg;base64,...
END:VCARD
Why this is risky:
- payload grows dramatically
- field support is less uniform
- scan reliability and import consistency both get worse
Common anti-patterns
Anti-pattern 1: adding every field your CRM can export
That turns a quick-scan contact card into a dense, fragile payload.
Anti-pattern 2: assuming successful scan means successful import
Scanning and contact-field mapping are separate compatibility layers.
Anti-pattern 3: embedding long tracking-heavy URLs
This wastes payload budget and can create privacy issues too.
Anti-pattern 4: relying on PHOTO for a printed contact QR
The payload cost is usually not worth it.
Anti-pattern 5: never testing on real phones
Spec compliance is not the same thing as real device interoperability.
Which Elysiate tools fit this topic naturally?
The most natural related tools are:
They fit because vCard QR quality starts at creation time:
- field selection
- payload size
- print format
- and export discipline
That is where compatibility is won or lost.
Why this page can rank broadly
To support broader search coverage, this page is intentionally shaped around several connected query families:
Core compatibility intent
- vcard qr codes compatibility across phones
- iphone android vcard qr
- contact qr code compatibility
Payload and field-limit intent
- vcard qr field limits
- vcard qr too large
- qr code contact payload size
Version and standards intent
- vcard 3.0 vs 4.0 qr
- vcf qr compatibility
- phone contact import vcard qr
That breadth helps one page rank for much more than the literal title.
FAQ
What is the safest vCard version for QR compatibility?
Use a conservative payload and test on target devices. vCard 4.0 is the current standard, but Apple still defaults to 3.0 and documents 2.1 fallback for apps that cannot import 3.0. citeturn133129search1turn891561view2turn891561view4
What fields should I keep for broad compatibility?
Usually FN, N, one or two phone numbers, one email, organization, optional title, optional website, and only short notes when necessary.
Why do some phones scan the QR but import the contact differently?
Because decoding the QR payload and mapping vCard properties into a contacts app are different steps with different compatibility limits.
Should I embed a photo?
Usually no for printed or small-format QR codes. PHOTO is valid in vCard, but it makes the payload much larger and hurts scan reliability.
Why does adding more fields make scanning worse?
Because QR codes have finite capacity. More payload increases module density, and higher error correction increases size too. citeturn891561view1turn133129search0
What is the safest default mindset?
Treat vCard QR design as a budget: every field must justify the scan cost it adds.
Final takeaway
vCard QR compatibility across phones improves when you optimize for the common subset, not the maximum possible payload.
The safest baseline is:
- keep the contact payload compact
- always include a proper name field set
- prefer one or two primary contact methods
- avoid PHOTO and long notes in printed QR workflows
- use conservative versioning and formatting choices
- and test both scan success and actual contact import on real iPhone and Android devices
That is how you make a contact QR that still works outside your own test phone.
About the author
Elysiate publishes practical guides and privacy-first tools for data workflows, developer tooling, SEO, and product engineering.