vCard to JSON

Turn exported .vcf contact cards into a clean JSON array — vCard 2.1, 3.0, and 4.0, with structured names and addresses and typed phones/emails. Runs entirely in your browser, no upload.

Try:
JSON

Convert vCard contacts to JSON

Paste one or more vCard (.vcf) contact cards and get back a clean JSON array of contacts. The parser understands vCard 2.1, 3.0 (RFC 2426), and 4.0 (RFC 6350) — including folded continuation lines, multiple cards in one file, group prefixes like item1.TEL, and value escapes (\n, \,, \;, \\). Everything runs locally in your browser; your contacts are never uploaded.

Worked example

Input:

BEGIN:VCARD
VERSION:3.0
FN:John Doe
N:Doe;John;;Mr.;
EMAIL;TYPE=work:[email protected]
TEL;TYPE=CELL:+15551234567
END:VCARD

Output (pretty-printed, structured):

[
  {
    "version": "3.0",
    "fn": "John Doe",
    "name": { "family": "Doe", "given": "John", "middle": "", "prefix": "Mr.", "suffix": "" },
    "emails": [ { "value": "[email protected]", "types": ["work"] } ],
    "phones": [ { "value": "+15551234567", "types": ["cell"] } ]
  }
]

Repeatable properties (EMAIL, TEL, URL, ADR) collect into arrays, and each one keeps its TYPE tags (lower-cased) in a types array — so a phone marked TYPE=CELL,voice or the vCard 2.1 bare form TEL;WORK;VOICE: both come through as "types": ["cell", "voice"].

Options

Limits & edge cases

FAQ

Which vCard versions does it support?

vCard 2.1, 3.0 (RFC 2426), and 4.0 (RFC 6350). The parser reads the VERSION line into each contact's version field but does not require it — it also handles the 2.1 "bare type" form (TEL;WORK;VOICE:) where types appear without a TYPE= prefix.

How are names and addresses broken down?

With Split Name and Address into fields on (the default), the structured N value maps to family, given, middle, prefix, and suffix, and each ADR maps to poBox, extended, street, locality, region, postalCode, and country. Turn the option off to keep them as the raw ;-separated strings exactly as they appear in the file.

Can I convert a file with many contacts at once?

Yes. Paste as many BEGIN:VCARD … END:VCARD blocks as you like — they become one JSON array in file order. Choose the object output shape to also get a count of how many contacts were parsed.

What happens to a property I don't recognise?

Nothing is lost. Any property outside the known set is collected into an other array as { "property": "...", "value": "...", "types": [...] }, using the lower-cased property name — so custom X- fields and less common properties still make it into the JSON.

Is my data uploaded anywhere?

No. Parsing runs entirely in your browser with WebAssembly — the .vcf text never leaves your device.

Developer & Automation Access

Run it from the terminal

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

gizza tool vcard-to-json "BEGIN:VCARD
VERSION:3.0
FN:John Doe
N:Doe;John;;Mr.;
EMAIL;TYPE=work:[email protected]
TEL;TYPE=CELL:+15551234567
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-to-json/?data=BEGIN%3AVCARD%0AVERSION%3A3.0%0AFN%3AJohn%20Doe%0AN%3ADoe%3BJohn%3B%3BMr.%3B%0AEMAIL%3BTYPE%3Dwork%3Ajohn%40example.com%0ATEL%3BTYPE%3DCELL%3A%2B15551234567%0AEND%3AVCARD&structured=true&wrap=array&pretty=true

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