↖ Back to tools

xunf

Find the accounts you follow on X that don't follow you back.

xunf.jsFirst 28 of 2490 lines
(() => {
  "use strict";

  /* ── host guard ─────────────────────────────────────────────────────── */

  if (!/^(www\.|mobile\.)?(x|twitter)\.com$/i.test(location.hostname)) {
    alert("Open https://x.com first, then paste this script again.");
    return;
  }

  /* ── constants ──────────────────────────────────────────────────────── */

  const APP_ID = "xu-app";
  const STYLE_ID = "xu-style";
  const STORAGE_KEY = "xu_state_v1";
  const STORAGE_VERSION = 2;
  const PANEL_WIDTH = 380;
  const PANEL_MARGIN = 18;
  const DRAG_THRESHOLD = 4;
  const MAX_RETRIES = 3;
  const MAX_FEATURE_REPAIRS = 6;

  // Public web-client bearer, embedded in X's own JS bundle. Same for everyone.
  const FALLBACK_BEARER =
    "AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs%3D1Zv7ttfk8LF81IUq16cHjhLTvJu4FA33AGWWjCpTnA";

  // GraphQL query IDs rotate whenever X ships a new bundle. These are only a
  // last resort — discoverQueryIds() reads the live ones out of the loaded

How to use

  1. 1.Sign in at x.com in this browser.
  2. 2.Open the DevTools console — ⌘ + ⌥ + J on macOS, Ctrl + Shift + J on Windows and Linux.
  3. 3.Paste the snippet and press Enter.
  4. 4.Click “Start scan” in the panel that opens, then unfollow at your own pace.

X rate-limits bulk requests. If results stop coming, wait a few minutes before scanning again.

What it does

Walks your following list, compares it against your followers, and lists everyone who doesn't follow you back.

  • Runs entirely in your own browser session — nothing is uploaded, nothing is stored.
  • Not affiliated with X Corp.
  • The idea comes from cobanov.dev for Instagram, this is the x/twitter version.