Workflow: Readwise Reader to DevonTHINK via Obsidian

Hi, all. I’m a heavy user of Readwise Reader - I save a large backlog of articles that I consult for reference purposes. I have a pretty comprehensive tagging scheme, and in fact used Claude Cowork a few months ago to suggest tweaks to my taxonomy, and to help me triage a large of unread articles. (They have an MCP server that Claude can talk to.)

However, I’ve accumulated lots of documents and years of my own writing that I want to include in my research as well. I’ve started putting all of that material into DevonTHINK Pro 4 - but wanted to find a way to bring my Readwise Reader articles in as well.

Here’s how I did it.

Readwise Reader to Obsidian

Readwise Reader has an official plugin that can export markdown of all articles. to Obsidian. (It was originally meant for highlights, and later added an option to export articles.) It is all-or-nothing —you can’t ask for only a particular date range or tag — but if you leave the old articles sitting in Obsidian, it will only retrieve new ones on the next sync. And the export does not save the actual date the article was saved to Readwise, so the “saved” field winds up being the date of export. (Published date, on the other hand, does carry across. And Readwise autogenerates a summary field for you on initial import.)

I have set up the plugin’s configuration as follows, so that the metadata is placed in Multimarkdown (YAML) front matter at the top of each article.

Group Files in Category Folders: Off
Export All Reader Documents: On
Use Custom File Name: Off
Use Custom Formatting: On

Page title:
# {{title}}

Page metadata:
leave this field empty!

Highlights header, Highlight, Full Document Text Link:
Left these as the default.

Full Document Text:
{{ full_text }}

YAML front matter - this is important, as DevonTHINK can draw on this later:

title: {{ title | replace("#", "") | trim }}
author: "{{author}}"
category: {{category}}
url: {{url}}
published: {{published_date|date('Y-m-d')}}
saved: {{date|date('Y-m-d')}}
last_highlighted: {{last_highlighted_date|date('Y-m-d')}}
tags: readwise, {{category}}{% if document_tags %}, {{document_tags|join(', ')}}{% endif %}
summary: "{{summary|replace('\n',' ')|replace('"','')}}"

This does the following:

  • Gets rid of # in titles, and any leading or trailing whitespace in titles. (Why do I not have this field in double-quotes? Not sure!)
  • Sets tags to readwise, the category (article/book/podcast/tweet), then all of the other tags assigned in Readwise, comma-separated. (I have been told it’s not a bad idea to made to semicolon as my separator so that tags with commas will not choke - might do that, but my taxonomy doesn’t have commas, so…
  • For summary: strips new lines, replaces double quotes with single quotes, then wraps the whole thing in double quotes.

Articles now look like this random sample from the past few days:

—
title: "Migrate to Apple Passwords from your current secret-keeper"
author: "sixcolors.com"
category: articles
url: https://sixcolors.com/post/2026/09/migrate-to-apple-passwords-from-your-current-secret-keeper/
published: 2026-09-08
saved: 2026-09-09
last_highlighted:
tags: readwise, articles, privacy, techtips
summary: "Apple Passwords has improved and now matches key features of top third-party password managers for passwords, passkeys, and TOTPs. Migration is simple if you use Apple devices, but it doesn't support Android or Linux, and some data types like structured info and shared vaults won't transfer well. For non-password items or complex sharing needs, you may still need a separate password manager or secure storage solution."
—
# Migrate to Apple Passwords from your current secret-keeper
![Glenn Fleishman, art by Shafer Brown](https://i0.wp.com/sixcolors.com/wp-content/uploads/2025/06/glenn-shaferbrown.png?resize=1360%2C778&ssl=1)Glenn Fleishman, art by Shafer Brown

You might be interested in knowing how to embrace Apple Passwords with a bear hug, leaving behind your [current password manager](https://www.theverge.com/tech/988536/1password-dhh-linux-controversy). If you tried Apple’s Passwords app in the past and were disappointed, you should probably give it another try. The improvements Apple has made in the last couple of releases have brought it to what I consider parity with the most important useful features of well-designed third-party password managers. (etc etc) 

Obsidian to DevonTHINK
My Obsidian vault looks like this:

Obsidian > 
	Readwise Export >
		Full Document Contents > 
			A bunch of markdown files
		Highlight file 1.md
		Highlight file 2.md

(I would like the highlights to be in their own subdirectory, but I think I will need to set up a Hazel rule to do that.)

DevonTHINK database configuration

In DEVONthink:

Set up a database, let’s call it “scholarship” The database has two custom data fields:

summary (multiline text)
published (date)

DevonTHINK settings:

Settings > Files > Tags:

Turned off both Finder tags settings - I don’t use them, and I am dealing with over 10k files so don’t want a performance bottleneck.

For Import, turned on “Convert hashtags to tags” - will explain more below.

In Settings > Files > Markdown it’s possible to add a custom CSS stylesheet if desired.

And finally, I set the Readwise Export folder as an Indexed source for Devonthink.

When you do this, as long as the “Convert hashtags to tags” setting is on, DT will automatially populate its standard metadata fields with the MMd frontmatter. This includes:

  • Author
  • Title (and Name, which wind up being the same)
  • All of the tags that were on the original documents.

Adding Custom Fields to Import

What does not happen automatically: populating my custom data fields (published and summary) with the matching MMd fields.

Solution: two Smart Rules that run on import (i.e. automatically when the index folder changes.)

Rule 1: “Published Date to Custom Field” takes all Markdown files and does Apply Script > Javascript with the following:

function performsmartrule(records) {
	var app = Application("DEVONthink");

	for (var i = 0; i < records.length; i++) {
		var record = records[i];
		var text = record.plainText();
		if (text.indexOf("---\n") !== 0) continue;

		var endIdx = text.indexOf("\n---\n", 4);
		if (endIdx < 0) continue;

		var yaml = text.substring(4, endIdx);
		var match = yaml.match(/^published:\s*(\d{4}-\d{2}-\d{2})\s*$/m);
		if (!match) continue;

		var parts = match[1].split("-");
		var d = new Date(parseInt(parts[0]), parseInt(parts[1]) - 1, parseInt(parts[2]));

		app.addCustomMetaData(d, { for: "published", to: record });
	}
}

And for the summary field, same thing, but the script is:

function performsmartrule (records) {
	var app = Application("DEVONthink");
	
	for (var i = 0; i < records.length; i++) {
		var record = records[i];
		var text = record.plainText();
		if (text.indexOf("---\n") !== 0) continue;
		
		var endIdx = text.indexOf("\n---\n", 4);
		if (endIdx < 0) continue;
		
		var yaml = text.substring(4, endIdx);
		var match = yaml.match(/^summary:\s*"?(.*?)"?\s*$/m);
		if (!match || !match[1]) continue;
		
		app.addCustomMetaData(match[1], { for: "summary", to: record });
	}
}

These rules work like a charm - DT processed 13,000 files in a few seconds.

The final headache: the required hashtag import is regrettable, since my tags in Devonthink now had many dozen random unwanted items based on random hashtags in article bodies. Those, I had to manually clean up on my first big important, and I will need to continue to prune occasionally.

I have filed an enhancement request for the DT team to enable MMd metadata import without also being forced to bring along hashtags. (The metadata import does not work if the setting is turned off - I checked. This was a surprise to tech support as well - they initially thought it was not required, but turned out that their use of Finder tags on their files fooled them into thinking that the setting was not required.)

So that is my new research infrastructure. I also imported folders with several hundred more files, and am happily using DT’s built-in tools.

DevonTHINK also has optional AI tools. I am not giving it my Anthropic key in order to chat with the database, since I can’t draw on my $20/month subscription to do so - I’d have to add money for paid API use in addition.). However, they also have an MCP server, so I am able to ask Claude to research something in my DT database, find related clusters of articles and documents, pull together a markdown summary with internal DT links, and save it to a Research folder back in DevonTHINK.

Good stuff.

4 Likes

Thank you for the workflow – obviously a lot of hard works has gone into it!

For those who don’t have or want Obsidian (or Claude), Brett Terpstra has a ruby script that will directly download articles from Readwise to DEVONthink. I’ve used it and found it very good – enough to donate to his page as thanks. I’ve not yet tested it on Golden Gate, though….

GitHub - ttscoff/readwise_to_devonthink · GitHub

1 Like

Thanks! As I recall, Brett Terpstra’s script only brings over highlights, not full articles. But I will double-check, and maybe point him toward what I did to see if he wants to incorporate anything. Just found out from DT tech support that they have Applescript support for parsing multimarkdown metadata, so, for example, to get the url field, you can do

tell application id "DNtp"
repeat with theRecord in selected records
set theMetadata to get metadata of markdown (plain text of theRecord)
try
set theURL to |url| of theMetadata
if theURL is not "" then set URL of theRecord to theURL
end try
end repeat
end tell
1 Like