Run the Sherlock OSINT username hunter through ProxyHat residential proxies — rotating IPs, geo-targeting, fewer blocks.
Project description
sherlock-proxyhat
Run Sherlock — the OSINT username hunter — through ProxyHat residential proxies. Rotating residential IPs by default (a fresh IP per connection across the hundreds of sites Sherlock checks), plus geo-targeting and anonymity, so you get rate-limited and blocked far less.
What this is
Sherlock is an app, not a library: you run sherlock <username> and it checks that name across 400+ sites, accepting a single --proxy <url> for all of them. Hammering that many sites from one datacenter IP gets throttled and blocked fast.
sherlock-proxyhat is a thin launcher. It resolves a ProxyHat residential gateway URL, then runs the real sherlock executable with --proxy <url> prepended — every other argument (usernames and Sherlock's own flags) passes straight through. No fork, no patched Sherlock: it just wires ProxyHat into the --proxy flag Sherlock already has.
Install
pip install sherlock-proxyhat sherlock-project
sherlock-project (which provides the sherlock command) is an optional dependency — this launcher shells out to the sherlock executable, so any install works (pip, pipx, system package). To pull it in with the launcher:
pip install "sherlock-proxyhat[sherlock]"
Quick start
# An API key auto-selects an active residential sub-user:
export PROXYHAT_API_KEY=ph_xxx
# Same arguments as sherlock — just run it through the launcher:
sherlock-proxyhat johndoe
# Geo-target and add sherlock's own flags; everything after is passed through:
sherlock-proxyhat --proxyhat-country us johndoe janedoe --timeout 30 --csv
Get an API key at proxyhat.com.
Anything that isn't a --proxyhat-* option is forwarded to sherlock verbatim, so every Sherlock flag (--timeout, --site, --nsfw, --csv, -o, …) works unchanged.
Credentials
Pass them as --proxyhat-* flags or via environment variables — flags win over env:
| Flag | Env var | Notes |
|---|---|---|
--proxyhat-api-key |
PROXYHAT_API_KEY |
Auto-selects an active sub-user with remaining traffic |
--proxyhat-sub-user |
PROXYHAT_SUBUSER |
Pick a specific sub-user by uuid or name (with an API key) |
--proxyhat-username |
PROXYHAT_USERNAME |
Explicit gateway proxy_username (skips the API) |
--proxyhat-password |
PROXYHAT_PASSWORD |
Explicit gateway proxy_password |
Targeting
All targeting lives on --proxyhat-* flags, which are stripped before the command reaches sherlock:
sherlock-proxyhat \
--proxyhat-protocol http \ # or socks5
--proxyhat-country us \ # ISO code or "any" (default)
--proxyhat-region california \
--proxyhat-city los_angeles \
--proxyhat-filter high \ # AI IP-quality tier
johndoe
Rotating IPs by default
Sherlock reuses one proxy for the whole run, so this launcher builds a rotating gateway username by default: the ProxyHat gateway hands out a fresh residential IP on every connection, spreading the hundreds of per-site checks across many IPs — exactly what you want to dodge per-IP rate limits during a scan.
Want to pin a single IP for the whole run instead? Add --proxyhat-sticky (optionally with a lifetime via --proxyhat-sticky-ttl):
sherlock-proxyhat --proxyhat-sticky johndoe # one pinned IP, 30m default
sherlock-proxyhat --proxyhat-sticky-ttl 2h johndoe # one pinned IP, 2h lifetime
Bring your own proxy
If you pass Sherlock's own --proxy/-p (or --tor) yourself, the launcher steps aside: it forwards your arguments unchanged and does not inject a ProxyHat URL.
Using the URL builder directly
Need the gateway URL in your own script or a different tool? Import the helper:
from sherlock_proxyhat import proxyhat_proxy_url
url = proxyhat_proxy_url(api_key="ph_xxx", country="us")
# -> "http://<user>-country-us:<pass>@gate.proxyhat.com:8080"
Rotating by default (sticky=None); pass sticky="30m" (or True) to pin one IP.
How it works
The launcher parses out its --proxyhat-* options, resolves your gateway credentials via the official proxyhat SDK (an API key auto-picks an active sub-user, or pass username/password), and builds a connection URL carrying ProxyHat's targeting grammar (http://<user>-country-us:<pass>@gate.proxyhat.com:8080, or socks5://…:1080). It then finds the sherlock executable on your PATH and runs sherlock --proxy <url> <your other args> as a subprocess, returning Sherlock's exit code. A rotating username makes the gateway hand out a fresh residential IP per connection; --proxyhat-sticky pins one.
Roadmap
This launcher wraps Sherlock's existing --proxy flag on purpose — it's the honest, low-friction way to ship today. A planned follow-up is an upstream PR to Sherlock adding a native --proxyhat flag (resolve credentials and geo-target from within Sherlock itself, no wrapper), so ProxyHat becomes a first-class option in the tool. Until that lands, this package is the supported path.
License
MIT © ProxyHat
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sherlock_proxyhat-0.1.0.tar.gz.
File metadata
- Download URL: sherlock_proxyhat-0.1.0.tar.gz
- Upload date:
- Size: 11.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
58c91c934b605a5de5d57136f8a370f9a7656e5f6a274045404629edc55338d5
|
|
| MD5 |
8d5152152d919cd808a8af42b188ebd5
|
|
| BLAKE2b-256 |
178fca5983983be3a5a70ab39b55e1abe7cf72ac9beef3994974a8dc108d3c6a
|
Provenance
The following attestation bundles were made for sherlock_proxyhat-0.1.0.tar.gz:
Publisher:
ci.yml on ProxyHatCom/sherlock-proxyhat
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sherlock_proxyhat-0.1.0.tar.gz -
Subject digest:
58c91c934b605a5de5d57136f8a370f9a7656e5f6a274045404629edc55338d5 - Sigstore transparency entry: 2165352355
- Sigstore integration time:
-
Permalink:
ProxyHatCom/sherlock-proxyhat@127997fb0fa84ef4efbbc453761eec3ba0fb5525 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/ProxyHatCom
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@127997fb0fa84ef4efbbc453761eec3ba0fb5525 -
Trigger Event:
push
-
Statement type:
File details
Details for the file sherlock_proxyhat-0.1.0-py3-none-any.whl.
File metadata
- Download URL: sherlock_proxyhat-0.1.0-py3-none-any.whl
- Upload date:
- Size: 9.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
40c65ab14580cc0d53636c25d0049e241b6110705857b4b57bc4689827454c0c
|
|
| MD5 |
a74768303ca5739ed88242058888a5a3
|
|
| BLAKE2b-256 |
19cd221a411dafcb2fbc4b636682c2a300ad91ce2b17226d954ac8c0bb8d9443
|
Provenance
The following attestation bundles were made for sherlock_proxyhat-0.1.0-py3-none-any.whl:
Publisher:
ci.yml on ProxyHatCom/sherlock-proxyhat
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sherlock_proxyhat-0.1.0-py3-none-any.whl -
Subject digest:
40c65ab14580cc0d53636c25d0049e241b6110705857b4b57bc4689827454c0c - Sigstore transparency entry: 2165352418
- Sigstore integration time:
-
Permalink:
ProxyHatCom/sherlock-proxyhat@127997fb0fa84ef4efbbc453761eec3ba0fb5525 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/ProxyHatCom
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@127997fb0fa84ef4efbbc453761eec3ba0fb5525 -
Trigger Event:
push
-
Statement type: