VCF file problems fall into two categories. Corruption (the file itself is damaged): open in a text editor and check that BEGIN:VCARD and END:VCARD counts match, that the file does not end abruptly and that no null bytes are present. Import errors (the file is structurally intact but rejected by the platform): convert to vCard 3.0 with UTF-8 encoding, split batches to 200-500 contacts and remove unsupported custom fields. If you are unsure which applies, start with the diagnosis flowchart below.
Introduction
VCF (vCard) files store and transfer contact information between mobile devices, email clients and contact management platforms. When a VCF file fails, the cause is almost always one of two things: the file itself is structurally damaged (corruption) or the file is valid but rejected by the target platform (import error).
These are different problems with different fixes. Treating an import error as corruption – or vice versa – wastes time. This guide covers both, with a clear diagnosis step first so you fix the right thing.
The repair and troubleshooting methods here are drawn from over a decade of professional contact data work, including forensic file analysis and large-scale contact migration across every major platform.
Diagnosing Your VCF Problem
Before attempting any fix, identify which category your problem falls into. Open the VCF file in a plain text editor (Notepad on Windows, TextEdit on Mac or Notepad++ for larger files).
Corruption Indicators
- BEGIN:VCARD and END:VCARD counts do not match
- File ends abruptly without END:VCARD
- Names contain garbled characters (ü instead of u-umlaut)
- Contacts run together without separators
- Null bytes visible in hex view
- File opens as blank or shows binary garbage
Import Error Indicators
- File opens and looks correct in a text editor
- Platform shows “Invalid VCF file” or “Import failed”
- File works on one platform but fails on another
- Only some contacts import, others are skipped
- Import fails only for large files (100+ contacts)
- Error message mentions version or format
Rule of Thumb
If the file looks readable in a text editor with proper BEGIN/END structure, go to the Import Errors section. If the file looks broken, garbled or structurally wrong, start with Fixing Corrupted VCF Files below.
How to Fix Corrupted VCF Files
Signs Your VCF File Is Corrupted
Won’t Open
File shows binary content, blank page or error on open
Garbled Text
Names or fields display as scrambled characters
Wrong Count
Fewer contacts imported than the file should contain
Merged Data
Two contacts appear as one, sharing fields from both
Before editing the file, always make a backup copy. Name it original-backup.vcf and save it separately. All repairs below are performed on the working copy.
Run these four checks first:
Check 1: Count BEGIN and END markers. In Notepad++, use Find (Ctrl+F) to count occurrences of BEGIN:VCARD and END:VCARD. The counts should be equal. If BEGIN count exceeds END count, you have missing END tags. If END count exceeds BEGIN count, you have missing BEGIN tags or orphan END markers.
Check 2: Look at the file ending. Scroll to the very end of the file. The last line should be END:VCARD, possibly followed by a single empty line. If the file ends with a partial property or mid-word content, it is truncated.
Check 3: Search for null bytes. In Notepad++, use Find with “Extended” search mode and search for \0. Any matches indicate null bytes that will break most VCF parsers. In VS Code, null bytes appear as small rectangles or question marks within otherwise normal text.
Check 4: Check the first bytes. The very first characters should be BEGIN:VCARD. If the file starts with EF BB BF (visible as odd characters before BEGIN), it has a UTF-8 BOM. If it starts with random binary data before the first BEGIN, the file has prepended garbage.
Missing BEGIN/END Tags
When a BEGIN:VCARD or END:VCARD marker is missing, the parser cannot determine where one contact ends and the next begins. This typically causes two contacts to merge into one or all contacts after the break point to be lost.
To fix: search for property sequences where one contact’s data flows directly into another’s without a separator. Insert END:VCARD and BEGIN:VCARD lines at the boundary. A VERSION line appearing immediately after contact data (without an intervening END/BEGIN pair) is the clearest indicator of a missing boundary.
Truncated File
A truncated file ends abruptly, cutting off the last contact mid-property. This happens during interrupted file transfers or when storage runs out during export.
The fix depends on severity. If the truncation point is between contacts (after an END:VCARD), the file is usable as-is with only the last incomplete contact lost. If it is mid-contact, add a missing END:VCARD tag at the end of the file. The truncated contact will have incomplete data, but all prior contacts will be recoverable.
Merged or Overlapping Contacts
Contacts can overlap without clear boundaries: two FN properties in a row without END/BEGIN between them or phone numbers from one person appearing in another contact’s block. This usually results from missing END:VCARD tags or from concatenating multiple VCF files without proper separators.
To fix: scan for adjacent FN or N properties within what appears to be a single contact block. Where you find two FN values in sequence, insert END:VCARD before the second FN and BEGIN:VCARD + VERSION:3.0 after it.
Broken Base64 Photo Data
Embedded contact photos are stored as Base64 text in the PHOTO property. If the Base64 string is incomplete (truncated mid-character), the parser fails on that property or the entire contact. To fix: delete the PHOTO line and its continuation lines entirely. The contact will import without a photo but the name, phone and email data will be preserved. Look for lines starting with PHOTO;ENCODING=BASE64 or PHOTO;BASE64 followed by a long string of characters.
Null Bytes and Binary Garbage
Null bytes (0x00) are invisible characters that break most text parsers. They are introduced by faulty transfers, partial overwriting or file system errors. On Mac or Linux, strip them with:
sed 's/\x00//g' damaged.vcf > repaired.vcf
On Windows, open in Notepad++ and use Find and Replace with “Extended” search mode: find \0 and replace with nothing.
BOM and Hidden Characters
A UTF-8 BOM (Byte Order Mark) prepended to the file adds three invisible bytes before the first BEGIN:VCARD. Some parsers reject this because the file technically does not start with the expected string. In Notepad++, go to Encoding and select “Convert to UTF-8 without BOM” then save. Zero-width spaces (U+FEFF, U+200B) embedded inside property values cause similar issues. Search for these using Find with “Regular expression” mode and the pattern [\x{FEFF}\x{200B}].
Encoding Corruption (Mojibake)
Encoding corruption causes readable-looking content where special characters are garbled – names like “Müller” appear as “Müller”. This happens when a UTF-8 file is re-saved as Windows-1252 or vice versa. Unlike structural corruption, encoding damage is reversible because the underlying bytes are intact.
In Notepad++, go to Encoding, select “Character Sets” and try opening the file as different encodings until names display correctly. Then convert to UTF-8 and save. For a complete walkthrough, see our VCF encoding error guide.
Duplicate or Conflicting Properties
Some corruption introduces duplicate VERSION lines, multiple FN properties with different values or repeated BEGIN:VCARD without a corresponding END. While most parsers tolerate minor duplication, excessive duplicates cause unpredictable behavior. Fix by searching for double occurrences within each contact block. Keep the first FN and VERSION and delete duplicates. Multiple TEL or EMAIL properties are normal (contacts can have several phone numbers), but multiple N or FN properties within one contact are not.
Automated Repair: Python Script
For files with widespread damage across hundreds of contacts, manual repair is impractical. This Python script using the vobject library attempts to parse each contact individually, skips contacts that fail and writes the valid contacts to a clean output file:
import vobject
with open('damaged.vcf') as f:
    text = f.read()
blocks = text.split('END:VCARD')
recovered = 0
with open('repaired.vcf', 'w') as out:
    for block in blocks:
        chunk = block.strip() + '\nEND:VCARD'
        if 'BEGIN:VCARD' not in chunk: continue
        try:
            card = vobject.readOne(chunk)
            out.write(card.serialize())
            recovered += 1
        except: pass
print(f'Recovered {recovered} contacts')
Install vobject with pip install vobject before running. The script splits the file at each END:VCARD boundary, attempts to parse each block and writes only the successfully parsed contacts. Contacts with structural damage are silently skipped.
How to Fix VCF Import Errors
If your VCF file looks structurally correct in a text editor but is still rejected during import, the problem is compatibility rather than corruption. This is an import error, not a file damage issue.
Common Import Error Messages
Although wording varies by platform, these messages point to the same underlying issues: version incompatibility, encoding mismatch, malformed structure or file size limits.
vCard Version Compatibility
Not all platforms support every vCard version. Using an unsupported version is one of the most common causes of import failure.
| Platform | Supported vCard Versions |
|---|---|
| Android | 2.1, 3.0 |
| iPhone (iOS) | 3.0, 4.0 |
| Google Contacts | 3.0 |
| Microsoft Outlook | 2.1, 3.0 |
Universal Compatibility Tip
vCard 3.0 is the only version supported by all four major platforms. If you are unsure which version to use, always target 3.0.
Platform-Specific Fixes
Primary cause: vCard 2.1, large embedded photos or CRM X-properties
Quick fix: Use the Mac Contacts app instead of iCloud.com – it has a more lenient parser. For batch imports, keep under 200-300 contacts per file. Strip embedded photos if the file is over 5 MB.
Alternative: Import the VCF into Google Contacts first, then re-export as a clean vCard 3.0 file and import that version into iCloud.
Primary cause: vCard 4.0, malformed structure or file stored on an SD card instead of internal storage
Quick fix: Save the VCF to internal storage (not the SD card). Convert to vCard 3.0 if currently 4.0. For files with many contacts, split into batches of 200-500.
Primary cause: Encoding mismatches or malformed entries. Google is the most lenient importer of the four platforms.
Quick fix: If Google still rejects the file, the VCF structure is fundamentally broken. Go back to the corruption section and verify BEGIN/END marker counts.
Primary cause: Outlook processes VCF contacts one at a time and has limited bulk import support. Multi-contact VCF files often fail entirely.
Quick fix: Use the Import/Export wizard (File > Open and Export > Import/Export) rather than drag-and-drop. For multiple contacts, split into individual single-contact VCF files first.
Step-by-Step Import Fix
Validate the file structure – Open in a text editor and confirm BEGIN:VCARD and END:VCARD counts match. Every contact must have both markers. If they do not match, go back to the Missing Tags section first.
Check and correct the vCard version – Find the VERSION line inside any contact block. If it says VERSION:2.1 and you are importing into iPhone or VERSION:4.0 and you are importing into Android or Outlook, you need to convert to version 3.0.
Fix encoding – Save the file as UTF-8 in Notepad++ (Encoding > Convert to UTF-8 without BOM). Non-UTF-8 files cause garbled names and silently dropped contacts on most platforms.
Remove unsupported properties – Delete custom X- properties (CRM fields like X-SALESFORCE-ID, X-HUBSPOT-CONTACT) that target platforms do not recognize. These are safe to remove; the contact data is preserved.
Split large files (recommended for 100+ contacts) – Most platforms silently drop contacts past a limit. Split into batches of 200-500 contacts and import each batch separately. Use our VCF file splitter guide for step-by-step instructions.
When Converting Is the Best Solution
If manual fixes are taking too long or the file has widespread issues across many contacts, conversion is often faster and more reliable than manual repair. A dedicated converter tool rebuilds the file structure, corrects encoding, normalizes the vCard version and removes malformed entries in a single pass.
Converting or repairing a VCF file is often the best solution because it fixes structural inconsistencies, corrects encoding errors, normalizes vCard versions and prevents contact data loss. Use our Univik vCard Converter for this. This is especially important for business contact lists, CRM migrations and large contact databases, where accuracy is critical.
Recovering Contacts from Severely Damaged Files
For files that are partially readable – some contacts intact, others damaged – the Python recovery script above is the most effective approach. It recovers every intact contact block and skips damaged ones without stopping.
If the file is completely unreadable (binary corruption throughout), contact data recovery requires specialized tools beyond standard VCF repair. Check your recycle bin or trash for an earlier version of the file. If the file came from cloud sync (Google, iCloud, Outlook), check the service’s version history for a pre-corruption copy. Cloud services often retain 30 to 90 days of file history.
A 0-byte file (file size shows as 0 KB) cannot be repaired. The data was never written or was completely overwritten. There is no content to recover from a 0-byte file.
Preventing VCF Problems
Export contacts in vCard 3.0 – the most universally compatible version across all platforms.
Avoid manual text editing of VCF files – one typo in a property name or missed END:VCARD tag breaks the entire file.
Validate files before importing – open in a text editor and verify BEGIN/END markers, VERSION fields and encoding before sending to any platform.
Test with small files first – import 5 to 10 contacts as a test before committing the full batch.
Keep backups before editing or importing – always save a copy of the original file before making any changes.
Transfer files over reliable connections – avoid exporting or emailing VCF files over unstable mobile connections. Interrupted transfers truncate files without warning.
Re-export rather than repair when possible – if the original contact source (phone, email client, cloud account) is still accessible, re-exporting is faster and more reliable than repairing a damaged file.
Frequently Asked Questions
Why is my VCF file not importing?
The most common causes are an unsupported vCard version, wrong encoding, malformed BEGIN/END structure or the file exceeding the platform’s contact count limit. Start with the diagnosis section to identify which applies.
What does “Invalid VCF file” mean?
It means the platform’s parser rejected the file because it does not meet format requirements. Common causes are missing BEGIN:VCARD or END:VCARD tags, an unsupported VERSION value or broken line formatting. Open the file in a text editor to verify the structure.
Can corrupted VCF files be fixed?
Yes, in most cases. Structural issues like missing tags, truncation and encoding damage are fixable manually or with the Python recovery script above. Complete binary corruption is the exception – if the file is unreadable as text, the underlying data may be unrecoverable.
My VCF file works on Android but fails on iPhone. Why?
Android accepts vCard 2.1, which iPhone does not support. Convert the file to vCard 3.0 with UTF-8 encoding. Alternatively, import the Android VCF into Google Contacts first, then re-export it as a clean vCard 3.0 file that iPhone accepts.
Is CSV better than VCF for contact transfers?
CSV is easier to edit and clean in spreadsheets, while VCF preserves contact metadata (photos, multiple phone types, addresses) required by mobile devices. Use CSV for data cleanup, then convert back to VCF for final import.
Should I repair the file or re-export from the original source?
If the original source is still available (phone, email client, cloud contacts), re-exporting is faster and more reliable. Repair is the right approach only when the corrupted file is the sole remaining copy of the contact data.
How do I verify a repaired VCF file before importing?
Open it in a VCF viewer to confirm contacts display correctly before sending them to your target platform. Verification catches encoding issues and missing fields that might not be obvious in a raw text view.
Conclusion
Last verified: March 2026. Repair methods tested with intentionally corrupted VCF files (truncated, null-injected, BOM-prepended, merged-contact and encoding-damaged variants) across vCard 2.1, 3.0 and 4.0 formats. Python recovery script tested with vobject 0.9.7 on Python 3.12. Import error fixes verified against current versions of Android 14, iOS 17, Google Contacts and Microsoft Outlook 365.
Most VCF problems are fixable. If the file is structurally damaged, diagnose the corruption type (missing tags, truncation, null bytes, encoding) and apply the targeted fix. If the file is valid but the platform rejects it, convert to vCard 3.0 with UTF-8 encoding, split large batches and remove unsupported custom properties.
Repair priority order: 1) Back up the original file before any edits. 2) Count BEGIN:VCARD and END:VCARD – if they do not match, fix tag structure first. 3) Remove null bytes and BOM. 4) Delete broken Base64 photo blocks. 5) Fix encoding. 6) Run the Python recovery script for widespread damage. 7) Verify the repaired file in a VCF viewer before importing. 8) Convert to vCard 3.0 with UTF-8 and split into batches if the platform still rejects the file.