Skip to main content
All articles
Tool launch
We Built a Free Tool to Export X/Twitter Bookmarks (Because the API Costs $200/Month)

Tool launch

We Built a Free Tool to Export X/Twitter Bookmarks (Because the API Costs $200/Month)

X charges $200/month for API access to your own bookmarks. We built x-bookmarks-exporter as an open-source Node.js alternative. No API key needed. Here's the technical story.

Developer ToolsOpen SourceWeb Scraping
AuthorSantiago Lobo
RoleFounder & Lead Developer
Published2026-03-30
Reading time7 min
Sections4
Scroll to read

01 / READ

The Problem: Your Bookmarks, Behind a Paywall

X Bookmarks Exporter is a free, open-source browser tool built by Displace Agency that lets you export your X/Twitter bookmarks without paying for API access. The X API now costs $200 per month at the Basic tier just to access your own bookmarks programmatically. Our tool works by intercepting the browser's existing API calls as you scroll through your bookmarks page, collecting the data X already sends to your browser.

We built x-bookmarks-exporter as a free, open-source alternative. It uses your existing browser session cookies to access bookmarks the same way your browser does. No API key. No paid tier. No data sent to third parties. Your bookmarks export to your local machine in CSV, JSON, or Markdown.

x-bookmarks-exporter is available at github.com/displace-agency/x-bookmarks-exporter. Install with npm install -g x-bookmarks-exporter.

By the numbers

$0

vs $200/month

2,400+

Bookmarks archived

4

Export formats

8mo

Surviving X changes

How It Works: Cookies, Not API Keys

The tool authenticates using two browser cookies: auth_token and ct0. These are the same cookies your browser sends with every X request. The tool reads them from your browser, then makes the same GraphQL requests that the X web app makes when you open your bookmarks page. No data goes to any third-party server. Everything stays local.

The clever part is endpoint detection. X changes their internal GraphQL endpoint URLs frequently, embedding them in minified JavaScript bundles. Our tool automatically fetches the current main.js bundle, parses it to find the Bookmarks query ID, and constructs the correct endpoint. When X changes the endpoint, the tool adapts without an update. This has survived 4 endpoint changes since we built it.

Rate limiting is handled with automatic backoff. X throttles requests aggressively, so the tool respects rate limit headers and waits the required time before retrying. A typical export of 1,000 bookmarks takes about 3-5 minutes with rate limiting respected. Our own archive has 2,400+ bookmarks exported across 8 months of incremental runs.

bash
# Install and run
npm install -g x-bookmarks-exporter
x-bookmarks-exporter --format json --out bookmarks.json

# Incremental, format-flexible
x-bookmarks-exporter --format csv --since last
x-bookmarks-exporter --format markdown --merge

Incremental Export: Only Fetch What's New

The first export downloads everything. Every subsequent export is incremental. The tool tracks the most recent bookmark ID and only fetches bookmarks added since the last run. This means your nightly export takes seconds instead of minutes, and you never lose bookmarks even if you run it months apart.

Exports merge cleanly. New bookmarks are added to the existing data file, duplicates are automatically deduplicated by tweet ID. The result is a single, growing archive of every bookmark you have ever saved. Our team runs it weekly via cron. Total data size after 2,400 bookmarks: 4.2MB JSON, 1.8MB CSV. Negligible storage.

  • First run: full export of all bookmarks (3-5 min for 1,000)
  • Subsequent runs: incremental, typically under 30 seconds
  • Automatic deduplication by tweet ID
  • 4 export formats: CSV, JSON, Markdown, plain text links
  • Local search across all exported bookmarks
  • Statistics: total count, date range, top authors
  • 2,400+ bookmarks exported in our own archive over 8 months

Why We Built It (And Why We Open-Sourced It)

The honest reason: we needed it. Our team saves hundreds of bookmarks per month. Design references, competitor analysis, client research, development resources. Losing access to that knowledge base because X decided to monetize API access felt wrong.

We open-sourced it because the tool is more valuable as a community resource than as a private utility. The more people who use it, the more likely someone contributes a fix when X inevitably changes their API structure. Open source is infrastructure. You maintain it by sharing it.