Merging duplicate contacts on a Mac
macOS has a Look for Duplicates command that works on exact name matches and quietly decides what to do with everything else. Here is what it merges, what it misses, and how to clean an address book without losing the notes.
Duplicates appear in an address book the way dust appears on a shelf. You add an iCloud account and a work Exchange account. You import a CSV from an old phone. Somebody's number arrives from a message thread and again from a shared vCard. Six months later you have three cards for the same person and none of them has all the information.
The command macOS already has
Open Contacts. In the menu bar: Card → Look for Duplicates…
It scans the currently visible list, reports how many duplicates it found, and offers to merge them. It also offers to merge cards that look like the same person under slightly different names.
It is genuinely useful and you should run it first. What it will not tell you is how it decided.
What it actually does
Three things worth knowing before you click Merge:
It matches on names, principally. Two cards for "Ayşe Yılmaz" get found. "Ayse Yilmaz" and "Ayşe Yılmaz" may not. "A. Yılmaz" almost certainly will not, and neither will the card where the name field is empty and only the company is filled in — which is common for cards that arrived from an email signature.
It combines fields rather than choosing between them. When one card has a mobile number and the other has a work number, the merged card keeps both. That is usually what you want. When both cards have a different value for the same field — two different job titles, two different addresses labelled "home" — you end up with both on one card and no indication which is current.
Notes are the risky field. The Notes field is where people keep the things that are not in any other field: how you met, what they ordered last time, the name of their assistant. When two cards both have notes, merging concatenates rather than picks. That is the safe behaviour, but it means a card that has been merged three times has a notes field that reads like a ransom letter, and nothing tells you which fragment came from where.
There is no preview. You are told a count, not a list. You approve the operation without seeing a single proposed result.
Before you touch anything: take a backup
This takes under a minute and is the only step in this article that is non-negotiable.
In Contacts: File → Export → Contacts Archive…. That writes a .abbu bundle containing the whole database, which you can restore from the same menu. If you would rather have something portable, select all your cards and use File → Export → Export vCard… instead — a single .vcf you can open anywhere.
Do this before Look for Duplicates, not after. Merges are not individually undoable once you have moved on.
The duplicates the command will not find
After the automatic pass, you will still have:
- The same person under two spellings. Accented characters, married names, transliterations, nicknames.
- Company cards. A card with no first or last name and only an organisation, duplicated three times because three colleagues shared it.
- Cards that differ only in one field's formatting.
+90 532 000 00 00and0532 000 00 00are the same number to a human and two different numbers to a database. This is also why "merged" cards often end up with four phone numbers that are really two. - Cards split across accounts. If the same person exists once in iCloud and once in a Google account, Contacts may show them as a unified card in the interface while keeping them as two separate records underneath. Deleting "the duplicate" then deletes the real one from one account.
That last one catches people out badly. Check View → Groups and look at which account a card actually lives in before deleting anything.
A cleanup that does not create new problems
- Export an archive.
- Run Look for Duplicates and accept it.
- Sort by company, then scan for organisation-only cards that repeat.
- Standardise phone number formatting before hunting for number duplicates, not after — otherwise you are comparing strings that will never match.
- Go through the merged cards with long Notes fields and tidy them while you still remember the context.
- Only then start deleting.
Steps four and five are where the time goes, and they are exactly the steps Contacts gives you no help with. Sorting by a field you care about, seeing many records at once, and editing one field across many cards are not things the stock app is built for — it is designed around looking at one person at a time.
What Compact Contacts changes
Compact Contacts is a workspace for the contacts already on your Mac, which means it does not create another silo — no developer cloud, no app account, no second copy of your data. It reads what macOS already has.
For this job specifically: it merges field by field, so you choose which job title survives rather than accepting both. It previews every Bulk Edit before it saves, so the phone-number standardisation in step four is a rule you can see the results of first, across text and regular-expression transformations. It shows a dense, sortable table with the columns you choose, so scanning for organisation duplicates is a sort rather than a scroll. And it keeps long Notes visible next to the record you are editing, which is the whole problem with step five.
Eligible changes can be recovered from an encrypted local history, which is a better safety net than remembering what you did. It is still worth exporting that archive first.