Skip to content
OneKitly

A vCard Address Has Seven Parts, and a CSV Column Has One

Published 9/8/2026 · 4 min read · File tools

Daniel Okonkwo

Daniel Okonkwo — Front-end developer and tech writer at OneKitly

Web performance · File formats

Checked against 3 sources

View profile →
In short

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.

One contact through .vcf → CSV → .vcf, property by property
In the original .vcfWhat comes back outReads the same?
ADR:;;12 rue de la Paix, bâtiment C;Paris;;75002;FranceEverything in the street component, city and postcode emptyYes
ORG:Sarl Dupont, Martin et fils;Service commercialOne organisation, the department joined on with a dashYes
TEL;TYPE=CELL and TEL;TYPE=WORK,VOICETwo TEL lines, neither saying which is whichNumbers yes, labels no
N:Dupont;Jean-Pierre;Marie;M.;N:Dupont;Jean-Pierre;;; — middle name and title goneMostly
NOTE and EMAIL, with escaped commasIdentical, escaping and both addresses intactYes
VCF to CSVTurn a vCard address book into a spreadsheet-ready CSV, one contact per row.Try the tool →

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 →
ComparisonThree vCard Versions, and the Same Person in Each2.1 marks types without an equals sign, 3.0 is what everything reads, 4.0 writes some values as URIs — so a phone can arrive as tel:+33612345678, prefix included. Knowing which you have explains most import surprises.ComparisonTwo Emails in One Cell, or Two Strings in an ArrayA contact can have several phone numbers and several addresses. The CSV joins them with a middle dot into one cell; the JSON keeps them as a list, which is the difference between a script that works and one that splits on a guess.How-toYou Do Not Have to Rename Your Columns to EnglishThe header row is matched in six languages, so prénom, apellidos, Vorname and cognome are all understood. One header is genuinely ambiguous — nom — and it is settled by the column next to it.ComparisonThe JSON Export Keeps Three Things the CSV Has No Column ForSame file, same parser, two outputs. The spreadsheet gets eight columns; the JSON gets the named time zone, the all-day flag and the recurrence rule as well.How-toMerging Calendars and Address Books Appends — It Does Not DeduplicateThe merge tools put every record from every file into one output, in the order you gave them. That is the right default and the one thing to know before you feed in two exports of the same account.How-toBuilding a Calendar From a Schedule You Already Have in a SpreadsheetCourse timetables, match fixtures, shift rotas and conference programmes all start life as a table. Four columns are enough to turn one into a file every calendar application can import.

Related tools

Sources

Spotted a mistake in this article?