Import from a Custom File
This article describes how to format .csv
and .json
files for importing into Bitwarden. The formats are identical to Bitwarden vault exports. To select a file type and format, determine the destination vault and which item types you need to import:
Format your file based on whether you're importing to an individual or organization vault.
Bitwarden
.csv
files only include logins and secure notes. If you need to also handle identities and cards, use a.json
file.
note
While some item types cannot be imported, you can still add them to a vault:
Upload file attachments to the new vault individually.
Re-create Sends in the new vault.
Condition a .csv
.csv for individual vault
Create a UTF-8 encoded plaintext file with the following header as the first line in the file:
Bashfolder,favorite,type,name,notes,fields,reprompt,login_uri,login_username,login_password,login_totp
For example:
Bashfolder,favorite,type,name,notes,fields,reprompt,login_uri,login_username,login_password,login_totp
Social,1,login,Twitter,,,0,twitter.com,me@example.com,password123,
,,login,EVGA,,,,https://www.evga.com/support/login.asp,hello@bitwarden.com,fakepassword,TOTPSEED123
,,login,My Bank,Bank PIN is 1234,"PIN: 1234",,https://www.wellsfargo.com/home.jhtml,john.smith,password123456,
,,note,My Note,"This is a secure note.",,,,,
When importing this file, select Bitwarden (csv) as your file format.
.csv for organization
Create a UTF-8 encoded plaintext file with the following header as the first line in the file:
Bashcollections,type,name,notes,fields,reprompt,login_uri,login_username,login_password,login_totp
For example,
Bashcollections,type,name,notes,fields,reprompt,login_uri,login_username,login_password,login_totp
"Social,Marketing",login,Twitter,,,0,twitter.com,me@example.com,password123,
"Finance",login,My Bank,"Bank PIN is 1234","PIN: 1234",0,https://www.wellsfargo.com/home.jhtml,john.smith,password123456,
"Finance",login,EVGA,,,0,https://www.evga.com/support/login.asp,hello@bitwarden.com,fakepassword,TOTPSEED123
"Finance",note,My Note,"This is a secure note.",,0,,,
tip
If you're conditioning a .csv
with nested collections, create dedicated entries for each collection that does not have an an item in it, for example:
Bashcollections,type,name,notes,fields,reprompt,login_uri,login_username,login_password,login_totp Parent Collection,,,,,,,,,, Parent Collection/First Child Collection,,,,,,,,,, Parent Collection/First Child Collection/Second Child Collection,login,Shared Credential,,,,https://website.com,username,password,,
When importing this file, select Bitwarden (csv) as your file format.
Minimum required values
You may not have data for all the values shown in the above formats, however most are optional. In order for the Bitwarden .csv
importer to function properly, you are only required to have the following values for any given object:
Bashfolder,favorite,type,name,notes,fields,reprompt,login_uri,login_username,login_password,login_totp ,,login,Login Name,,,,,, ,,note,Secure Note Name,,,,,,
Condition a .json
.json for individual vault
Create a UTF-8 encoded plaintext file in the following format:
Bash{
"folders": [
{
"id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"name": "Folder Name"
},
...
],
"items": [
{
"passwordHistory": [
{
"lastUsedDate": "YYYY-MM-00T00:00:00.000Z",
"password": "passwordValue"
}
],
"revisionDate": "YYYY-MM-00T00:00:00.000Z",
"creationDate": "YYYY-MM-00T00:00:00.000Z",
"deletedDate": null,
"id": "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy",
"organizationId": null,
"folderId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"type": 1,
"reprompt": 0,
"name": "My Gmail Login",
"notes": "This is my gmail login for import.",
"favorite": false,
"fields": [
{
"name": "custom-field-1",
"value": "custom-field-value",
"type": 0
},
...
],
"login": {
"uris": [
{
"match": null,
"uri": "https://mail.google.com"
}
],
"username": "myaccount@gmail.com",
"password": "myaccountpassword",
"totp": otpauth://totp/my-secret-key
},
"collectionIds": null
},
...
]
}
When importing this file, select Bitwarden (json) as your file format.
.json for organization
Create a UTF-8 encoded plaintext file in the following format:
Bash{
"collections": [
{
"id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"organizationId": "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy",
"name": "My Collection",
"externalId": null
},
...
],
"items": [
{
"passwordHistory": [
{
"lastUsedDate": "YYYY-MM-00T00:00:00.000Z",
"password": "passwordValue"
}
],
"revisionDate": "YYYY-MM-00T00:00:00.000Z",
"creationDate": "YYYY-MM-00T00:00:00.000Z",
"deletedDate": null,
"id": "vvvvvvvv-vvvv-vvvv-vvvv-vvvvvvvvvvvv",
"organizationId": "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy",
"folderId": "zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz",
"type": 1,
"reprompt": 1,
"name": "Our Shared Login",
"notes": "A login for sharing",
"favorite": false,
"fields": [
{
"name": "custom-field-1",
"value": "custom-field-value",
"type": 0
},
...
],
"login": {
"uris": [
{
"match": null,
"uri": "https://mail.google.com"
}
],
"username": "myaccount@gmail.com",
"password": "myaccountpassword",
"totp": otpauth://totp/my-secret-key
},
"collectionIds": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
},
...
]
}
When importing this file, select Bitwarden (json) as your file format.
Import to existing collections
By conditioning your organization .json
file appropriately, you can import new login items to pre-existing collections.
The following example demonstrates the proper format for importing a single item into a pre-existing collection. Note that you will need to:
Obtain organization and collection IDs. These can be obtained by navigating to the collection in your web app and pulling them from the address bar (e.g.
https://vault.bitwarden.com/#/organizations/<organizationId>/vault?collectionId=<collectionId>
).Define a
"collections": []
array that contains data for the pre-existing collection, including organization and collection IDs (see above) as well as its name. As long as these 3 data points match, a new collection will not be created on import and instead items in the file will be imported to the pre-existing collection.
Bash{
"encrypted": false,
"collections": [
{
"id": "b8e6df17-5143-495e-92b2-aff700f48ecd",
"organizationId": "55d8fa8c-32bb-47d7-a789-af8710f5eb99",
"name": "My Existing Collection",
"externalId": null
}
],
"folders": [],
"items": [
{
"id": "2f27f8f8-c980-47f4-829a-aff801415845",
"organizationId": "55d8fa8c-32bb-47d7-a789-af8710f5eb99",
"folderId": null,
"type": 1,
"reprompt": 0,
"name": "Item to Import",
"notes": "A login item for sharing.",
"favorite": false,
"login": {
"uris": [
{
"match": null,
"uri": "https://mail.google.com"
}
],
"username": "my_username",
"password": "my_password",
"totp": null
},
"collectionIds": ["b8e6df17-5143-495e-92b2-aff700f48ecd"]
}
]
}
Minimum required key-value pairs
You may not have data for all the key-value pairs shown in the above formats, however most are optional. In order for the Bitwarden .json
importer to function properly, you are only required to have the following key-value pairs for each object:
Bash{
"items": [
{
"type": 1,
"name": "Login Item's Name",
"login": {}
},
{
"type": 2,
"name": "Secure Note Item's Name",
"secureNote": {}
},
{
"type": 3,
"name": "Card Item's Name",
"card": {}
},
{
"type": 4,
"name": "Identity Item's Name",
"identity": {}
}
]
}
The "login":
, "secureNote":
, "card":
, and "identity":
objects can be imported as empty objects, however we recommend conditioning files with as much data as you are able.
Import into Bitwarden
Once your .csv
or .json
file is ready, import it to an individual vault or organization vault. Select Bitwarden (csv) or Bitwarden (json) from the File format list.