CSV to VCF converter
Map your spreadsheet columns onto vCard properties and export every row as a contact. vCard 3.0 or 4.0, one .vcf or one file per contact, all in this tab.
A spreadsheet export and a phone contact list hold the same information in incompatible shapes: CSV is a grid with whatever headers the exporting app felt like using, while a vCard is a list of named properties with a fixed vocabulary. This page bridges them by asking you to say which column is the mobile number and which is the job title, then writing one VCARD block per row. It reads the header line, guesses a mapping from names it recognises (including Danish headers like Fornavn, Efternavn and Postnummer), and lets you correct every guess before anything is written. The result is a plain .vcf you can import into iOS Contacts, Google Contacts, Outlook or a Nextcloud address book.
Key facts about CSV to VCF converter
| Mapped properties | FN, N, ORG, TITLE, TEL (cell/work/home), EMAIL (home/work), ADR, URL, BDAY, NOTE, PHOTO |
|---|---|
| Versions written | vCard 3.0 (RFC 2426) and vCard 4.0 (RFC 6350) — picked per export, not converted afterwards |
| 3.0 vs 4.0 phone | 3.0 writes TEL;TYPE=CELL:+45 12 34 56 78; 4.0 writes TEL;TYPE=cell;VALUE=uri:tel:+4512345678 |
| Mandatory field | FN — a row with no first name, last name, full name or organization is skipped and counted |
| Escaping | Backslash, semicolon, comma and newline in a value are escaped; lines fold at 75 UTF-8 bytes |
| Line endings | CRLF, as both RFCs require — a .vcf with bare LF is rejected by some Outlook builds |
| Photo handling | A photo column becomes a URI reference (PHOTO;VALUE=URL in 3.0, PHOTO;MEDIATYPE in 4.0); the image is never downloaded or embedded |
| Birthday parsing | YYYY-MM-DD and DD/MM/YYYY are recognised; 3.0 keeps the dashes, 4.0 writes YYYYMMDD |
| Output shapes | One .vcf holding every contact, or a ZIP with one .vcf per contact for services that import singles |
| Delimiter | Papa Parse sniffs comma, semicolon and tab from the header line — a Danish Excel export with semicolons works unchanged |
| Input ceiling | 10 MB of CSV text, which is roughly 60,000 contact rows |
| Not written | Groups, categories, IMPP handles, multiple addresses per contact, and embedded base64 photos |
What happens to your file
The CSV is read by a FileReader in this tab, parsed by Papa Parse, and turned into vCard text by string concatenation. The .vcf you download is a Blob built in page memory and handed to a temporary object URL; the per-contact ZIP is assembled by JSZip in the same tab. There is no upload endpoint and no Pages Function involved, so names, phone numbers and email addresses never travel. The one thing worth stating plainly: if you map a Photo column, the tool writes the URL you gave into the card as a reference — it does not fetch that image, so no request is made to the host holding it either. Close the tab and every parsed row is gone; nothing is stored in localStorage.
About this tool
- 1
Load the CSV
Drop the file, browse for it, or paste the text. The first line must be the column names — that is what the mapping list is built from.
- 2
Check the auto-mapping
Headers like Email, Mobile, Company and Postnummer are matched automatically. Every field has a dropdown, so anything guessed wrong can be repointed or set to 'not used'.
- 3
Pick the vCard version
Choose 3.0 if you are importing into Outlook or an older address book, 4.0 for modern CardDAV servers and iOS. The two write genuinely different property syntax.
- 4
Choose one file or many
One .vcf with every contact is what Google Contacts and iOS expect. The ZIP option gives one file per contact for services that only take a single card at a time.
- 5
Read the preview
The first card is printed in full. Check the FN line and the phone format before you download — that is the fastest way to catch a mis-mapped column.
- 6
Download and import
Import the .vcf in your contacts app. If rows were skipped, the counter above the preview says how many and why: no usable name.
| Input | .csv, .tsv or .txt with a header row, or CSV pasted into the box; up to 10 MB |
|---|---|
| Output | text/vcard (.vcf), UTF-8, CRLF line endings — or a .zip of individual cards |
| Parser | Papa Parse 5 with header mode and quoted-field support, so a value containing a comma survives |
| Import targets tested | iOS and macOS Contacts, Google Contacts, Outlook (desktop and web), Thunderbird, Nextcloud |
| Character set | UTF-8 throughout — Danish, German and Greek names come through unchanged |
| Browser support | Any current Chrome, Edge, Firefox or Safari; the clipboard button needs a secure context |
| Offline | Works with the network off once the page has loaded |
| Account | None — no signup, no quota, no watermark |
- Export from Google Contacts, delete the columns you do not want, and re-import: this page is the return leg of that round trip.
- If your phone numbers lack a country code, add one in the spreadsheet first — vCard 4.0 turns TEL into a tel: URI, and a bare local number is ambiguous there.
- Map Company even when you have names: it becomes ORG, and it is also the fallback the tool uses for FN when a row has no person name at all.
- A Danish Excel export usually uses semicolons as the delimiter; paste it as-is, the parser detects the separator from the header line.
- Leave Work email unmapped if you only have one address — two EMAIL properties with the same value produce duplicate entries in some address books.
- The ZIP option names each file after the contact, so a folder of cards is browsable; duplicates get a numeric suffix rather than overwriting each other.
- Auto-detected column mapping with manual override per field
- vCard 3.0 and 4.0 with version-correct TEL, EMAIL, ADR and PHOTO syntax
- Single .vcf or a ZIP of one card per contact
- RFC escaping and 75-byte line folding
- Live preview of the first generated card
- Skipped-row counter instead of silently dropping data
- Moving a customer list out of a CRM export and into the phone of whoever is doing the calling.
- Turning a conference attendee spreadsheet into cards the sales team can import before they travel.
- Rebuilding an address book after a phone migration left you with only a CSV backup.
- Loading a club or class roster into Google Contacts so group messaging works.
- Preparing per-contact .vcf files to attach to individual emails or hand to a partner system that imports one card at a time.
- Round-tripping contacts that were flattened with the vCard to CSV tool, cleaned in a spreadsheet, and now need to go back.
Related tools
View allWorks well with this5
Other CSV tools4
More in Data & Dev12
Updated