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.

Try:
Normalized vCard

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:

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 DOEJane 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=true

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