Convert ABCDDB to CSV
Export Apple Contacts data to CSV through vCards for spreadsheets, CRMs, and contact imports.
Make CSV files online
We can't read ABCDDB files yet, so this conversion isn't available. If you can export your work to one of these formats - or others - we'll turn it into CSV:
Want to convert ABCDDB to CSV?
Let us know. We pick the conversions to add next by how many people ask for them.
How to convert abcddb to csv file
- Contacts and address books
- No ratings yet.
Spreadsheet, CRM, and mailing-list software generally cannot open Apple’s internal ABCDDB database directly, so contacts must be exported to a portable format first. Converting the exported vCards to CSV makes the records usable in applications that require rows and columns.
What the ABCDDB format is
ABCDDB is the internal database format used by macOS Address Book and Contacts. A common filename is AddressBook-v22.abcddb, usually under ~/Library/Application Support/AddressBook/; the exact filename, schema, and location vary by macOS version.
It is an SQLite-based application database, not a contact-exchange format. The surrounding AddressBook folder can contain contact photos, indexes, account data, metadata, and other files. Do not rename the file to .csv or edit its SQLite tables unless you are performing specialized data recovery; direct database extraction can expose private schema details and produce incomplete, duplicated, or incorrectly linked contacts.
What the CSV format is
CSV represents a table as records separated by lines and fields separated by a delimiter, normally a comma. Spreadsheet applications, CRMs, databases, mailing-list systems, and many contact-import tools accept it.
CSV can carry common values such as names, organizations, job titles, phone numbers, email addresses, postal addresses, and notes. It has no universal field, label, encoding, or escaping standard and cannot natively preserve contact photos, groups, linked cards, account metadata, or every custom Apple field.
How to convert the contacts
Export vCards from Contacts
- Quit Contacts and make a backup of the complete
~/Library/Application Support/AddressBook/folder, rather than relying on a copy of one database file. - Open Contacts on the Mac containing the records. If the contacts belong to iCloud, Exchange, Google, or another account, wait for synchronization to finish.
- Select the required cards, or press
Command-Ato select all cards. - Choose File → Export → Export vCard and save the resulting
.vcffile. - Convert the
.vcffile to CSV with a local utility or script. Desktop vCard-to-CSV applications can provide field mapping; a local script gives more control and avoids uploading personal contact data.
For a small, non-sensitive export, online services such as CloudConvert or Convertio may provide VCF-to-CSV conversion. Confirm that the service currently supports .vcf input and CSV output, and check its retention and deletion terms before uploading an address book.
Convert vCards locally with Python
Install the parser:
python3 -m pip install vobject
Save the following as vcf_to_csv.py. It reads standard vCard name, organization, address, email, telephone, and note properties and writes a UTF-8 CSV file:
import csv
import sys
import vobject
source, destination = sys.argv[1], sys.argv[2]
fields = [
"first_name", "last_name", "organization", "title",
"email", "phone", "street", "city", "region", "postal_code",
"country", "note"
]
def items(card, name):
return card.contents.get(name, [])
def text(value):
if isinstance(value, (list, tuple)):
return ", ".join(str(x) for x in value)
return str(value) if value is not None else ""
def first(card, name):
values = items(card, name)
return text(values[0].value) if values else ""
def name_parts(card):
values = items(card, "n")
if not values:
return "", ""
name = values[0].value
return text(name.given), text(name.family)
with open(source, encoding="utf-8") as handle:
cards = list(vobject.readComponents(handle.read()))
with open(destination, "w", newline="", encoding="utf-8-sig") as output:
writer = csv.DictWriter(output, fieldnames=fields)
writer.writeheader()
for card in cards:
given, family = name_parts(card)
addresses = items(card, "adr")
address = addresses[0].value if addresses else None
writer.writerow({
"first_name": given,
"last_name": family,
"organization": first(card, "org"),
"title": first(card, "title"),
"email": "; ".join(text(x.value) for x in items(card, "email")),
"phone": "; ".join(text(x.value) for x in items(card, "tel")),
"street": text(address.street) if address else "",
"city": text(address.city) if address else "",
"region": text(address.region) if address else "",
"postal_code": text(address.code) if address else "",
"country": text(address.country) if address else "",
"note": first(card, "note"),
})
Run it with:
python3 vcf_to_csv.py contacts.vcf contacts.csv
When importing contacts.csv, select UTF-8 encoding and comma as the delimiter if the destination application asks. The UTF-8 BOM used by the script helps some versions of Microsoft Excel detect non-ASCII characters correctly.
Quality and compatibility limits
The script combines multiple email addresses and telephone numbers in one field separated by semicolons. If the destination requires separate columns, change the script to write fields such as email_1, email_2, phone_1, and phone_2.
Only the first postal address is written. Address labels, additional addresses, contact groups, photos, birthdays, URLs, relationships, custom fields, and some account-specific metadata are omitted unless the script or destination schema is extended.
Check names, international phone numbers, multiline addresses, labels, duplicate cards, non-ASCII characters, and empty fields after import. CSV has no fixed contact schema, so the target application’s field-mapping rules determine how each column is interpreted.
Information about file extensions and file types is provided by File-Extensions.org