
Product
Socket for Asana Is Now Available
Create and manage Asana tasks directly from Socket alerts, with manual task creation, automated ticketing rules, and two-way sync.
parse-bookmarks
Advanced tools
Parse any bookmark export into clean JSON — browser bookmark HTML, Pocket, Instapaper, Raindrop CSV — and convert between formats. Zero dependencies, zero build.
Parse any bookmark export into clean JSON, and convert between formats.
Every browser and read-later app exports bookmarks in a different shape: the ancient Netscape HTML file (Chrome, Firefox, Safari, Edge — with unclosed tags, because 1996), Pocket's CSV, Instapaper's CSV, Raindrop's CSV. If you build anything that touches saved links, you end up writing these parsers yourself. This is that code, written once, tested, with zero dependencies and zero build step.
npm install parse-bookmarks
import { parse } from "parse-bookmarks"
const { format, bookmarks, warnings } = parse(fileContents)
// format → "netscape-html" | "pocket-csv" | "instapaper-csv" | "raindrop-csv" | "url-list"
// bookmarks→ [{ title, url, addedAt, tags, folder }, ...]
Auto-detection covers:
| Source | Format | Notes |
|---|---|---|
| Chrome / Firefox / Safari / Edge / Vivaldi export | Netscape bookmark HTML | folders (nested), ADD_DATE, Firefox TAGS |
| Pocket CSV export | pocket-csv | pipe-separated tags, archive status |
| Instapaper CSV export | instapaper-csv | folders, timestamps |
| Raindrop.io CSV export | raindrop-csv | comma tags, ISO dates |
| A pasted list of URLs | url-list | URL, Title | URL, Title - URL, [Title](URL) |
Every parser returns the same unified shape:
interface Bookmark {
title: string
url: string
addedAt: string | null // ISO 8601
tags: string[]
folder: string | null // "Work/Reading"
}
import { toMarkdown, toCsv, toJson, toNetscapeHtml } from "parse-bookmarks"
toMarkdown(bookmarks) // - [Title](url), grouped by folder
toCsv(bookmarks) // title,url,addedAt,tags,folder
toJson(bookmarks) // pretty JSON
toNetscapeHtml(bookmarks) // HTML file every browser can import
The last one is the escape hatch people ask for the most: Pocket CSV in, browser-importable HTML out — your saved list back in a place that will outlive any single app.
import { parse, toNetscapeHtml } from "parse-bookmarks"
toNetscapeHtml(parse(pocketCsv).bookmarks)
.d.ts. node --test for tests. Works in Node ≥18 and modern browsers.warnings, because real exports are messy.Built by the team behind Burn 451, a read-later app where every save gets 24 hours before it burns. This library is deliberately neutral — use it to build a Burn competitor if you like.
Pairs well with bookmarks-mcp, which uses it to make your live browser bookmarks readable by AI assistants.
MIT
FAQs
Parse any bookmark export into clean JSON — browser bookmark HTML, Pocket, Instapaper, Raindrop CSV — and convert between formats. Zero dependencies, zero build.
The npm package parse-bookmarks receives a total of 65 weekly downloads. As such, parse-bookmarks popularity was classified as not popular.
We found that parse-bookmarks demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Product
Create and manage Asana tasks directly from Socket alerts, with manual task creation, automated ticketing rules, and two-way sync.

Security News
Open VSX has removed three extension IDs from its malicious-extension list as the legitimate publishers they impersonated move to claim the names for themselves.

Product
Socket’s PHP and Composer support is now in Beta for all customers, with PHP reachability analysis generally available.