A simple Blazor app which converts libraries of saved links between the native formats of various read-it-later services. Currently supports GoodLinks, Instapaper, Omnivore, and Raindrop.io.
Ensure that the latest .NET 8 SDK is installed on the host system. Then simply clone into the repo and execute dotnet run --project Polyglot
from the project directory. Navigate to the URL indicated in the dotnet run
command output, and you will be presented with a simple interface allowing you to choose the input format (i.e. your current read-it-later service), the output format (i.e. the read-it-later service you wish to import your library into), and finally the input file itself. After uploading your input file, the exported result of the format conversion process will immediately be available in the default download directory of your current browser.
Please be aware that each read-it-later service has its own particular limitations. These are detailed below, along with instructions on how to properly import the file provided by this app.
GoodLinks supports many the features of other read-it-later services supported by this app, with the notable exception of folders. In addition, GoodLinks does not use a specific "archived" flag internally; rather, it presents links as "read" to users based on whether the link as a "read at" time. Therefore when GoodLinks is the target export format, all archived links from other apps will be marked as having been "read at" whatever time the format conversion took place. In practice this should not be an issue at all, unless you have an existing GoodLinks library which you are adding to; if this is the case, all imported links in an archived state will appear to have been "read" more recently than those already in GoodLinks at the time of the import.
Navigate to File->Import->GoodLinks
(on macOS) or Settings->Import->GoodLinks
(on iOS/iPadOS) and upload the "goodlinks.json" file provided by this app. Because this process is irreversible, users are highly encouraged to test the file conversion and import process using a dummy account before doing so on their permanent account.
Instapaper's organizational tools are extremely limited. First of all it does not support tags; instead, it uses folders, with each saved link being able to live in only one folder at a time. In addition, archived links cannot be assigned to any folder at all. Instapaper does support "Likes" which corresponds to "Stars" or "Favorites" in other apps; however, Instapaper's import tool uses the same field for "Liked" as it does for "Folder" and "Archive", and only one value can be assigned to that field per link. This makes it extremely impractical to make use of the "Liked" category when importing items.
Given these considerable constraints, this tool has elected to make the following decisions when importing into Instapaper:
- Archived/read items will be sent to the Archive folder in Instapaper (tags will be ignored)
- Unread items with at least one tag will be sent to a folder in Instapaper equivalent to the first tag in GoodLinks (all other tags will be ignored)
- All other unread items (i.e. those without tags) will be sent to the Home (i.e. "Unread") folder in Instapaper
- Stars/favorites on items will be ignored (users are free to manually mark these links as "Liked" in Instapaper after import)
When exporting from Instapaper, if a link has been assigned a folder in Instapaper then the folder name will be assigned as a tag to that link.
Nvigate to the Settings page of the Instapaper web app and scroll down until you reach the Import section, then click the "Import from Instapaper CSV" button and provide the "instapaper.csv" file provided by this app. Because this process is irreversible, users are highly encouraged to test the file conversion and import process using a dummy account before doing so on their permanent account.
Omnivore supports tags, but not folders or favorites. In addition, there is currently no built-in way to export links from Omnivore at all, and so this app supports it only as a target format coming from other read-it-later services.
In the Omnivore web app (mobile apps currently do not support importing files), click the yellow "Add" button at the bottom of the sidebar, then navigate to the "Import" tab and upload the "omnivore.csv" file provided by this app. Because this process is irreversible, users are highly encouraged to test the file conversion and import process using a dummy account before doing so on their permanent account.
Raindrop.io has a fairly rich feature set, and supports both tags and collections (i.e. folders). However, it does not currently support a native archived/marked-as-read status (though this can be achieved manually in a manner similar to that detailed below). Finally, while it supports a "Favorite" status, this field is not writable using the import tool. Therefore this tool has made the following choices when importing into Raindrop.io:
- Archived/read items will be sent to a Raindrop.io collection called "Archive"
- Unread items will be sent to a Raindrop.io collection called "Inbox"
- Stars/favorites on items will be ignored (users are free to manually mark these links as "Favorites" in Raindrop.io after import)
When exporting from Raindrop.io, the collection assigned to each item will be ignored.
Navigate to the Settings page of the Raindrop.io web app and then choose the Import tab on the sidebar. After uploading the "raindrop.csv" file provided by this app, you will be given the option to either import everything, import only new items, or start from scratch by removing all existing links in your account and retaining only the imported items. Because each of these processes is irreversible, users are highly encouraged to test the file conversion and import process using a dummy account before doing so on their permanent account.