A console account-checker built on top of the Noimosiny reverse-search API.
Give it an email, a phone number, or a username and it will run the Noimosiny reverse-search modules in one request, then print a per-module summary:
Target: john.doe@example.com (reverse_email)
[+] gravatar
name=John Doe, profile_url=https://gravatar.com/jdoe
[+] github
username=jdoe, profile_url=https://github.com/jdoe
[+] linkedin
full_name=John Doe, location=Berlin, DE
[-] facebook
[-] instagram
[x] tiktok (rate-limited)
Summary: 3 found / 6 modules checked
Balance remaining: 41
- Auto-detects the query type (email / phone / username) — override with
-e/-p/-u. - Colour output:
[+]found,[-]not found,[x]errored. - One API call, dozens of services — Noimosiny fans the query out server-side.
- Verbose mode (
-v) dumps every data field returned by each module. - JSON mode (
--jsonor-o file.json) for piping into other tools. - Zero heavy deps — only
aiohttp. No pandas, no rich, no httpx. - Standalone library:
from noimosiny_checker.api import searchfor programmatic use.
git clone https://github.com/soxoj/noimosiny-checker.git
cd noimosiny-checker
python3 -m venv .venv && source .venv/bin/activate
pip install -e .Or without installation:
pip install -r requirements.txt
python3 -m noimosiny_checker --helpRequires Python 3.10+.
You need a Noimosiny API token. Request one at https://api.noimosiny.com/docs.
Provide it in any of the following ways (in order of precedence):
-
CLI flag:
--token <YOUR_TOKEN> -
Environment variable:
NOIMOSINY_API_TOKEN=<YOUR_TOKEN> -
.envfile in the current directory (see.env.example):NOIMOSINY_API_TOKEN=your-token-here NOIMOSINY_API_URL=https://api.noimosiny.com/v1/execute NOIMOSINY_API_TIMEOUT=120
noimosiny-checker john.doe@example.com
noimosiny-checker +14155550123
noimosiny-checker jdoenoimosiny-checker -e john.doe@example.com
noimosiny-checker -p "+1 (415) 555-0123"
noimosiny-checker -u jdoenoimosiny-checker -a jdoenoimosiny-checker -v john.doe@example.comnoimosiny-checker --json jdoe | jq '.results[] | select(.success) | .module'
noimosiny-checker -o response.json jdoenoimosiny-checker --token $TOKEN --api-url https://api.noimosiny.com/v1/execute jdoeusage: noimosiny-checker [-h] [-e | -p | -u] [-v] [-a] [--only-found] [--json]
[-o PATH] [--token TOKEN] [--api-url URL]
[--timeout TIMEOUT] [--no-color] [-q] [--debug] [-V]
[query]
| Flag | Description |
|---|---|
-e, --email |
Treat the query as an email |
-p, --phone |
Treat the query as a phone (must include country code, e.g. +1...) |
-u, --username |
Treat the query as a username |
-v, --verbose |
Print every data field returned by each module |
-a, --all |
Also list modules where nothing was found |
--only-found |
Show only modules that returned data |
--json |
Print the raw API JSON to stdout |
-o, --output PATH |
Write the raw API JSON to a file |
--token TOKEN |
API token (overrides env var) |
--api-url URL |
Override the API endpoint |
--timeout SECONDS |
Request timeout (default: 120) |
--no-color |
Disable ANSI colours (also honours NO_COLOR env var) |
-q, --quiet |
Suppress logs |
--debug |
Verbose logging |
The same client is exposed as a small library:
from noimosiny_checker.api import execute_search, search
from noimosiny_checker.validators import detect_query_type, normalize_query
# Async
import asyncio
async def main():
qtype = detect_query_type("john.doe@example.com")
query = normalize_query(qtype, "John.Doe@Example.com")
response = await execute_search(qtype, query, token="YOUR_TOKEN")
for r in response.get("results", []):
if r.get("success") and r.get("data"):
print(r["module"], r["data"])
asyncio.run(main())
# Or synchronously
response = search("reverse_email", "john.doe@example.com", token="YOUR_TOKEN")The Noimosiny Search endpoint returns:
Per-module data is module-specific — noimosiny-checker -v will print every field; --json will give you the unmodified payload to parse however you like.
The CLI maps logical types to the API's type parameter as follows:
| User-facing flag | API type value |
|---|---|
--email |
reverse_email |
--phone |
reverse_phone |
--username |
username |
Phone numbers must include a country code (+1..., +44..., +7...). The CLI rejects bare 10/11-digit Russian numbers with a hint to add +7.
| Code | Meaning |
|---|---|
0 |
Successful response (even if no modules returned data) |
1 |
API error (auth failure, rejected query, timeout, network) |
2 |
Bad CLI invocation (missing token, undetectable query type, bad phone format) |
The tool delegates module execution to Noimosiny's hosted reverse-search backend. A single Search request fans out across every supported module server-side and the response comes back with one entry per module. That means you don't have to maintain scrapers locally, and the same CLI covers email, phone and username lookups in one place — at the cost of needing an API token.
pip install -e .
python3 -m noimosiny_checker --helpThe package layout:
noimosiny_checker/
├── __init__.py
├── __main__.py # `python3 -m noimosiny_checker`
├── api.py # async/sync Noimosiny client
├── cli.py # argparse + main()
├── output.py # ANSI rendering
└── validators.py # query-type detection and normalization
OSINT techniques used:
- SOTL-2.2. Search for Accounts on Other Platforms
- SOTL-6.1. Check Logins Reuse to Find Another Account
- SOTL-6.2. Check Nicknames Reuse to Find Another Account
- SOTL-9.1. Import Contact
This tool queries publicly available, third-party data via Noimosiny. Use it only for purposes that are legal in your jurisdiction and respectful of the subjects involved — for example, authorized OSINT investigations, security research, fraud prevention, or your own account hygiene. Don't use it to harass, dox, or stalk anyone.
MIT. Built on top of the Noimosiny API — separate terms of service apply to your API usage.
{ "results": [ { "success": true, "module": "github", "data": { "username": "jdoe", "profile_url": "https://github.com/jdoe", "name": "John Doe" } }, { "success": false, "module": "facebook" }, { "success": false, "module": "tiktok", "error": "rate-limited" } ], "balance": 41 }