Split a VCF File — Per Contact, in Chunks, or A–Z
Drop one .vcf and download one file per contact, files of N contacts, or an A–Z set. Original card bytes are kept — photos included. Free, in your browser, nothing uploaded.
Drop a VCF / vCard file here
One .vcf file — split into one file per contact, files of N, or A–Z on your device. Nothing is uploaded.
100% in your browser — your contacts never leave your device
Three ways to split a VCF file
Drop one .vcf. Dropping another replaces it. Files over 10 MB, empty files, or files whose size cannot be read, are refused. Three radios then pick the cut.
One file per contact writes a separate .vcf for every BEGIN:VCARD block, named after the display name.
Files of N contacts packs consecutive cards, N per file (default 100). The last file is shorter when the remainder is not a full group. The number box is enabled only in this mode.
Split A–Z by display name (+ other.vcf) groups by the first letter after accents are stripped, so Élodie lands in E.vcf. Digits, symbols and unnamed cards go in other.vcf. Empty letters are skipped.
The summary is “N contacts found · K files” (or “1 contact” / “1 file”). The first ten output names are listed; past that, one line says how many more there are (“… and 5 more”). One resulting file downloads as that .vcf; more than one downloads as a zip.
| Mode | File names | When |
|---|---|---|
| One file per contact | Display name.vcf, Name-2.vcf, contact-N.vcf | Outlook desktop opens or imports only the first vCard in a file |
| Files of N contacts | contacts-1.vcf, zero-padded from 10 groups | Importers with a per-file limit; default N is 100 |
| Split A–Z by display name | A.vcf … Z.vcf, other.vcf | Handing out a share of an address book; Élodie lands in E.vcf |
Bytes preserved — PHOTO and X- lines untouched
Each card is cut out of the source with a regular expression that finds BEGIN:VCARD … END:VCARD. The matched substring is stored as-is. We never parse a card and write a new one, so PHOTO, X- fields, folding and unknown properties stay.
Inside a file, blocks are joined with CRLF plus a trailing CRLF. Line endings inside a card stay as they were. Text outside a block is dropped: a byte-order mark, a comment, a card cut off at the end of the file with no END:VCARD. Mixed 2.1, 3.0 and 4.0 cards keep their own VERSION line. A 3.0 PHOTO;ENCODING=b line is still that line, and so is a 2.1 PHOTO;ENCODING=BASE64 line. One limit: the file is read as UTF-8 text, so a UTF-8 or ASCII .vcf comes out byte for byte, while a legacy single-byte encoding such as Latin-1 would have its non-ASCII bytes turned into replacement characters.
The parser runs only to pick a display name for file names and A–Z grouping. Its objects are not fed into a generator — if they were, PHOTO would vanish, because the generator on this site has no photo field.
How the files are named, and the -2 / -3 suffixes
Per-contact file names start from the same display name the rest of this site uses: FN if present, otherwise the N parts, otherwise ORG, otherwise the first email, otherwise the first phone. Characters \ / : * ? " < > | are stripped, runs of whitespace become one underscore, and the result is cut at 60 characters. If nothing is left, the file is contact-N.vcf, where N is the 1-based position of that card in the source (the first card is contact-1).
A second card that sanitizes to the same name becomes Name-2.vcf, then Name-3.vcf. The comparison is case-insensitive, so bob.vcf and Bob.vcf are the same slot.
Chunk files are contacts-1.vcf, contacts-2.vcf and so on. When there are ten or more groups the numbers are zero-padded (contacts-01.vcf … contacts-12.vcf) so a file listing stays in order.
Letter files are A.vcf through Z.vcf for the letters that have at least one card, then other.vcf last if anything landed there.
Why split at all — Outlook imports only the first contact of a multi-card file
Outlook desktop’s File → Open a .vcf, and double-clicking a .vcf, opens or imports only the first vCard in the file. A multi-card export looks like one contact. One file per contact exists so each card is its own file, which that path can open.
Some importers also have per-file limits. The cap differs by product, so this page does not quote a vendor number. Files of N contacts lets you import in rounds of a size you choose. 100 is the default because it is a round number, not because a product documented it.
A–Z is for handing out a share of an address book: A–G to one person, H–M to another, the rest later. other.vcf holds the cards that do not start with A–Z. This is not an Outlook add-in. It writes files. You import them the same way you import any other .vcf.
Merge, split or convert — which tool
If you have several .vcf files and want one, that is the reverse job: Merge VCF files. It concatenates original blocks the same way this page splits them.
If you need to edit names, phones or emails in a spreadsheet, use VCF to CSV, clean the rows, then convert back. That round-trip drops PHOTO. Split does not.
If you are not sure what is in a file, open it in the viewer first, then come back. For the syntax of a card — VERSION, FN, N, TEL, folding — see the vCard format reference.
Pick split when the cards are already right and you need them in smaller files. Pick merge when they are already right and you need them in one file. Pick the spreadsheet tools when the cards are not right.
Split VCF file — FAQ
How do I split a VCF file into one file per contact?
Drop one .vcf onto the box above, or pick it with Choose .vcf file. The file is split into original BEGIN:VCARD blocks. Choose the radio labelled One file per contact. The summary shows how many contacts and how many files; the first ten file names are listed. Download is a zip of one .vcf per card, or a single .vcf if the source only had one card.
Does splitting change or re-encode my contacts?
No. Each card is the original BEGIN:VCARD … END:VCARD block, cut with a regular expression and never parsed-then-regenerated. Inside a file, blocks are joined with CRLF plus a trailing CRLF. Line endings inside a card stay as they were. The parser is used for names only. Output is never re-serialized.
What happens to photos in the vCards?
They stay. PHOTO properties sit inside the original block, including PHOTO;ENCODING=b, base64 bodies and folding. A tool that parses a contact and writes a new vCard loses PHOTO when its generator has no photo field — the generator on this site has none, which is why this splitter never regenerates a card. The photo bytes are still there.
How are the split files named?
One file per contact uses the display name (FN, else N parts, else ORG, else first email, else first phone), with \ / : * ? " < > | removed, runs of whitespace turned into one _, cut at 60 characters, plus .vcf. A second card with the same name becomes Name-2.vcf, then Name-3.vcf, compared case-insensitively. Cards with no name become contact-N, where N is the 1-based position in the source. Chunk files are contacts-1.vcf, contacts-2.vcf, zero-padded when there are 10 or more. Letter files are A.vcf … Z.vcf and other.vcf.
Why does Outlook only import the first contact from my VCF?
Outlook desktop’s File → Open a .vcf, and double-clicking a .vcf, opens or imports only the first vCard in the file. One file per contact writes each card as its own .vcf so that path can open them. This page does not talk to Outlook; it writes files. Some importers also have per-file limits, which is what Files of N contacts is for.
Is the file uploaded to a server?
No. The file is read with the browser File API and split in JavaScript on your device. There is no upload endpoint. After the page has loaded, reading and cutting the file need no network. The zip download loads one extra script the first time it runs, so keep the connection until that first download; a single .vcf download needs nothing more. The same rule about uploads applies to every tool on this site.
What if my file has no BEGIN:VCARD blocks or is bigger than 10 MB?
No complete BEGIN:VCARD … END:VCARD blocks produces the error “No vCards found in that file. Make sure it is a .vcf file with BEGIN:VCARD / END:VCARD blocks.” A file over 10 MB is refused with the 10 MB safety-limit message; an empty file, or one whose size cannot be read, is refused as well. A card cut off at the end of the file — no END:VCARD — is ignored and is not carried into the download.
Splitter cuts original BEGIN:VCARD blocks (RFC 2426, RFC 6350 and vCard 2.1, including PHOTO and unknown properties) out of the source file; the parser is used for names only — output is never re-serialized; the split path is exercised by scripts/test-split.mjs. Last checked: August 26, 2026. About this site