Network fetches are blocked in this session, so I’m writing from established knowledge and citing only URLs I’m certain of (the SQLite CLI page I did verify, the RFC Editor, Google Contacts help, and DB Browser for SQLite). Here is the article.
An .abbu file is a Contacts Archive from the macOS Contacts app (formerly Address Book). It is not a single file but a package folder, and the contact data inside it lives in a SQLite database named AddressBook-v22.abcddb. You can get a CSV out of it three ways: import the archive into Contacts and export a vCard, then convert that to CSV through Google Contacts; query the SQLite database directly with the sqlite3 tool built into macOS; or open that same database on Windows or Linux with DB Browser for SQLite. All three cost nothing and take 10 to 20 minutes.
What is actually inside an .abbu file?
Right-click the archive in Finder and choose Show Package Contents. You will see AddressBook-v22.abcddb at the top level, an Images folder of contact photos, a Metadata folder, and usually a Sources folder. Each subfolder in Sources is one synced account, such as iCloud or Google, with its own .abcddb database. If the top-level database looks empty, your contacts are in one of those subfolders.
The archive is Apple’s own backup format. No other application reads it directly, which is why every conversion route goes through either Contacts itself or the SQLite file.
Route 1: Mac, no terminal (Contacts plus Google Contacts)
- Create a fresh macOS user account and log into it. Importing an archive replaces every contact on that account, so never do this in your daily account unless you have a current archive of it. Apple documents the import and export menus in the Contacts User Guide.
- In Contacts, choose File, Import, pick the
.abbufile, and confirm the replace warning. - Select all contacts (Command-A), then File, Export, Export vCard. You get one
.vcffile containing every card, in the vCard 3.0 format Apple uses. The vCard standard itself is defined in RFC 6350. - Sign into a Google account with an empty contact list, open Google Contacts Import, and upload the
.vcf. Google caps a single import at roughly 3,000 contacts, so split larger files. - Choose Export, then Google CSV or Outlook CSV. Outlook CSV uses the column names Outlook, Excel, and most CRMs expect.
This route keeps names, multiple phones and emails, addresses, notes, and birthdays. Photos are dropped.
Route 2: Mac terminal, direct from the database
This is faster and does not touch your contacts. Copy the .abcddb file out of the package first so you never write to the archive. Then run:
sqlite3 AddressBook-v22.abcddb .headers on .mode csv .once contacts.csv SELECT r.ZFIRSTNAME AS first_name, r.ZLASTNAME AS last_name, r.ZORGANIZATION AS company, group_concat(DISTINCT e.ZADDRESS) AS emails, group_concat(DISTINCT p.ZFULLNUMBER) AS phones FROM ZABCDRECORD r LEFT JOIN ZABCDEMAILADDRESS e ON e.ZOWNER = r.Z_PK LEFT JOIN ZABCDPHONENUMBER p ON p.ZOWNER = r.Z_PK WHERE r.ZFIRSTNAME IS NOT NULL OR r.ZLASTNAME IS NOT NULL OR r.ZORGANIZATION IS NOT NULL GROUP BY r.Z_PK; .quit The .mode csv and .once commands are documented in the SQLite command-line shell reference. CSV mode quotes fields that contain commas, quotes, or line breaks exactly as RFC 4180 requires, so names like “Smith, Jr.” survive the trip into Excel. Multiple emails or phones land in one cell separated by commas. If you need one column per number, join the tables without group_concat and pivot in a spreadsheet.
Postal addresses live in ZABCDPOSTALADDRESS, and the table and column names vary slightly between macOS releases. Run .tables and .schema ZABCDRECORD to confirm before adapting the query.
Route 3: no Mac at all
Copy the .abbu folder to any machine. Because it is a folder, it travels over a USB drive, a zip, or cloud storage without a Mac. Install DB Browser for SQLite, which runs on Windows, Linux, and macOS. Open AddressBook-v22.abcddb, paste the query above into the Execute SQL tab, and use File, Export, Table(s) as CSV file, or export the query result directly. No command line needed.
Which route should you pick?
| Situation | Best route | Time |
|---|---|---|
| One-off, under 3,000 contacts, want clean Outlook columns | Route 1 | 15 to 20 min |
| Comfortable with Terminal, or more than 3,000 contacts | Route 2 | 5 to 10 min |
| Windows or Linux only | Route 3 | 10 min after install |
What goes wrong, and how to check your output
- Empty CSV. You queried the top-level database but the contacts are in a
Sourcessubfolder. Check each one. - Garbled accents. The export is UTF-8. In Excel use Data, From Text/CSV and set the file origin to UTF-8 rather than double-clicking the file.
- Phone numbers lose leading zeros or plus signs. Set the column to Text before importing into a spreadsheet, or keep the file in a CRM that stores strings.
- Row count mismatch. Compare the CSV line count against the number Contacts shows at the bottom of the window after import. Deleted-but-not-purged records can inflate the SQLite count, and the WHERE clause above filters most of them.
For a production company, this is usually a crew and client list that someone archived from an old Mac Pro. Once it is CSV, it imports straight into a call sheet tool or CRM, and the SQLite route is the one to script if you have several archives to process.