A reminder to own your data

It happened before, it’s happening again, and it will continue in the future. Platforms come and go, and your data is the price to pay.

Anytime you use a closed source application, your data is in the mercy of the said platform. If this platform goes down, they might give you access to your data but it’s not always easily transferable to other extensions/types.

The latest platform to die is Revue, a newsletter service offered by Twitter.

Revue shutdown notice

I’ve been using Revue mainly because it makes it easier to capture subscribers from Twitter. In total, I’ve written a total of 19 issues in the platform, which is now hard to get as the exported data is weird.

Anyway, I created a simple script that transforms the exported data to simple HTML files.

Once you export your data from Revue, take the .json file and place it in the same directory as the file below index.js (please also rename it to items.json). Finally, execute node index.js.

This requires Node.js to be installed locally.

// Place the JSON exported from revue in the same directory, and rename it to items.json
// Or just change the path here
const items = require( './items.json' );
const issue_ids = new Set( items.map( t => t.issue_id ) );
const fs = require( 'fs' );
const issues = [ …issue_ids ].map( id => {
const content = items.filter( i => i.issue_id === id ).sort( a => a.order ).map( t => {
switch( t.item_type ) {
case 'link':
let link_content = "<a href=" + t.url + ">" + t.description + "</a>";
if( t.image ) {
link_content += "<img src=" + t.image + " />";
return link_content;
return t.description;
} );
return {
issue_id: id,
content: content.join( "" ),
} );
fs.mkdirSync( './result' );
issues.map( issue => {
fs.writeFileSync( './result/'+ issue.issue_id + '.html', issue.content );
} );
view raw index.js hosted with ❤ by GitHub

After execution, you should have a list of html files with your content.

I hope this is helpful! Enjoy.

Leave a Reply

%d bloggers like this: