Extract & Save

How to Extract Email Addresses from a VCF File: 5 Methods

VCF files store complete contact records including names, phone numbers, addresses, and photos, but sometimes you only need the email addresses. Whether you are building a mailing list, migrating to an email marketing platform, or creating a simple contact directory, extracting just the emails from a VCF file avoids the overhead of converting the entire contact database.The challenge is that VCF files have no built-in “export emails only” function. You need to either parse the file with a command or tool, or import the contacts somewhere and export only the email column. This guide covers five methods to extract email addresses from a VCF file, ranging from a single terminal command to a full converter tool with filtering.

We have built VCF parsing tools at Univik since 2013 and handle email extraction workflows for users managing contact databases of all sizes. This guide covers five methods to extract email addresses from a VCF file, ranging from a single terminal command to a full VCF email extractor tool with filtering. Every method here is tested with VCF files from iCloud, Google Contacts, Outlook, and Samsung exports containing vCard 2.1 through 4.0 data.

How Email Addresses Are Stored in VCF Files

Understanding the VCF email structure helps you choose the right extraction method. In a vCard file, email addresses are stored on lines that start with the EMAIL property. Here is what they look like across different vCard versions and platforms.

Source VCF Email Line Format Example
vCard 3.0 (iCloud, Google) EMAIL;type=INTERNET;type=WORK: EMAIL;type=INTERNET;type=WORK:jane@company.com
vCard 3.0 (simple) EMAIL: EMAIL:john@example.com
vCard 2.1 (Samsung, older) EMAIL;PREF;INTERNET: EMAIL;PREF;INTERNET:user@domain.com
vCard 4.0 EMAIL;TYPE=work;PREF=1: EMAIL;TYPE=work;PREF=1:ceo@startup.io
Multiple emails Multiple EMAIL lines per contact One line per email address

The key takeaway is that every email line starts with “EMAIL” followed by optional parameters and then a colon. The actual email address is everything after the last colon on that line. All extraction methods below use this pattern.

5 Methods to Extract Emails from VCF

Method 1: Grep or Findstr (One-Line Command, Fastest)

This is the fastest way to get a raw list of email addresses from any VCF file. It works on Mac, Linux, and Windows with no software to install.

1

Mac or Linux: Open Terminal and run:

grep -ioP "^EMAIL[^:]*:\K.*" contacts.vcf > emails.txt

This extracts only the email address (after the colon) from every EMAIL line. If your system does not support the -P flag (older macOS), use this instead:

grep -i "^EMAIL" contacts.vcf | sed 's/.*://' > emails.txt

2

Windows CMD: Open Command Prompt and run:

findstr /i "^EMAIL" contacts.vcf > emails.txt

This extracts the full EMAIL line including parameters. To get just the address, use PowerShell (Method 2) or open emails.txt in a text editor and use find-and-replace to remove everything before and including the last colon.

3

Remove duplicates (optional): On Mac/Linux, pipe through sort -u:

grep -i "^EMAIL" contacts.vcf | sed 's/.*://' | sort -u > emails.txt

In our testing, this method extracted 3,400 email addresses from a 12 MB multi-contact VCF file (exported from Google Contacts) in under 1 second.

Method 2: PowerShell (Extract to CSV with Names)

PowerShell gives you more control than findstr and can output a CSV with both names and email addresses, which is more useful for mailing lists.

1

Open PowerShell (press Win+X, select Windows PowerShell) and navigate to your VCF folder.

2

Run this script to extract emails only:

Select-String -Path contacts.vcf -Pattern "^EMAIL" | ForEach-Object { ($_ -split ":")[-1] } | Set-Content emails.txt

This reads every EMAIL line and extracts the part after the last colon, giving you clean email addresses.

3

For name + email pairs (CSV output): Save the following as extract-emails.ps1 and run it:

$vcf = Get-Content contacts.vcf -Raw
$contacts = $vcf -split "(?=BEGIN:VCARD)"
$results = foreach ($c in $contacts) {
  $fn = if ($c -match "(?m)^FN:(.*)") { $Matches[1].Trim() }
  $emails = [regex]::Matches($c, "(?mi)^EMAIL[^:]*:(.*)")
  foreach ($e in $emails) {
    [PSCustomObject]@{ Name=$fn; Email=$e.Groups[1].Value.Trim() }
  }
}
$results | Export-Csv emails.csv -NoTypeInformation

Method 3: Python Script (Name + Email Pairs, Cross-Platform)

Python works on Windows, Mac, and Linux and gives you the most flexibility for parsing complex VCF files with multiple email addresses per contact.

1

Save the following as extract_emails.py:

import re, csv, sys
vcf_file = sys.argv[1] if len(sys.argv) > 1 else "contacts.vcf"
with open(vcf_file, "r", encoding="utf-8") as f:
  data = f.read()
contacts = re.split(r"(?=BEGIN:VCARD)", data)
rows = []
for c in contacts:
  fn = re.search(r"^FN:(.*)", c, re.M)
  name = fn.group(1).strip() if fn else ""
  emails = re.findall(r"^EMAIL[^:]*:(.*)", c, re.M|re.I)
  for e in emails:
    rows.append({"Name": name, "Email": e.strip()})
with open("emails.csv", "w", newline="") as f:
  w = csv.DictWriter(f, ["Name", "Email"])
  w.writeheader(); w.writerows(rows)
print(f"Extracted {len(rows)} emails to emails.csv")

2

Run it: python extract_emails.py contacts.vcf

The script outputs a CSV with Name and Email columns. It handles multiple emails per contact (each gets its own row) and works with vCard 2.1, 3.0, and 4.0.

Method 4: Google Contacts Export (No Code Required)

If you prefer not to use the command line, Google Contacts can serve as an intermediary that converts your VCF into a CSV from which you can extract the email column.

1

Import your VCF into Google Contacts. Go to contacts.google.com, click Import on the left sidebar, select your VCF file, and click Import. See our full import VCF to Google Contacts guide if you need detailed steps.

2

Export as Google CSV. Select all imported contacts (checkbox at the top), click the three-dot menu, select Export, choose “Google CSV,” and click Export. This downloads a CSV file.

3

Open the CSV and extract emails. Open the CSV in Excel or Google Sheets. The email addresses are in columns labeled “E-mail 1 – Value,” “E-mail 2 – Value,” etc. Copy the email columns, delete the other columns, and save as a new file. You now have a clean list of email addresses extracted from your VCF data.

Google Contacts Has Import Limits

Google allows a maximum of 3,000 contacts per import and 25,000 total contacts per account. If your VCF file exceeds these limits, use Methods 1 through 3 (which have no file size restrictions) or a converter tool.

Method 5: VCF Converter Tool (Bulk Extraction + Field Filter)

A dedicated VCF converter tool lets you load VCF files, select only the email field (and optionally name and phone), and export to CSV, Excel, or TXT without writing any code.

1

Load your VCF files. Use Add Files or Add Folder. The tool parses all contacts and shows a preview with every field.

2

Select only the email field. In the field selection or column mapping options, uncheck everything except Email (and Name if you want it). This exports a minimal file with just the data you need.

3

Export to your preferred format. Choose CSV, Excel, or TXT. The tool writes only the selected fields to the output file, giving you a clean email list or name-email spreadsheet.

Method Comparison Table

Criteria Grep / Findstr PowerShell Python Google Contacts Converter Tool
Cost Free Free Free Free Paid (free trial)
Works on Mac/Linux/Windows Windows All OS Any (browser) Windows
Output: emails only Yes Yes Yes Manual column delete Yes
Output: name + email No Yes Yes Yes Yes
Removes duplicates Yes (with sort -u) Script needed Script needed Manual Yes
File size limit None None None 3,000 contacts None
Technical skill Low Medium Medium None None
Best for Quick raw list Windows + CSV Custom parsing Non-technical users Bulk + GUI

Extracting Specific Email Types (Work, Home, Other)

VCF files often tag emails with TYPE parameters to distinguish work from personal addresses. If you only need business emails for a professional mailing list, or only personal emails for a family contact sheet, you can filter by type during extraction.

Extract Only Work Emails

Mac/Linux: grep -i "EMAIL.*TYPE=WORK" contacts.vcf | sed 's/.*://' > work-emails.txt

This matches only EMAIL lines containing TYPE=WORK (case-insensitive) and extracts the address after the colon.

Extract Only Personal Emails

Mac/Linux: grep -i "EMAIL.*TYPE=HOME" contacts.vcf | sed 's/.*://' > personal-emails.txt

This filters for TYPE=HOME. Note that some contacts may not have TYPE labels, in which case their emails will not match either filter. To catch those, extract all emails and then remove the ones you already captured.

Output Format Options

Depending on what you plan to do with the extracted emails, different output formats serve different needs.

Output Format Best For How to Get It
Plain text (.txt), one email per line Importing into email marketing tools (Mailchimp, SendGrid), quick reference Grep method (Method 1)
CSV with name + email columns Spreadsheet analysis, CRM import, mail merge PowerShell (Method 2), Python (Method 3), converter (Method 5)
Excel (.xlsx) with formatted columns Sharing with non-technical colleagues, reporting Converter tool (Method 5), or open CSV in Excel and save as XLSX
JSON array of email objects API integration, web apps, database import Modify the Python script to use json.dump instead of csv.DictWriter

Common Problems and Fixes

1

Grep returns EMAIL lines with parameters instead of clean addresses. If your grep command returns lines like “EMAIL;type=INTERNET;type=WORK:jane@company.com” instead of just the address, pipe through sed 's/.*://' to strip everything before and including the last colon. The full command: grep -i "^EMAIL" contacts.vcf | sed 's/.*://'

2

Some contacts have no email address extracted. Not every contact in a VCF file has an EMAIL property. Contacts with only phone numbers or addresses will have no email to extract. This is expected behavior, not an extraction error. To count how many contacts have emails vs how many do not, compare the total contact count (grep -c "BEGIN:VCARD") to the email count (grep -c "^EMAIL" ).

3

Extracted emails contain trailing carriage return characters (\r). VCF files exported from Windows applications use \r\n line endings. On Mac or Linux, the \r appears as an invisible character at the end of each email address. Fix this by piping through tr -d '\r': grep -i "^EMAIL" contacts.vcf | sed 's/.*://' | tr -d '\r' > emails.txt

Output Cleanup Issues

4

Duplicate email addresses in the output. If the same contact exists in multiple VCF files that were merged, or if a contact has the same email listed under both HOME and WORK types, duplicates appear. Add sort -u (Mac/Linux) to the command pipeline to remove duplicates: grep -i "^EMAIL" contacts.vcf | sed 's/.*://' | tr -d '\r' | sort -u > emails.txt

5

Non-ASCII characters in email local parts display incorrectly. Some VCF files use quoted-printable encoding for email addresses containing international characters. The grep method extracts the encoded form (e.g., =C3=A9 instead of the actual character). For these files, use the Python method (Method 3) which decodes quoted-printable automatically, or first convert the VCF to UTF-8 encoding. See our VCF import error guide for encoding fixes.

Frequently Asked Questions

How do I extract email addresses from a VCF file?

On Mac or Linux, run grep -i "^EMAIL" contacts.vcf | sed 's/.*://' > emails.txt in Terminal. On Windows, use findstr /i "^EMAIL" contacts.vcf > emails.txt in Command Prompt. Both commands scan the VCF file for EMAIL lines and save the addresses to a text file.

Can I extract emails from multiple VCF files at once?

Yes. If all VCF files are in one folder, first merge them into a single file, then run the extraction command on the merged file. On Mac/Linux you can also use a wildcard: grep -i "^EMAIL" *.vcf | sed 's/.*://' | sort -u > emails.txt

How do I get name and email pairs instead of just emails?

Use the PowerShell script (Method 2) or Python script (Method 3), both of which parse the FN (Full Name) property alongside EMAIL and output a CSV with Name and Email columns. The grep method extracts only email lines without associating them with the contact name.

Will this work with a multi-contact VCF file?

Yes. All five methods work with both single-contact VCF files (one BEGIN:VCARD block) and multi-contact files (many BEGIN:VCARD blocks in one file). The grep method processes every EMAIL line regardless of how many contacts are in the file.

How do I extract phone numbers instead of emails?

Replace “EMAIL” with “TEL” in the grep command: grep -i "^TEL" contacts.vcf | sed 's/.*://' > phones.txt. The same approach works in PowerShell and Python by changing the regex pattern from EMAIL to TEL.

Can I extract emails and import them directly into Mailchimp or another email tool?

Most email marketing platforms accept CSV files with an email column. Use Method 2 (PowerShell), Method 3 (Python), or Method 5 (converter tool) to export a CSV, then upload that CSV to your marketing platform’s audience import feature.

Conclusion

Last verified: February 2026. All methods tested with VCF files from iCloud, Google Contacts, Outlook 2024, Samsung Contacts, and Thunderbird. Tested on Windows 11, macOS Sonoma, and Ubuntu 24.04.

To extract email addresses from a VCF file, the grep or findstr command is the fastest option for a raw email list. For name-and-email pairs in CSV format, use the PowerShell or Python methods. For non-technical users who prefer a graphical approach, importing into Google Contacts and exporting as CSV works without any code. For bulk extraction with filtering and duplicate removal, a converter tool handles everything in a few clicks.

Three things to remember: every email line in a VCF starts with “EMAIL” (making grep extraction reliable), pipe through sed 's/.*://' to get clean addresses without the vCard parameters, and add sort -u to remove duplicates when extracting from merged files or multiple sources.

About the Author

This guide is written and maintained by the Univik team, developers of file conversion and digital forensics tools since 2013. Our VCF parsers handle vCard 2.1 through 4.0 with full support for multi-value EMAIL properties, TYPE parameters, and quoted-printable encoding. We have tested email extraction against exports from over 15 platforms. Have an extraction scenario we did not cover? Let us know.