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”.
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:
cargo binstall, cargo install, or build from source.--explain, enrichment, and report export path.For operators going beyond the basics:
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:
| Sherlock | Maigret | Blackbird | Snoop | Adler | |
|---|---|---|---|---|---|
| Approx. sites | 400 | 3,000 | 600 | 5,400 | 3,000 |
| Verdict model | Found / NotFound | Found / NotFound | Found / NotFound | Found / NotFound | Found / NotFound / Uncertain(reason) |
| Bot-protected sites | — | — | — | — | headless Chrome |
| TLS-fingerprint blocking | — | — | — | — | Chrome 134 emulation |
| Per-site geo / IP-type routing | one global | one global + Tor + I2P | — | — | per-site policy |
| Login-walled sites | — | global cookies.txt | — | — | per-site named sessions |
| Automatic escalation | — | — | — | — | cheap → browser on CF / 429 |
| Self-healing registry | — | — | — | — | --doctor --fix |
| Web UI | — | yes | — | — | SolidJS SPA + SSE + JSON API |
| Embeddable library | — | partial | — | — | adler-core on crates.io (Rust) |
| Runtime / packaging | Python | Python | Python | Python | Rust — 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.