data-organize · Browser tool
vCard Contact Tools
Load one or more .vcf files, see every contact in a table, merge the duplicates you choose, and write the result back out as one file or as a file per contact.
Contacts in
Duplicates
Nothing is changed until you press Merge. Tick the groups you want combined.
All contacts
Contacts out
A batch size of 1 writes one file per contact. Browsers ask before saving several files at once, so expect a permission prompt.
What this does
A .vcf file is a stack of text records, each running from BEGIN:VCARD to END:VCARD. Three versions are still in circulation and they disagree with each other, which is why a file exported from an old phone often imports badly somewhere else.
What gets read
Lines longer than 75 octets are folded, with the continuation marked by a leading space or tab; the parser rejoins them before looking at anything. Version 2.1 files, still produced by older address books and some Android exports, encode accented characters as quoted-printable — Gr=C3=B6ner rather than Gröner — and may continue a value across lines with a trailing equals sign. Both are decoded here, and the contact is written back out as plain UTF‑8 with the version raised to 3.0, since a 2.1 record with unencoded text confuses newer readers. Bare parameters such as TEL;CELL, legal in 2.1 and not in later versions, become TEL;TYPE=CELL in that rewrite. Records from 3.0 and 4.0 files keep their own version untouched.
How duplicates are decided
Matching on email compares addresses case-insensitively, since the domain part is defined as case-insensitive and in practice mailboxes are too. Matching on phone keeps only the digits and compares the last nine, so +49 170 555 1234 and 0170 5551234 land together; that is a deliberate approximation and it will occasionally pair two short internal extensions that are not the same line. Matching on name compares the display name with punctuation and spacing removed, which is the loosest of the three. Contacts linked through a shared value are grouped transitively: if card A shares an address with B and B shares a different one with C, all three end up in one group.
What merging does and does not do
Addresses, phone numbers, URLs and postal addresses are pooled, with exact repeats dropped. Fields that can only hold one value — name, organisation, job title, birthday, notes — are taken from the first card in the group. Where a later card disagrees, the difference is listed above the Merge button before you commit, and the rejected value is shown so you can decide whether the wrong card is first. Nothing is guessed: if two cards spell a company differently, that is reported as a conflict rather than resolved.
Limits
Photographs stored as base64 inside a card are carried through unchanged but are not compared, so two cards with different pictures merge on the first one. Grouped properties written by Apple, such as item1.EMAIL, keep their group prefix. A record whose BEGIN has no matching END is reported rather than repaired.