Import the Delicious dump into Pinboard

In a previous article, I explained how to dump all your bookmarks from Delicious using a web scraper. As I’m switching to Pinboard, I still needed a way to import the exported bookmarks.

Content structure

The exported bookmark file is a CSV file, but with a snippet of JSON for the bookmark tags:

"Lifehacker","","[{""tag"":""gtd""},{""tag"":""news""},{""tag"":""productivity""}]","tips and downloads for getting things done"


The Pinboard API is fully documented online. To import the CSV file into Pinboard, I wrote a little Python script to process line by line.

import csv
import json
import urllib
bookmark_file = '<bookmark_file_from_delicious>'
pinboard_token = '<your pinboard token>'
def process_tags(csv_tags):
json_tags = json.loads('{ "tags": %s }' % csv_tags)
json_tags = json_tags['tags']
tags = []
for json_tag in json_tags:
return tags
with open(bookmark_file, 'rb') as csvfile:
bookmarks = csv.reader(csvfile, delimiter=',', quotechar='"')
next(bookmarks) # Skip header
for bookmark in bookmarks:
bookmark_post_data = {
'url': bookmark[1],
'description': bookmark[0]
if bookmark[3]!='null':
bookmark_post_data['extended'] = bookmark[3]
tags = process_tags(bookmark[2])
if len(bookmark[2]) > 0:
bookmark_post_data['tags'] = ",".join(tags)
bookmark_post_data['auth_token'] = pinboard_token
params = urllib.urlencode(bookmark_post_data)
print "Adding %s" % bookmark[1]
f = urllib.urlopen("" % params)

Each line is converted from the CSV/JSON structure to a URL encoded set of arguments. These arguments are then used in an HTTP call to create the bookmark at Pinboard.


Download a local copy of my script, update the variables at the beginning with the name of your dump file and put your Pinboard account token. You can find this token in the Pinboard Password settings.