Skip to content

Adler

OSINT username search across ~3,000 sites, in Rust. Honest verdicts and built to reach the hard ones — Cloudflare-walled, TLS-fingerprinted, geo-restricted, login-walled.

Named for Irene Adler — “the Woman”, the one who outwitted Sherlock Holmes. Where Sherlock searched, Adler outsmarts.

Honest verdicts

Found / NotFound / Uncertain(reason) — when a Cloudflare wall, login page, or rate-limit blocked us, we say so instead of guessing. Adler distinguishes “verified-absent” from “I gave up at the first wall”.

Reach the hard sites

Per-site geo / IP-type routing, operator session injection for login-walled sites, Chrome 134 TLS-fingerprint emulation, and headless Chrome for bot-protected platforms — all bounded by per-scan budgets.

Self-healing registry

adler --doctor validates every detection signal; --doctor --fix diffs present/absent responses and proposes corrected signatures. A nightly GitHub Action sweeps the registry and flags structural rot.

CLI · Library · Web UI · API

Single Rust binary for the terminal; adler-core on crates.io for embedding; adler --web launches a SolidJS SPA with live SSE streaming; JSON API for driving from your own frontend or scripts.

For first-time users:

  1. Installcargo binstall, cargo install, or build from source.
  2. Quickstart — first scan in under a minute.
  3. Usage — filtering / output / network / browser / batch.

For operators going beyond the basics:

  • Access engine — how Adler reaches sites that block plain HTTP (browser backend, impersonate, egress pool, sessions, automatic escalation).
  • Web UI — the SPA, the access modal, per-scan egress subset selection.
  • Embedding — drive adler-core from your own Rust code.

If something isn’t behaving as expected, the FAQ covers the common cases (everything Uncertain, why fewer Found than Sherlock / Maigret, sock-puppet legality, …).

The honest positioning vs other open-source username-search tools, on the dimensions that matter when sites push back:

SherlockMaigretBlackbirdSnoopAdler
Approx. sites4003,0006005,4003,000
Verdict modelFound / NotFoundFound / NotFoundFound / NotFoundFound / NotFoundFound / NotFound / Uncertain(reason)
Bot-protected sitesheadless Chrome
TLS-fingerprint blockingChrome 134 emulation
Per-site geo / IP-type routingone globalone global + Tor + I2Pper-site policy
Login-walled sitesglobal cookies.txtper-site named sessions
Automatic escalationcheap → browser on CF / 429
Self-healing registry--doctor --fix
Web UIyesSolidJS SPA + SSE + JSON API
Embeddable librarypartialadler-core on crates.io (Rust)
Runtime / packagingPythonPythonPythonPythonRust — single static binary

Adler’s thesis: honest verdicts plus access for the sites that matter. A NotFound from a Python-HTTP-only tool on a Cloudflare-walled, TLS-fingerprinted, geo-restricted, or login-walled site is often just “I gave up at the first wall.” Adler reports Uncertain(reason) when it couldn’t verify, and ships the transports you need to break the wall — without solving CAPTCHAs or evading human-verification.