Import your audio notes from Otter directly into Roam!


You could use the Copy Extension button below to individually install this extension. To install, just paste anywhere in your Roam graph and click "Yes, I Know What I'm Doing".

Manual Installation

If instead you prefer to manually install, first create a block with the text {{[[roam/js]]}} on any page in your Roam DB. Then, copy and paste this code block as a child of the block.

var existing = document.getElementById("roamjs-otter-main");
if (!existing) {
  var extension = document.createElement("script");
  extension.src = ""; = "roamjs-otter-main";
  extension.async = true;
  extension.type = "text/javascript";


The script will create a roam/js/otter page upon installation. Navigate to that page, then enter your email and password associated with your Otter account.

Warning: The extension will need to send your credentials to RoamJS' backend in order to import your notes. We do not store your credentials anywhere. If you are uncomfortable sharing your credentials with RoamJS' backend, then do not use this extension.

This is necessary because Otter does not currently support a public facing API.


Hit CMD+p (CTRL+p on Windows) to open the Roam command palette. Click the new Import Otter command. The command will open a dialog and show you the ten most recent recordings tied to your account. Click the one you'd like to import and hit the import button to enter the notes into Roam!


The label is the first block that gets created when you import an Otter Note. All the transcripts will get nested under this block. You could configure what the label says on the roam/js/otter page. The label supports the following placeholders:

  • {title} - The title of the note, using Untitled if there is none.
  • {summary} - The summary given by Otter as a list of keywords.
  • {created-date} - The date the note was created.
  • {link} - The link to the note on Otter By default, the label has a value of {title} - {summary} ({created-date}).


The template is the format used for every transcript in the note, each nested under the label. You could configure what the template looks like on the roam/js/otter page. The template supports the following placeholders:

  • {start} - The start time of the transcript
  • {end} - The end time of the transcript
  • {text} - The Otter recorded text of the transcript By default, the transcript has a value of {start} - {end} - {text}.



This extension is brought to you by RoamJS! If you are facing any issues reach out to or click on the chat button on the bottom right. If you get value from using this extension, consider sponsoring RoamJS by clicking on the button below!

A special thanks to those who's contributions also helped make this extension possible:


Add your email below to stay up to date on all RoamJS features, fixes, and news!

Other Extensions

Coming Soon...