Skip to content

Bookmarklet/Console script captures 0 bookmarks — X migrated from GraphQL to live_pipeline #65

@KashAoyagi

Description

@KashAoyagi

Description

The bookmarklet and console script both complete Auto-scroll but capture 0 bookmarks. The root cause appears to be that X/Twitter has migrated (at least for some users) from GraphQL API calls to a live_pipeline system for serving bookmark data.

Steps to Reproduce

  1. Clone and start Siftly (./start.sh) — starts fine, Claude CLI detected
  2. Navigate to x.com/i/bookmarks in Chrome
  3. Run bookmarklet OR paste Console Script into DevTools
  4. Click ▶ Auto-scroll — page scrolls through all bookmarks
  5. Result: ✅ Auto-scroll complete! 0 bookmarks ready. Click Export.

Network Analysis

When filtering DevTools Network tab by graphql:

  • Zero /graphql/ requests appear during scrolling
  • Only user_flow.json, badge_count.json, p2, and events?topic= (SSE) requests are visible

In the Console, after Auto-scroll completes:

POST https://api.x.com/1.1/live_pipeline/update_subscriptions — 400 (Bad Request)

This repeats many times, suggesting X now uses live_pipeline for real-time data delivery instead of GraphQL fetch calls.

Root Cause

The bookmarklet/console scripts hook window.fetch and XMLHttpRequest to intercept responses containing /graphql/ in the URL. Since X appears to have migrated bookmark data delivery to a live_pipeline system (possibly Server-Sent Events or a similar streaming mechanism), no /graphql/ requests are made during scrolling, and the hooks capture nothing.

Environment

  • macOS (Darwin 24.6.0)
  • Chrome (DevTools 146)
  • Node.js v25.8.2
  • Siftly cloned from main on 2026-03-30
  • Claude CLI authentication (working)

Screenshots

DevTools Network tab (filtered by graphql) — no results:

Console output showing live_pipeline 400 errors and 0 captured:

(Screenshots available — this was filed based on hands-on debugging)

Possible Fix Direction

The capture mechanism may need to be updated to intercept the new live_pipeline endpoint or use DOM scraping as a fallback when GraphQL interception yields 0 results.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions