A vCard Address Has Seven Parts, and a CSV Column Has One
Published 9/8/2026 · 4 min read · File tools
Daniel Okonkwo — Front-end developer and tech writer at OneKitly
Web performance · File formats
Checked against 3 sources
vCard stores a name as five components (family, given, additional, prefix, suffix), an address as seven (post office box, extended, street, locality, region, postal code, country) and an organisation as a unit and its departments, each separated by an unescaped semicolon. The CSV export writes one column per concept, so the address becomes 12 rue de la Paix, bâtiment C, Paris, 75002, France — the same words, joined by commas, with the boundaries gone. Reading that spreadsheet is fine and sorting it is fine. Building a vCard back from it is where the loss shows: the whole address lands in the street component, and a contact imported into a phone has a street called 12 rue de la Paix, bâtiment C, Paris, 75002, France with an empty city and an empty postcode. Two departments joined as one organisation and a mobile number that no longer says it is mobile go the same way. Merge, view and edit inside .vcf when the structure matters; take the CSV out when you want a list to read, sort or count.
Names, addresses and organisations are structured fields in a vCard. Flatten them into a spreadsheet and they read identically while losing the seams — which matters the moment you build a vCard back out of that spreadsheet.
The semicolon that is not a separator
In a vCard the structure is carried by bare semicolons and the content escapes its own. A company called Sarl Dupont, Martin et fils is written Sarl Dupont\, Martin et fils, backslash and all, precisely so that a reader can tell that comma from a separator. The same goes for semicolons inside a value and for line breaks inside a note. Split a vCard line on a plain semicolon or comma and you tear names in half — which is why the parser here walks the line and honours the backslashes rather than calling split.
Line folding is the second trap and it is invisible in an editor. A long property is wrapped at 75 octets and continued on the next line with a leading space, so a note of 149 characters can sit across three lines and read as three broken fields to anything that splits on newlines. Unfolded properly it comes back whole, escaping intact, which is what the viewer shows and what the CSV then carries.
Which direction to take, and when
Take the CSV when the answer you want is a list: who is at which company, how many contacts have no email, which numbers still start with an old area code. A spreadsheet is the right shape for those questions and a vCard is a poor one. Take the JSON export when something else is going to read it — it keeps the phone and email lists as lists rather than joining them into one cell, which is the difference between a script that works and a script that guesses where to split.
| In the original .vcf | What comes back out | Reads the same? |
|---|---|---|
| ADR:;;12 rue de la Paix, bâtiment C;Paris;;75002;France | Everything in the street component, city and postcode empty | Yes |
| ORG:Sarl Dupont, Martin et fils;Service commercial | One organisation, the department joined on with a dash | Yes |
| TEL;TYPE=CELL and TEL;TYPE=WORK,VOICE | Two TEL lines, neither saying which is which | Numbers yes, labels no |
| N:Dupont;Jean-Pierre;Marie;M.; | N:Dupont;Jean-Pierre;;; — middle name and title gone | Mostly |
| NOTE and EMAIL, with escaped commas | Identical, escaping and both addresses intact | Yes |
Frequently asked questions
- My imported contacts have no city or postcode. Why?
- Because they went through a spreadsheet. One address column becomes one address component, and the component a rebuilt vCard uses is the street — so the city, region, postcode and country fields arrive empty even though every word is still there. If you need those fields filled, either keep the original .vcf or split the address into separate columns yourself and fill them in the destination after import.
- Will the accented characters survive?
- Through the tools, yes — everything is read and written as UTF-8. Where they usually break is in a spreadsheet that opens the CSV as some other encoding, which turns é into two characters before you have done anything. Open the file through your spreadsheet's import dialogue and choose UTF-8 rather than double-clicking it, and check one accented name before you edit two hundred.
- Is there a version of vCard I should prefer?
- 3.0 is what most address books export and what everything reads, so it is the safe choice for moving contacts between applications. 4.0 is the current standard and writes some values as URIs — a phone can arrive as tel:+33612345678, prefix included — while 2.1, still produced by older phones and mail clients, marks types without an equals sign, as TEL;CELL rather than TEL;TYPE=CELL. The tools read all three; when you write, 3.0 travels furthest.
Articles you may find interesting
All guides →Related tools
Sources
Spotted a mistake in this article?