Convert VCF to CSV

Turn a .vcf contacts export into a five column CSV with name, phones, emails, organization and address. Handles many contacts per file. No upload.

🌐 Español

Drop your files here (.vcf)

πŸ”’ Private by design: your files are processed locally in your browser and never uploaded to any server.

Contacts are exported in a format spreadsheets cannot read

Every phone and every mail account will export your contacts, and almost all of them export a .vcf file. It is the standard interchange format for contact cards and it is a plain text format, so it looks like it ought to be readable.

Open one in a spreadsheet and you get nonsense, because it is not tabular. Each contact is a block of property lines with repeated properties allowed, structured values packed into single lines with internal separators, and long values wrapped across physical lines. None of that maps onto rows and columns without work.

That work is what this page does. It parses the contact structure properly and flattens it into a five column table that any spreadsheet opens directly.

Converting an export

  1. Drop in one or more .vcf files. Several at once is fine.
  2. Run it. Each file becomes its own CSV named after the original.
  3. Open the result in any spreadsheet, or feed it to whatever wanted a table.

The five column decision

A contact can hold any number of phone numbers, email addresses, organizations and addresses. That immediately raises the question of how to fit them into a table, and there are two answers.

One is a column per value, so a contact with three phones needs three phone columns. The width of the spreadsheet is then set by whichever single contact has the most of anything, most rows have mostly empty cells, and a script consuming the file has to handle a variable column count.

The other is a fixed set of columns with repeated values joined inside a cell. That is what this tool does, using a semicolon and a space as the separator. The width is always five, every row has the same shape, and if you do need the values apart, splitting one column by a known separator is a single operation in any spreadsheet.

The parsing details that break naive converters

Three things about the format catch out anything that treats it as line oriented text.

Long values are wrapped. The specification folds a line by breaking it and starting the continuation with a space or a tab, so a long address or note occupies several physical lines. Anything that parses line by line without rejoining them first silently truncates those values at the fold, and the loss is invisible because the truncated value still looks like a value. Rejoining happens here before any parsing begins.

Structured values pack several fields into one line. A name, an address and an organization are each several parts separated by semicolons, most of which are commonly empty. They are split, unescaped, trimmed and rejoined with the empty parts dropped, which is why an address comes out reading like an address rather than a run of stray commas.

Escaping is real. Commas, semicolons and newlines inside a value are escaped in the file and have to be unescaped on the way out, and the escaping has to be respected when splitting a structured value, otherwise an escaped semicolon inside a street name splits the address in the wrong place.

Where the output goes next

A CSV is the universal handoff format, which is the point of converting. To check the result before importing it somewhere, CSV Viewer displays it as a table in the browser. To pull just the addresses out of a contacts export, Email Extractor works on any text.

For the reverse direction, building a contact card rather than reading one, vCard QR Generator writes the same format this tool reads and produces a scannable code alongside it. To turn the resulting table into printed labels, Label Maker takes it from there. The rest are on the dev tools hub.

See it in action

Screenshot of the Convert VCF to CSV tool with sysfenix-contacts.vcf (290 B) loaded
Convert VCF to CSV mid-process: sysfenix-contacts.vcf (290 B) loaded.
Screenshot of the Convert VCF to CSV result screen showing sysfenix-contacts.csv ready to download (132 B, 54% smaller)
The finished result: sysfenix-contacts.csv ready to download (132 B, 54% smaller). The download link is a local blob URL β€” the file never leaves your device.

Frequently asked questions

Will it read a file containing all my contacts, not just one?

Yes. A .vcf export from a phone or a mail account is normally hundreds of contact records concatenated one after another in a single file, and every one is read rather than only the first. Anything sitting outside a contact record, such as stray blank lines or junk before the first one, is ignored rather than treated as an error.

What columns do I get?

Exactly five, every time. Name, phones, emails, organization and address. That fixed shape is a deliberate choice, because a contact can hold any number of phone numbers and email addresses and a column per value would produce a ragged spreadsheet whose width depended on whichever contact happened to have the most.

So what happens to a contact with three phone numbers?

All three go into the one phone cell, separated by a semicolon and a space. The same applies to multiple emails, organizations and addresses. A semicolon cannot be confused with the comma that separates CSV fields, so the cell stays intact when a spreadsheet opens it, and splitting the cell afterwards is a single operation if you need the values apart.

What if a contact has no display name?

It is assembled from the structured name field instead. That field stores the parts separately as family, given, additional, prefix and suffix, and they are reassembled in normal reading order with the empty parts dropped. Older exports and some address books omit the display name entirely, so without this those rows would come out nameless.

How are addresses and organizations flattened?

Both are structured fields in the format, made of several parts separated by semicolons, and both are joined into one readable string with the empty parts removed. An address becomes its parts joined by commas, and an organization becomes company and unit joined by a hyphen. Real exports leave several address parts blank, which is why dropping the empties matters rather than producing a string of stray separators.

Does it cope with long values that were wrapped across lines?

Yes, and this is the detail that breaks naive converters. The format wraps a long value by starting the continuation line with a space or a tab, so a long note or address occupies several physical lines. Those are rejoined before anything is parsed, which is why a wrapped address arrives whole here rather than truncated at the wrap point. Files using any of the three common line ending conventions are handled.

Can I convert several files at once?

Yes. Each file is converted separately and comes back as its own CSV named after the original, so exports from a phone and from a mail account stay as two files rather than being merged into one. If any file cannot be read as a contacts file the conversion stops rather than producing a partial set, and the file name is part of the reason recorded internally.

Related tools