# Bookmarks Diff — REST API endpoint `bookmarks-diff`

Compare two Netscape bookmarks.html exports (before and after) and list the links that were added, removed, or changed. Links are matched by address the way dedupe_bookmarks compares them: host case, default port and trailing slash folded, and by default utm_* / fbclid / gclid parameters and the #fragment ignored. A match is "changed" when its title differs or, with compare_folders (default true), when it sits in a different folder. Returns counts, one entry per difference, a CSV report, and the added and removed links as importable bookmarks.html files. An address saved twice on one side is compared once, by its first copy. No link is fetched.

- Category: text
- MCP server: https://mcp.findutils.com/ (Streamable HTTP, no API keys, 120 req/min per IP)
- REST endpoint: POST https://api.findutils.com/api/tools/bookmarks-diff/execute (no API keys, 60 req/min per IP)
- Reference page: https://findutils.com/api/bookmarks-diff/
- Same tool on the other surface: https://findutils.com/mcp/bookmarks-diff/

## Call the endpoint (verified example)

```bash
curl -X POST https://api.findutils.com/api/tools/bookmarks-diff/execute \
  -H "Content-Type: application/json" \
  -d '{
    "before": "<!DOCTYPE NETSCAPE-Bookmark-file-1>\n<DL><p>\n    <DT><A HREF=\"https://example.com/\">Example</A>\n    <DT><A HREF=\"https://old.example/\">Old</A>\n</DL><p>\n",
    "after": "<!DOCTYPE NETSCAPE-Bookmark-file-1>\n<DL><p>\n    <DT><A HREF=\"https://example.com/\">Example (renamed)</A>\n    <DT><A HREF=\"https://new.example/\">New</A>\n</DL><p>\n"
  }'

# Parameter schema
curl https://api.findutils.com/api/tools/bookmarks-diff
```

## Input schema

| Argument | Type | Required | Description |
|---|---|---|---|
| `before` | string | yes | The older Netscape bookmarks HTML. |
| `after` | string | yes | The newer Netscape bookmarks HTML. |
| `strip_tracking` | boolean | no | Treat utm_*, fbclid and gclid parameters as noise when matching. Default true. Default: `true`. |
| `ignore_fragment` | boolean | no | Treat addresses that differ only by #fragment as the same page. Default true. Default: `true`. |
| `compare_folders` | boolean | no | Count a link that moved to another folder as changed. Default true. Default: `true`. |

Example arguments (verified):

```json
{
  "before": "<!DOCTYPE NETSCAPE-Bookmark-file-1>\n<DL><p>\n    <DT><A HREF=\"https://example.com/\">Example</A>\n    <DT><A HREF=\"https://old.example/\">Old</A>\n</DL><p>\n",
  "after": "<!DOCTYPE NETSCAPE-Bookmark-file-1>\n<DL><p>\n    <DT><A HREF=\"https://example.com/\">Example (renamed)</A>\n    <DT><A HREF=\"https://new.example/\">New</A>\n</DL><p>\n"
}
```

OpenAPI 3.1 spec: https://findutils.com/api/openapi.json · Interactive docs: https://findutils.com/api/docs/

## Also an MCP tool

```bash
claude mcp add findutils --transport http https://mcp.findutils.com/
```

Then ask the client to call `findutils:bookmarks_diff`. Full MCP reference: https://findutils.com/mcp/bookmarks-diff/

---
Full catalog: GET https://api.findutils.com/api/tools · https://findutils.com/api/ · https://findutils.com/llms.txt
