Guide

Sherlock in Practice: Fast Username Sweeps Without the Noise

By OSINTPanel Editorial TeamPublished August 18, 2026Updated August 18, 2026

Sherlock answers one narrow question as fast as possible: does this exact handle exist on this site, yes or no. It doesn't read the page, doesn't extract a bio, doesn't follow linked accounts — it fires a request at hundreds of platforms and infers a hit from the HTTP status code and response text it gets back. That narrowness is the whole point. Where a deeper tool like Maigret spends real time scraping every match it finds, Sherlock stays cheap enough to run against every username on a list, which is exactly why it's usually the first tool reached for in a username pivot rather than the last.

What it covers

The current release (0.16.0) ships checks for 400+ sites out of the box, all defined in a maintained JSON manifest rather than hardcoded per-site logic, which is part of why the project has stayed usable as platforms change their login pages and error states over the years. Matching is strictly literal: there's no fuzzy search or regex, only a single templating trick where {?} in a username gets expanded into common separator variants (underscore, hyphen, dot) so you can check a handful of realistic spellings in one pass.

Installing it

The cleanest install path is pipx, which keeps Sherlock's dependencies isolated from the rest of your Python environment:

pipx install sherlock-project

A plain pip install works too if you don't have pipx set up:

pip install --user sherlock-project

It's also packaged for most platforms you'd actually be doing this work from — Homebrew on macOS, APT on Kali, DNF on Fedora, and BlackArch's repos all carry it, alongside an official Docker image if you'd rather not touch the host Python at all. Either way you'll need Python 3.9 or newer and a working internet connection; nothing else is required since Sherlock never authenticates to the sites it checks.

Running a search

The base case is one argument:

sherlock user123

and it accepts several at once for a batch sweep:

sherlock alice bob charlie

The {?} substitution mentioned above is worth using whenever you're not sure how a person formats their handles:

sherlock "john{?}doe"

which checks john_doe, john-doe, and john.doe in a single run instead of three separate ones. To keep terminal output readable on a wide sweep, drop everything except confirmed hits:

sherlock user123 --print-found

Results can be written straight to a file or folder — plain text by default, or structured formats when you need to hand the list to another tool or a spreadsheet:

sherlock user123 -o results/user123.txt
sherlock alice bob -fo results/
sherlock user123 --csv
sherlock user123 --xlsx

If you already know which platforms matter for a case, scope the run down instead of scanning everything:

sherlock user123 --site GitHub --site Instagram

OPSEC and reliability options

Because Sherlock is making hundreds of automated requests per run, a few flags exist specifically to manage how that traffic looks and where it comes from. Route through Tor, optionally requesting a fresh circuit for every request:

sherlock user123 --tor
sherlock user123 --unique-tor

or point it at a proxy you control:

sherlock user123 --proxy http://127.0.0.1:8080

The default per-site timeout is 60 seconds; slow or heavily rate-limited targets sometimes need that raised with --timeout. Worth knowing before a long run: hammering the same set of sites repeatedly in a short window is a good way to earn a temporary IP block from platforms that watch for scraping patterns, independent of anything Sherlock itself does to hide the traffic.

The false-positive trap

Sherlock's speed comes directly from not reading pages — it trusts HTTP status codes and a detection string to decide whether a profile exists. Most sites cooperate by returning a proper 404 for a missing user, but plenty return 200 OK for a "this account doesn't exist" page instead, and if that platform's entry in Sherlock's manifest hasn't been kept current, every username you check against it comes back as a false hit. The manifest is actively maintained, but new site redesigns outpace any maintained list eventually. The practical fix is procedural, not technical: never forward a raw Sherlock result list as a finding. Open the top handful of hits by hand and confirm the profile actually exists before it goes in a report.

The same narrowness that makes it fast also caps what it can tell you. A confirmed hit is only ever a location, not proof of ownership — Sherlock does nothing to help you decide whether the account belongs to the person you're actually investigating versus someone who happened to register the same handle first. It also can't see anything behind a login wall, so private or restricted profiles just don't factor into its results at all. And its site list, while broad, skews toward globally popular platforms; regional social networks and niche communities usually need a different, more targeted tool.

Cost and difficulty

Free and open source (MIT), whether you install it via pipx, a system package manager, or the official Docker image — nothing behind Sherlock's own CLI requires payment. Difficulty is around 3 out of 5: the install and a basic run are about as simple as OSINT tooling gets, but using it well — scoping sites, routing through Tor when needed, and manually confirming hits instead of trusting the raw list — assumes some baseline comfort with the command line.

Where it sits in a workflow

Treat Sherlock as a map of where to look, not a report of what you found. The efficient pattern is to run it first across every alias you're tracking, manually verify the hits worth pursuing, and then bring in a heavier tool — something like Maigret — against that shortlist to actually extract bios, avatars, and cross-linked accounts from the profiles that survived the check. Running the slow tool first wastes time on usernames that were never going to pan out; running Sherlock first and filtering hard before going deeper is what keeps a username pivot from turning into hours of reading dead-end profile pages.