← Notes

Exporting macOS Contacts to CSV

Contacts exports vCard, not CSV, and every converter you find online wants you to upload your entire address book to a stranger. Here is what the formats actually do and how to get a spreadsheet safely.

You need your contacts in a spreadsheet — for a mail merge, a CRM import, or just to see what you have. You open Contacts, go to File → Export, and your only options are Contacts Archive and Export vCard. No CSV anywhere.

Why there is no CSV export

This is a real design decision rather than an oversight.

A vCard is a structured record. One person can have four phone numbers, each labelled, three email addresses, two postal addresses with separate street, city, postcode and country fields, a photograph, a birthday, related names, and a notes field of arbitrary length. It is a tree.

A CSV row is flat. To represent that person you need a column for every possible field of every possible type — Phone 1 Type, Phone 1 Value, Phone 2 Type, and so on — and you have to decide in advance how many of each to allow. Every CSV export of contact data is lossy, and different tools lose different things.

So Contacts exports the format that preserves everything, and leaves the flattening to whoever needs it flat.

Getting a vCard first

Whatever route you take, start here:

  1. Open Contacts.
  2. Select the cards you want — Command-A for everything, or select a group in the sidebar first.
  3. File → Export → Export vCard…
  4. Save the .vcf.

One file containing every selected card. This is also, incidentally, the best backup you can make in thirty seconds, and worth doing before any bulk operation.

The conversion step, and the trap in it

Search for "vcf to csv" and you get pages of web converters. Do not use them.

You would be uploading the name, phone number, email address, home address and private notes of every person you know to an unidentified server, to save yourself a few minutes. If you handle client data, that is very likely a breach of whatever data protection regime you operate under, and it is a disproportionate risk regardless.

The safe options:

Import into something that exports CSV. Google Contacts will import a .vcf and export CSV. This moves your data to Google rather than to a stranger, which may or may not be acceptable to you — but at least you know where it went and can delete it afterwards.

Convert locally. If you are comfortable with a terminal, a short Python script using the vobject library will do it, and nothing leaves your machine. This is the correct answer for sensitive data and the wrong answer for most people's patience.

Use an app that exports CSV directly. Skips the round trip entirely.

Decisions you have to make either way

Which fields. A contact with four phone numbers needs four columns or a rule for which to keep. Decide before you export, not while cleaning up afterwards.

Notes. This is the field people forget, and it is the one most likely to contain something you would not want in a shared spreadsheet — health details, private circumstances, negotiating positions. If you are exporting to send somewhere, Notes should almost always be excluded deliberately rather than included by accident.

Character encoding. Export as UTF-8 and open it as UTF-8. If Turkish, accented or non-Latin characters arrive as ç or boxes, the encoding was guessed wrong somewhere. In Excel, use Data → From Text/CSV and set the encoding explicitly rather than double-clicking the file.

Phone number formatting. Spreadsheets will happily strip a leading zero or reformat +90 532... as a number in scientific notation. Set the column to text before importing, or accept that you will be fixing it.

What Compact Contacts changes

Compact Contacts previews CSV and vCard exports before they are written, so you see the columns and the rows you are about to produce rather than discovering the shape of the file afterwards. You choose which columns to include.

Notes are excluded from exports by default — the decision above is made the safe way round, and including them is a deliberate act.

It reads the contacts macOS already has rather than importing them into another silo: no developer contact cloud, no app account, no second copy. Saved views with ALL or ANY rules mean "everyone at this company with an email address" is a filter you can export rather than a manual selection, and the same view is there next month.

Imports work the same way round: you review what is about to be written before it lands.

Keep reading