Importing Vcard contacts extracted from a PST file into Proton Mail using an Intermediate CSV file

Proton Mail provides end-to-end encrypted email. If you are transitioning to Proton Mail from another email application and need the contacts you had stored in the other application, Proton Mail provides the capability to import contacts stored in a Virtual Contact File (VCF) or a comma-separated values (CSV) file. VCF, aka vCard, files usually have a .vcf filename extension while .csv is the filename extension for CSV files. To import such files, in the Proton Mail application, click on the Contacts icon on the upper, right side of the Proton Mail window, then click on Import Contacts, then select "Import from .csv or Vcard", then click on the "Choose a file or drag it here" button.

Import Contacts

If you want to extract contacts from a Microsoft Outlook Personal Storage Table .pst file, you can use the readpst utility to extract the contacts from the .pst file. A command such as readpst -cv -tc -o contacts_out your-outlook.pst can be used where contacts out is the output directory where you wish the utility to place the contacts (the output directory must exist prior to running the command) and your-outlook.pst is the location and name for the existing .pst file. E.g.:

alice@Wonderload:~/Documents$ readpst -cv -tc -o ~/Documents/contacts ~/Downloads/alice\@example.com.pst 
Opening PST file and indexes...
Processing Folder "Deleted Items"
Processing Folder "Inbox"
Processing Folder "Outbox"
Processing Folder "Sent Items"
Processing Folder "Suggested Contacts"
Processing Folder "Junk E-mail"
Processing Folder "Conversation Action Settings"
Processing Folder "Quick Step Settings"
Processing Folder "Drafts"
Processing Folder "Calendar"
Processing Folder "Contacts"
Processing Folder "Journal"
Processing Folder "Notes"
Processing Folder "Tasks"
	"Suggested Contacts" - 22 items done, 0 items skipped.
Processing Folder "RSS Feeds"
Processing Folder "~ Holly"
Processing Folder "HVIA Members"
	"alice@example.com" - 16 items done, 0 items skipped.
Processing Folder "Tutorials"
Processing Folder "HVIA Renters"
	"Tasks" - 0 items done, 5 items skipped.
	"HVIA Renters" - 1 items done, 0 items skipped.
	"HVIA Members" - 102 items done, 1 items skipped.
	"Tutorials" - 31 items done, 0 items skipped.
	"Contacts" - 127 items done, 4 items skipped.
	"Calendar" - 0 items done, 229 items skipped.
	"Inbox" - 0 items done, 297 items skipped.
	"Sent Items" - 0 items done, 341 items skipped.
	"~ Holly" - 0 items done, 399 items skipped.
alice@Wonderload:~/Documents$

In the above example, within the output directory, I found a Contacts.contact text file with entries such as the following within it.

BEGIN:VCARD
FN:Earth Origins Market
N:;;;;
ADR;TYPE=work:;;108 Marlboro Ave\, Ste 1;Easton;MD;21601;
LABEL;TYPE=work:108 Marlboro Ave\, Ste 1\nEaston\, MD  21601
TEL;TYPE=work,voice:(410) 822-4852
ORG:Earth Origins Market
NOTE:\n
VERSION:3.0
END:VCARD

BEGIN:VCARD
FN:Kapraun\, Barney
N:Kapraun;Barney;;;
TEL;TYPE=cell,voice:(443) 555-5555
VERSION:3.0
END:VCARD

I also saw HVIA Members.contacts and HVIA Renters Contacts.contacts files corresponding to separate contacts lists the user had in the Outlook PST file, as well as Tutorials.contacts and Suggested Contacts.contacts files. I tried using Proton Mail's "import contacts" option to import the data from the Contacts.contacts file — I had to rename it to Contacts.vcf first so that it would appear in Proton Mail as a file that could be imported. When I imported the data, I saw "Contacts successfully imported. The imported contacts will now appear in your contact list. 125/125 contacts encrypted and added to your contact list".

Contacts successfully imported

I wasn't able to see the contacts until I closed and reopened Proton Mail. Then I could view the contacts, but I saw "The contact data is corrupted and cannot be displayed" when I tried to view most of the entries.

Contact data corrupted

For a few, I could view the information. When I compared the entries in the .vcf file I imported, the issue appeared to be related to the ADR lines in entries, i.e., the address part of entries. I didn't find entries without those lines that had problems. Some entries with an address did display correctly, though. I didn't spend time trying to figure out how to address that problem, but instead decided to use a vcards-to-proton.py script provided by ChatGPT to import the contacts into Proton Mail. You can see information on how to use the Python script using the python3 ./vcards-to-proton.py --help command.

alice@Wonderland:~/Documents$ python3 ./vcards-to-proton.py --help
usage: vcards-to-proton.py [-h] -i INPUT [-o OUTPUT] [--include INCLUDE]
                           [--exclude EXCLUDE] [--no-dedupe] [--dry-run]
                           [--show SHOW]

Convert readpst .contacts/vCard 3.0 files to a Proton-compatible CSV.

options:
  -h, --help           show this help message and exit
  -i, --input INPUT    A .contacts file or directory containing .contacts
                       files.
  -o, --output OUTPUT  Output CSV filename.
  --include INCLUDE    Process only this filename. Can be specified more than
                       once.
  --exclude EXCLUDE    Exclude this filename. Can be specified more than once.
  --no-dedupe          Do not merge duplicate contacts.
  --dry-run            Analyze contacts without creating the CSV.
  --show SHOW          Number of contacts to display during dry-run.
alice@Wonderland:~/Documents$ 

You can run a dry run of the script using a command like python3 ./vcards-to-proton.py --input ~/Documents/contacts --include "Contacts.contacts" --dry-run (specicfy the location of the actual contacts directory or file with the --import parameter; if there are more than one contacts file in a directory you specify, you can use the --include option to specify the one you want processed. If you want more than 20 contacts shown, add the --show option followed by a specific number).

alice@Wonderland:~/Documents$ python3 ./vcards-to-proton.py --input ~/Documents/contacts --include "Contacts.contacts" --dry-run
Files selected:
  /home/alice/Documents/contacts/Contacts.contacts

Read  125 contacts from Contacts.contacts

Total vCards read:    125
Duplicates merged:    0
Contacts to export:   125

DRY RUN: no CSV file was created.

Contacts that would be exported:
    1. Earth Origins Market | (no email address)
    2. Kapraun, Barney | (no email address)
    3. Art Things, Inc. | (no email address)
    4. Adams, Barbara | adams@example.com
    5. Second Hand Finds | (no email address)
    6. Twice is Nice | (no email address)
    7. Today's News | (no email address)
    8. Vet (Moblie) - Horn, Janice | (no email address)
    9. Jan's Grooming | (no email address)
   10. Langlois, Michael | (no email address)
   11. Gomez, Alberto | alberto@example.com
   12. Diederichs, Martha | martha@example.com
   13. McIntyre, Kimberly | kimmberly@example.com
   14. Tucker, Barbara | Barbara.Tucker@example.com
   15. Laly | service@example.com
   16. Country Goods | (no email address)
   17. Avalon Dermatology | (no email address)
   18. Lemaitre, Eric | eric@example.com
   19. Lowman, Craig | craig@example.com
   20. Hayden, Bill | bill@example.com

  ... and 105 more.
alice@Wonderland:~/Documents$

Since the dry run output looked ok, I used the command python3 vcards-to-proton.py -i ~/Documents/contacts --include "Contacts.contacts" -o contacts.csv to generate a CSV file I could import into Proton Mail.

alice@Wonderland:~/Documents$ python3 vcards-to-proton.py -i ~/Documents/contacts --include "Contacts.contacts" -o contacts.csv
Files selected:
  /home/alice/Documents/contacts/Contacts.contacts

Read  125 contacts from Contacts.contacts

Total vCards read:    125
Duplicates merged:    0
Contacts to export:   125

CSV created: contacts.csv
alice@Wonderland:~/Documents$ 

After it generated the output CSV file, in the desktop Proton Mail application, I clicked on the contacts icon at the right side of the window.

Proton Mail - Contacts icon

I then clicked on Import contacts.

Proton Mail - Import contacts

You then have the following options:

  1. Import from Google
  2. Import from Outlook
  3. Import from .cdv or vCard

I picked "Import from .csv or vCard". I was then able to browse to the location of the Contacts.csv file and then click on Import to import the entries in that file.

Proton Mail - Import contacts CSV file

I was then presented with an "Import contacts" window that showed details for a contact entry.

Proton Mail - Import contacts 
details

When I clicked on Import, I saw a "Contacts successfully imported" message.

Proton Mail - contacts 
successfully imported

I then saw that the user's contacts were now in the Proton Mail contact list. Though there were 125 entries in the CSV file and the last "Import contacts" window I saw reported "110/110 contacts encrypted and added to your contact list. When I looked in the CSV file, it appeared that there were some companies missing from the imported data. Two I noticed didn't have anything in the first name, middle name, last name, or name fields in the CSV file.

References:

  1. readpst - Primary Extraction Tool
    Date: August 8, 2025
    DeepWiki
  2. readpst(1) - Linux man page
    Linux Documentation