VCF phone number extractor
Extract phone numbers from .vcf (vCard) text: read the TEL lines only, clean spaces, dashes, brackets and +86 prefixes, deduplicate, and list the TEL rows that were skipped. Runs entirely in your browser.
Runs in your browserEvery computation happens in your browser — your data never leaves this device.
Only TEL lines are read: TEL:, TEL;TYPE=CELL:, item1.TEL: (Apple grouped property) and TEL;VALUE=uri:tel: all work; FN / EMAIL / ADR and other fields are ignored. Spaces, dashes and brackets inside numbers are stripped, and +86 / 0086 / 86 prefixes are normalized to an 11-digit local number by default.
Extracted numbers
One number per line, in the order they appear in the file — ready to paste into a dialer, an SMS blast or your CRM.
Paste vCard content to extract phone numbers
What this tool does
- Paste the whole .vcf content exported from your phone and get a one-number-per-line list for a dialer, an SMS blast or your CRM.
- Clean numbers in bulk: spaces, dashes, brackets and +86 / 0086 / 86 prefixes are stripped, duplicates are dropped, and odd rows are reported with their line number and reason.
- Get numbers only: FN, N, EMAIL, ADR, NOTE and PHOTO are ignored, while Apple's item1.TEL grouped property and TEL;VALUE=uri:tel: values are still read.
Example
Input
BEGIN:VCARD VERSION:3.0 FN:张三 TEL;TYPE=CELL:+86 138-0013-8000 TEL;TYPE=HOME:010-12345678 END:VCARD BEGIN:VCARD VERSION:3.0 FN:李四 item1.TEL:137 0013 7000 TEL;VALUE=uri:tel:139-0013-9001 TEL:138-0013-8000 END:VCARD
Output
13800138000 01012345678 13700137000 13900139001
Real output with the default options: only the TEL lines (lines 4, 5, 10, 11, 12) are read and the +86 prefix is normalized to an 11-digit local number. All 5 lines parse, the last one duplicates line 4, so the stats read 5 valid numbers, 1 duplicate and 4 numbers after dedupe.
Frequently asked questions
Does it read every phone number in a vCard?
It parses the TEL property only and ignores every other field. The common spellings all work: TEL:13800138000, TEL;TYPE=CELL:+86 138-0013-8000, Apple's item1.TEL;TYPE=pref:… and TEL;VALUE=uri:tel:13900139001. Lines folded per RFC 6350 (continuation lines starting with a space) are unfolded first, so a whole .vcf exported from iCloud, Android or Outlook can be pasted as is.
Why do the extracted numbers differ from what the file contains?
Cleaning converts full-width digits to ASCII and strips spaces, dashes, brackets and dots. By default the +86, 0086 and 86 prefixes are also normalized to an 11-digit local number (+86 138-0013-8000 → 13800138000). International numbers keep their + prefix, e.g. +1 202-555-0173 → +12025550173. Turn off "Normalize country code" to keep the file's own form; spaces and dashes are still stripped.
Which TEL lines are skipped, and how are duplicates handled?
A TEL line is skipped when cleaning leaves no digits (TEL:abc) or when the digit count is outside 5–20 (TEL:123); skipped rows are listed with their line number, original value and reason. Deduplication is on by default and keeps only the first occurrence — removed rows are counted under Duplicates. Turn it off to emit every occurrence. In the stats, "Valid numbers" counts before dedupe and "After dedupe" is the number of output lines.
Is my text uploaded, and is a big address book too slow?
Nothing is uploaded: parsing runs locally in your browser as a pure function with no network requests, and the text is neither logged nor stored. It is a single linear pass (line splitting plus a regex), so a .vcf with tens of thousands of lines finishes in milliseconds — no need to paste it in chunks.
Keywords:vcf提取号码vcf转电话号码vcf 提取手机号通讯录导出号码批量提取手机号vcf phone extractorextract phone numbers from vcfvcard tel parsercontacts phone list