vCard Duplicate Remover

Clean up an exported .vcf file: find contacts that repeat, then merge each set into one card or drop the extras. Matches on name, email, or phone across vCard 2.1, 3.0, and 4.0 — all in your browser, nothing uploaded.

Try:
Deduplicated vCard

Remove and merge duplicate vCard contacts

Exports from phones, mail apps, and CRMs often stack the same person into a .vcf file two or three times — one card with a work email, another with a mobile number, a third from an old sync. Paste the file here and get back a clean vCard with each contact appearing once. Matching runs across vCard 2.1, 3.0 (RFC 2426), and 4.0 (RFC 6350), and everything happens locally in your browser — your contacts are never uploaded.

Worked example

Two cards for the same person, each holding a different email and phone:

BEGIN:VCARD
VERSION:3.0
FN:John Doe
EMAIL:[email protected]
TEL:+1-555-111-2222
END:VCARD
BEGIN:VCARD
VERSION:3.0
FN:John Doe
EMAIL:[email protected]
TEL:1 (555) 111-2222
END:VCARD

With merge on, the two collapse into one card that keeps both emails while the repeated phone (same digits, written two ways) is kept only once:

BEGIN:VCARD
VERSION:3.0
FN:John Doe
EMAIL:[email protected]
TEL:+1-555-111-2222
EMAIL:[email protected]
END:VCARD

(The survivor keeps its own lines in order, then each new value from the other cards is appended.)

Options

Limits & edge cases

FAQ

How does it decide two contacts are the same?

By the identifiers you choose in Treat as duplicates when they share. With the default Any, two cards are grouped if they share a normalized full name, or any email address (case-insensitive), or any phone number (compared by digits). Groups are transitive: if card A shares a phone with B and B shares an email with C, all three merge into one contact.

What happens to the different phone numbers and emails when merging?

They're all kept. When a group merges, the survivor (the first card) keeps its own fields, and every unique email, phone, URL, and address from the other cards is added to it. Duplicate values — the same email in a different case, or the same phone written with different punctuation — are collapsed to a single entry.

Can I remove duplicates without combining their details?

Yes. Turn Merge each group into one card off. Then for each set of duplicates the tool keeps only the first card exactly as it was and discards the rest, without copying any of their extra emails or phones into the survivor.

Which vCard versions does it handle?

vCard 2.1, 3.0 (RFC 2426), and 4.0 (RFC 6350), including folded continuation lines, group prefixes like item1.TEL, and multiple cards in one file. Each surviving card keeps its original property lines and formatting.

Is my data uploaded anywhere?

No. The whole thing runs in your browser with WebAssembly — the .vcf text never leaves your device, so it's safe to clean up sensitive address books.

Developer & Automation Access

Run it from the terminal

Same engine as this page, headless — via the gizza CLI:

gizza tool vcard-deduplicate "BEGIN:VCARD
VERSION:3.0
FN:John Doe
EMAIL:[email protected]
TEL:+1-555-111-2222
END:VCARD
BEGIN:VCARD
VERSION:3.0
FN:John Doe
EMAIL:[email protected]
TEL:1 (555) 111-2222
END:VCARD"

New to the CLI? Get gizza →

Open it by URL

Pre-fill and auto-run this tool with query parameters — the names match the API/CLI:

https://gizza.ai/tools/vcard-deduplicate/?data=BEGIN%3AVCARD%0AVERSION%3A3.0%0AFN%3AJohn%20Doe%0AEMAIL%3Ajohn%40work.com%0ATEL%3A%2B1-555-111-2222%0AEND%3AVCARD%0ABEGIN%3AVCARD%0AVERSION%3A3.0%0AFN%3AJohn%20Doe%0AEMAIL%3Ajohn%40home.com%0ATEL%3A1%20%28555%29%20111-2222%0AEND%3AVCARD&match_by=any&merge=true

Machine-readable descriptor: tool.json — title + parameters JSON Schema for agents.