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.

Evidence · Confidence · Reports

Every result can carry signal evidence, profile evidence, transport metadata, and conservative confidence reasons. Finished scans can become Markdown, JSON, or HTML investigation reports with identity clusters and timeline context.

For first-time users:

  1. Installcargo binstall, cargo install, or build from source.
  2. Quickstart — first scan, --explain, enrichment, and report export path.
  3. First scan walkthrough — guided scan → evidence → confidence → case-file flow.
  4. Usage — filtering / output / reports / 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, identity clusters, and report exports.
  • Investigation reports — Markdown, JSON, HTML, Web API, and MCP case-file output.
  • 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.