VCF Contact Import: Android, iPhone, and WhatsApp - Without Losses
AndySendy academy
← All posts

📇 Bulk VCF Contact Import: What Actually Works on Android and iPhone

Half of outreach operators lose contacts at the upload stage - not because of a ban, but because of a badly built file or tapping a VCF directly on iPhone. The topic looks technically simple, but "dump 50,000 contacts and start outreach right away" is a misconception that kills both the account and the list. After this article you'll have a working workflow for prep, conversion, and batched import on both platforms.


VCF structure: what the file must contain

VCF (Virtual Contact File, aka vCard) is a plain text file. Each contact is wrapped in a block:

BEGIN:VCARD
VERSION:3.0
FN:John Client
TEL;TYPE=CELL:+14155552671
END:VCARD

Critical details:


Excel prep: three required columns

Minimum table structure before conversion:

Name Number (E.164) Prefix (optional)
John Client +14155552671 Lead_01
Maria Sample +14155552672 Lead_02

Why a prefix. Add a unique marker to the name - e.g. Lead_23_ - and after the campaign you can find the whole upload in address book search with one query and delete in bulk. Without a prefix you'll be cleaning manually from thousands of records.

Before conversion: remove empty rows, extra columns, check every number format. Batch normalize local format to E.164 - via Ctrl+H in Excel or a formula like ="+1"&RIGHT(A2,10) for US numbers (adjust country code for your market).


Conversion: tools and methods

Three working approaches:

1. Excel macro (VBA). Generates VCF straight from the table, fully under your control. Fits if lists are regular and you need a repeatable process. Plenty of examples on GitHub.

2. Python + vobject library. Full control over fields, encoding, version. Best for operators with large lists or non-standard fields (groups, tags, notes).

3. Online converters (tovcf.com and similar). Fastest for a one-off - upload Excel, download VCF. Convenient, but with a serious limitation: uploading a client list to a third-party service means handing numbers to someone else. For third-party client data that's a privacy policy violation and may conflict with local data-protection rules in your jurisdiction. Use online converters only for your own test lists or where explicitly allowed.

Either way, manually check the first 10–20 lines of the generated VCF in a text editor - before import.


Import on Android: simple, but not mindless

Android reads VCF natively through the Contacts app. Workflow:

  1. Transfer the file to the phone (USB, Telegram, cloud - doesn't matter).
  2. Open via file manager → Contacts app will offer import.
  3. Choose storage: Device (local) or Google account.

Where to save - debated. Some practitioners prefer local storage: less risk of Google antifraud firing when uploading thousands of contacts at once. Others think Google sync looks "more natural" to WhatsApp algorithms. No definitive data - choose based on scale and acceptable risk.

Important for budget Android (< 6–8 GB RAM): importing a file with 30,000+ contacts can push background process android.process.acore and WhatsApp sync into Out-of-Memory crash. Device heats up, process restarts in a loop. Fix - split the list before import, not after.


Import on iPhone: the main misconception

Common myth: "I sent the VCF in Telegram, tapped - all 20,000 contacts saved." Not true. iOS opening a multi-contact VCF from a messenger or mail shows only the first contact card. The system silently ignores the other thousands.

Working methods for iPhone:

Via iCloud (recommended as primary):

  1. Go to iCloud.com on a computer → Contacts.
  2. Click the gear → Import vCard.
  3. Upload the file.

Via AirDrop: send VCF from Mac or another iPhone → confirm adding contacts. Works for small batches.

Via mail: attach VCF to an email → on iPhone open attachment → Add All Contacts. "Add All" appears only with correct vCard 3.0 format.


Batch size: the most important parameter

Official iCloud limit - 50,000 contacts. In practice you won't upload that in one file.

What happens when you try 30,000 contacts in one file via iCloud.com: browser hangs 10+ minutes, then timeout - contacts don't save. Standard fix from practice: split into 6 files of 5,000 records, import sequentially with ~10 minute pauses between batches.

Recommended batch size:

Platform Recommended batch Reason
Android (flagship) up to 10,000 Native import stable
Android (budget, < 6 GB RAM) 3,000–5,000 OOM crash at larger volumes
iPhone / iCloud.com 2,000–5,000 Browser timeout at > 10,000

Split VCF manually in a text editor at BEGIN:VCARD tags or with a script. Each output file must end with a complete END:VCARD block.


WhatsApp and bulk import: what to understand

When contacts appear in the phone book and WhatsApp has contact access, the app runs background Contact Discovery - hashes numbers and matches against Meta's database. Standard mechanics.

What matters:

Per operator observations (Meta publishes no official thresholds), the system tracks not only message sends but also abnormal address book change speed. An account that historically had 50 contacts and gained 40,000 new ones in one sync cycle gets hard pre-moderation status (Sandbox). In that mode address book protective properties (visibility as a "known" sender) are neutralized even before outreach starts.

Practical rule: don't start outreach right after importing a large list - especially on a new account. Let the account "digest" sync. Ideal - stretch batched import over several hours, send first messages no sooner than 24 hours later.

Numbers without +: WhatsApp doesn't recognize contacts without country code in E.164. Entry 4155552671 in the phone book is invisible to outreach. Check the list before conversion, not after.


Typical errors and how to avoid them

Garbled names. Cause - vCard 2.1 without explicit CHARSET=UTF-8. Fix: always generate version 3.0 or 4.0.

Contacts didn't appear after iPhone import. Cause - opened VCF via messenger, iOS saved only the first. Fix: import via iCloud.com or AirDrop.

WhatsApp doesn't see contacts after import. Cause - numbers without country code or non-standard format. Fix: normalize in Excel before conversion.

iCloud import timeout. Cause - file too large. Fix: split into 2,000–5,000 batches, 10 minute pause between.

OOM crash on Android. Cause - RAM < 6–8 GB, file > 30,000 records. Fix: batches of 3,000–5,000.


🎯 Next step

Prepare an Excel template with three columns (name, E.164, prefix), set up one conversion method, and run a 500-contact test list through the full cycle - Excel to WhatsApp verification. Takes 20 minutes and closes technical questions before a real campaign.

Conclusion

Practical rule:

One VCF for thousands of contacts isn't one import - it's a dozen sequential ones, with pauses and checks after each.