DEV Community

Cover image for Migrate your data from Readwise Reader to Omnivore
Duncan Lew
Duncan Lew

Posted on • Originally published at Medium

Migrate your data from Readwise Reader to Omnivore

Readwise Reader and Omnivore are both great read-later services. Each offers unique features and experiences. Although I was an avid user of Readwise Reader, I didn't use all of its features to their fullest. Omnivore, with its open-sourced nature, catered more closely to my needs. In situations where your needs change, migrating your saved content from Readwise Reader to Omnivore could become a necessity. Facing this issue myself, I decided to write my own tool to facilitate this process.

I had two main reasons for developing this tool. Firstly, I wanted to address this need that I have to seamlessly transfer my content between these two services. Fortunately, Omnivore provides a very extensive API to achieve this. Secondly, this project served as an opportunity for me to learn Rust, a programming language popular for its performance and memory safety.

This blog post will describe the steps you need to perform to import your data into Omnivore. The GitHub project with the source code can be found here.


To get started with the data migration tool, you will need the following:

  • Exported CSV file from Readwise Reader using the web interface. Check Readwise's FAQ for the steps.
  • API key from Omnivore

Running the importer tool

There are two ways to run the importer tool. The easiest way without requiring to install Rust is by using the binary. For those who would like to explore the repository or make changes to the source code, it's also possible to run the tool with the Rust build tools.

Running it with the binary

A compiled binary is available for download in the project GitHub Releases of this project.

1. Download the binary

Navigate to the Release page and download the latest version for your operating system

2. Run the binary

Open a terminal and navigate to the directory where you downloaded the binary. Add your CSV file in that directory and then run the following command with the two parameters replaced

./readwise_to_omnivore_importer --key YOUR_API_KEY --file-path   PATH_TO_CSV
Enter fullscreen mode Exit fullscreen mode

Running it locally

To run the project locally, make sure to first install Rust on your local machine. This should only take a few minutes. When that is done, open up a terminal and follow these steps:

1. Clone the repository

git clone   
cd readwise-to-omnivore-importer    
Enter fullscreen mode Exit fullscreen mode

2. Add your CSV file

Add your exported CSV file from Readwise Reader into the directory called readwise-to-omnivore-importer.

3. Run the importer

In the following command replace YOUR_API_KEY and PATH_TO_CSV with your api key and file path to your CSV, respectively.

cargo run -- --key YOUR_API_KEY --file-path PATH_TO_CSV 
Enter fullscreen mode Exit fullscreen mode


Transitioning your reading list from Readwise Reader to Omnivore is a streamlined process thanks to their easy export and import tools and APIs. Moreover, creating your own tool using an unfamiliar tech can be both rewarding and educational. I hope this guide, along with the provided source code in the GitHub project inspires you to embark on your own journey of continuous learning. Happy coding! 😎

Readwise to Omnivore importer

The "Readwise to Omnivore Importer" is a custom tool developed using Rust to facilitate the import of articles from Readwise Reader into Omnivore. It uses a CSV file exported from Readwise Reader using the web interface The importer parses this CSV file, ensuring all data is transferred to Omnivore. Additionally, a verification check is run to confirm the existence of a URL before importing it into Omnivore. This is done to avoid polluting your Omnivore library with broken links Furthermore, the tool provides clear logging results and a summary of the import process.


  • Parse the exported CSV file
  • URLs that are invalid won't be imported into Omnivore
  • Import into Omnivore using an API key for authentication
  • Detailed logging of invalid and errored results shown in the terminal and stored as a CSV file
  • Possibility to run the project locally or use the tool as…

If the content was helpful, feel free to support me here:

Buy Me A Coffee

Top comments (0)