Normalize vCard Contacts
Clean a pasted .vcf address book in one pass — trim and lowercase emails, format valid phone numbers with an optional country hint, tidy contact names, and keep custom vCard fields intact.
About this tool
vCard Normalize cleans a pasted .vcf address book while keeping the original
vCard structure. It is useful before importing contacts into a CRM, phone, or
mailing-list tool: normalize the fields people search and dedupe on, without
uploading the address book to a contact-cleanup service.
The transform is intentionally conservative:
- EMAIL values are trimmed and lowercased by default.
- TEL values are reformatted to E.164 only when they parse and validate. Use
Default country (
US,GB,DE, …) for national numbers without a+. - FN, N, and NICKNAME have repeated whitespace collapsed; optional name casing can keep the existing case, title-case it, uppercase it, or lowercase it.
- Unknown properties such as
ORG,ADR,PHOTO,X-*, and customTYPEparameters are preserved rather than rebuilt from a lossy form model.
Folded vCard lines are unfolded before processing, and the input's LF/CRLF line ending style is preserved. Invalid phone numbers are left untouched instead of being guessed into a wrong international number.
Worked example
Input (with default_country=US, name_case=title, lowercase_email=true):
BEGIN:VCARD
VERSION:3.0
FN: jane DOE
N:DOE;jane;;;
TEL;TYPE=CELL:(415) 555-2671
EMAIL: [email protected]
END:VCARD
Output:
BEGIN:VCARD
VERSION:3.0
FN:Jane Doe
N:Doe;Jane;;;
TEL;TYPE=CELL:+14155552671
EMAIL:[email protected]
END:VCARD
FAQ
Why does phone normalization need a default country?
Numbers such as (415) 555-2671 are national-format numbers; the same digits
can mean different things in different countries. The country hint tells the
phone metadata parser how to interpret those numbers. Already-international
numbers that start with + can be normalized without a hint.
Will invalid or short phone numbers be changed?
No. A phone value is rewritten only when it parses and validates for the chosen country metadata. Short codes, extensions the parser cannot understand, typos, and other ambiguous values are left as-is so the tool does not corrupt a contact.
Does this preserve custom vCard fields?
Yes. The tool only rewrites values for EMAIL, TEL, FN, N, and
NICKNAME. It preserves unknown properties and parameters such as ORG, ADR,
PHOTO, X-CUSTOM, and TYPE=work instead of parsing the whole card into a
limited form and serializing it back.
What are the limits of title casing?
Title casing is a simple per-word casing pass. It handles ordinary names like
jane DOE → Jane Doe, but it does not know every cultural or family-name
convention; for example McDonald may become Mcdonald. The default keep
mode only tidies spacing and leaves original casing intact.
Developer & Automation Access
Run it from the terminal
Same engine as this page, headless — via the gizza CLI:
gizza tool vcard-normalize "BEGIN:VCARD
VERSION:3.0
FN: jane DOE
N:DOE;jane;;;
TEL;TYPE=CELL:(415) 555-2671
EMAIL: [email protected]
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-normalize/?data=BEGIN%3AVCARD%0AVERSION%3A3.0%0AFN%3A%20jane%20%20%20DOE%0AN%3ADOE%3Bjane%3B%3B%3B%0ATEL%3BTYPE%3DCELL%3A%28415%29%20555-2671%0AEMAIL%3A%20Jane.DOE%40Example.COM%20%0AEND%3AVCARD&default_country=US&name_case=keep&lowercase_email=trueMachine-readable descriptor: tool.json — title + parameters JSON Schema for agents.
