1. Your contacts file
A .vcf export from a phone, an address book, a CRM or a script.
Choose a file or paste the text, then click Check contacts.
Result
Fixed file
The rules, and what they leave out
- Structure: every BEGIN:VCARD closed by END:VCARD, VERSION (2.1, 3.0 or 4.0) first in each card, nothing outside a card.
- Names: FN required in 3.0 and 4.0; N required in 3.0 and 2.1, with its five components (Family;Given;Additional;Prefix;Suffix).
- Values: EMAIL looks like an address (no mailto:, no spaces), TEL has digits and a plausible length, BDAY and ANNIVERSARY are real dates.
- Encoding: quoted-printable is a 2.1 encoding and is flagged in 3.0 and 4.0 cards; CHARSET is flagged in 4.0.
- Duplicates: repeated UIDs, repeated email addresses across cards, and byte-identical cards.
- Fixed automatically: a missing FN built from N, N padded to five components, identical duplicate cards dropped, lines refolded at 75 octets, CRLF line endings.
- Never guessed: which version a card with no VERSION is, how to merge near-duplicate contacts, how to decode quoted-printable text.
- Not checked: whether a given app will accept the file, that an address or number is real, embedded photos, vendor X- extensions. Read from memory of RFC 6350 and RFC 2426; confirm against the current standards.
Common questions
Why do contacts show up blank or missing after importing a .vcf file?
The usual causes are a card with no FN (formatted name), which vCard 3.0 and 4.0 require, a card with no END:VCARD so the next card is swallowed, a missing or wrong VERSION line, and two cards sharing a UID so one overwrites the other. This tool reports each with its line number.
Why do accented characters look like =C3=A9 after import?
That is quoted-printable, an encoding from vCard 2.1. A 3.0 or 4.0 reader does not decode it and shows the raw codes. The tool flags it; it does not decode it for you because that needs the card's character set.
Can it remove duplicate contacts?
It removes a card only when every property is identical to an earlier card, ignoring REV and PRODID. Near-duplicates (same email, different spelling) are reported, never merged, because which details to keep cannot be proven.
What does the fixed file change?
Only things it can prove: builds a missing FN from N, pads N to its five components, drops byte-identical duplicate cards, refolds lines to 75 octets and writes CRLF line endings. Everything else is left exactly as it was and listed as a finding.
Is my contact list uploaded anywhere?
No. The page reads the file in your browser and a test in the code asserts there are no network calls.
What does this not check?
Whether a particular app will accept the file, that an email address or phone number is real or reachable, embedded photos, or vendor extension properties (X- fields).