{"id":33260402,"url":"https://github.com/kaifcodec/user-scanner","last_synced_at":"2026-02-05T19:00:47.606Z","repository":{"id":320317584,"uuid":"1079089186","full_name":"kaifcodec/user-scanner","owner":"kaifcodec","description":"🕵️🫆 (2-in-1) Emaill and Username  OSINT tool that analyzes username and email presence across multiple platforms, intended for security research, investigations, legitimate analysis","archived":false,"fork":false,"pushed_at":"2026-02-01T19:07:55.000Z","size":458,"stargazers_count":468,"open_issues_count":16,"forks_count":54,"subscribers_count":5,"default_branch":"main","last_synced_at":"2026-02-02T01:57:03.727Z","etag":null,"topics":["email-osint","networking","osint","osint-email","osint-tool","osint-tools","python","username","username-osint"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kaifcodec.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-19T04:21:48.000Z","updated_at":"2026-02-01T23:43:25.000Z","dependencies_parsed_at":"2026-01-17T21:04:47.191Z","dependency_job_id":null,"html_url":"https://github.com/kaifcodec/user-scanner","commit_stats":null,"previous_names":["kaifcodec/user-scanner"],"tags_count":22,"template":false,"template_full_name":null,"purl":"pkg:github/kaifcodec/user-scanner","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kaifcodec%2Fuser-scanner","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kaifcodec%2Fuser-scanner/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kaifcodec%2Fuser-scanner/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kaifcodec%2Fuser-scanner/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kaifcodec","download_url":"https://codeload.github.com/kaifcodec/user-scanner/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kaifcodec%2Fuser-scanner/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29130088,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-05T18:55:47.139Z","status":"ssl_error","status_checked_at":"2026-02-05T18:55:04.010Z","response_time":65,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["email-osint","networking","osint","osint-email","osint-tool","osint-tools","python","username","username-osint"],"created_at":"2025-11-17T04:00:20.260Z","updated_at":"2026-02-05T19:00:47.583Z","avatar_url":"https://github.com/kaifcodec.png","language":"Python","readme":"# User Scanner\n\n![User Scanner Logo](https://github.com/user-attachments/assets/49ec8d24-665b-4115-8525-01a8d0ca2ef4)\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Version-1.2.0-blueviolet?style=for-the-badge\u0026logo=github\" /\u003e\n  \u003cimg src=\"https://img.shields.io/github/issues/kaifcodec/user-scanner?style=for-the-badge\u0026logo=github\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Tested%20on-Termux-black?style=for-the-badge\u0026logo=termux\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Tested%20on-Windows-cyan?style=for-the-badge\u0026logo=Windows\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Tested%20on-Linux-balck?style=for-the-badge\u0026logo=Linux\" /\u003e\n  \u003cimg src=\"https://img.shields.io/pepy/dt/user-scanner?style=for-the-badge\" /\u003e\n\u003c/p\u003e\n\n---\n\nA powerful *Email OSINT tool* that checks if a specific email is registered on various sites, combined with *username scanning* for branding or OSINT — 2-in-1 tool.  \n\nPerfect for fast, accurate and lightweight email OSINT\n\nPerfect for finding a **unique username** across GitHub, Twitter, Reddit, Instagram, and more, all in a single command.  \n\n## Features\n\n- ✅ Email \u0026 username OSINT: check email registrations and username availability across social, developer, creator, and other platforms  \n- ✅ Dual-mode usage: works as an email scanner, username scanner, or username-only tool  \n- ✅ Clear results: `Registered` / `Not Registered` for emails and `Available` / `Taken` / `Error` for usernames with precise failure reasons  \n- ✅ Fully modular architecture for easy addition of new platform modules  \n- ✅ Bulk scanning support for usernames and emails via input files  \n- ✅ Wildcard-based username permutations with automatic variation generation  \n- ✅ Multiple output formats: console, **JSON**, and **CSV**, with file export support  \n- ✅ Proxy support with rotation and pre-scan proxy validation  \n- ✅ Smart auto-update system with interactive upgrade prompts via PyPI  \n\n## Virtual Environment (optional but recommended)\n\n```bash\n# create venv\npython -m venv .venv\n````\n## Activate venv\n```bash\n# Linux / macOS\nsource .venv/bin/activate\n\n# Windows (PowerShell)\n.venv\\Scripts\\Activate.ps1\n```\n## Installation\n```bash\n# upgrade pip\npython -m pip install --upgrade pip\n\n# install\npip install user-scanner\n```\n---\n\n## Important Flags\n\n| Flag | Description |\n|------|-------------|\n| `-u, --username USERNAME` | Scan a single username across platforms |\n| `-e, --email EMAIL`       | Scan a single email across platforms |\n| `-uf, --username-file FILE` | Scan multiple usernames from file (one per line) |\n| `-ef, --email-file FILE`  | Scan multiple emails from file (one per line) |\n| `-c, --category CATEGORY` | Scan all platforms in a specific category |\n| `-lu, --list-user` | List all available modules for username scanning |\n| `-le, --list-email` | List all available modules for email scanning |\n| `-m, --module MODULE`     | Scan a single specific module |\n| `-p, --permute PERMUTE`   | Generate username permutations using a pattern/suffix |\n| `-P, --proxy-file FILE`   | Use proxies from file (one per line) |\n| `--validate-proxies`      | Validate proxies before scanning (tests against google.com) |\n| `-s, --stop STOP`         | Limit the number of permutations generated |\n| `-d, --delay DELAY`       | Delay (in seconds) between requests |\n| `-f, --format {csv,json}` | Select output format |\n| `-o, --output OUTPUT`     | Save results to a file |\n\n---\n\n## Usage\n\n### Basic username/email scan\n\nScan a single email or username across **all** available modules/platforms:\n\n```bash\nuser-scanner -e john_doe@gmail.com   # single email scanning \nuser-scanner -u john_doe             # single username scanning \n```\n\n### Selective scanning\n\nScan only specific categories or single modules:\n\n```bash\nuser-scanner -u john_doe -c dev # developer platforms only\nuser-scanner -u john_doe -m github # only GitHub\n```\n\n### Bulk email/username scanning\n\nScan multiple emails/usernames from a file (one email/username per line):\n- Can also be combined with categories or modules using `-c` , `-m` and other flags\n\n```bash\nuser-scanner -ef emails.txt     # bulk email scan\nuser-scanner -uf usernames.txt  # bulk username scan\n```\n---\n### Library mode for email_scan/user_scan\n\nFor full usage guide [click here](https://github.com/kaifcodec/user-scanner/blob/main/USAGE.md)\n\n- Email scan example (single module):\n```python\nimport asyncio\nfrom user_scanner.core import engine\nfrom user_scanner.email_scan.dev import github\n\nasync def main():\n    # Engine detects 'email_scan' path -\u003e returns \"Registered\" status\n    result = await engine.check(github, \"test@gmail.com\")\n    json_data = result.to_json() # returns JSON output\n    csv_data = result.to_csv()   # returns CSV output\n\nasyncio.run(main())\n\n```\n- Username scan example (single module):\n```python\nimport asyncio\nfrom user_scanner.core import engine\nfrom user_scanner.user_scan.dev import github\n\nasync def main():\n    # Engine detects 'user_scan' path -\u003e returns \"Available\" status\n    result = await engine.check(github, \"johndoe123\")\n    json_data = result.to_json() # returns JSON output\n    csv_data = result.to_csv()   # returns CSV output\n\nasyncio.run(main())\n\n```\n---\n\n### Username/Email variations (suffix only)\n\nGenerate \u0026 check username variations using a permutation from the given suffix:\n\n```bash\nuser-scanner -u john_ -p ab # john_a, ..., john_ab, john_ba\n```\n\n### Using Proxies\n\nRoute requests through proxy servers:\n\n```bash\nuser-scanner -u john_doe -P proxies.txt\n```\n\nValidate proxies before scanning (tests each proxy against google.com):\n\n```bash\nuser-scanner -u john_doe -P proxies.txt --validate-proxies # recommended\n```\n\nThis will:\n1. Filter out non-working proxies\n2. Save working proxies to `validated_proxies.txt`\n3. Use only validated proxies for scanning\n\n---\n\n## Screenshots: \n\n- Note*: New modules are constantly getting added so screenshots might show only limited, outdated output:\n\n\u003cimg width=\"1080\" height=\"800\" alt=\"1000146237\" src=\"https://github.com/user-attachments/assets/1bb7d7cb-9b78-495a-ae95-01a9ef48d9a2\" /\u003e\n\n---\n\n\u003cimg width=\"1072\" height=\"848\" alt=\"user-scanner's main usage screenshot\" src=\"https://github.com/user-attachments/assets/34e44ca6-e314-419e-9035-d951b493b47f\" /\u003e\n\n---\n\n## Contributing\n\nModules are organized under `user_scanner/`:\n\n```\nuser_scanner/\n├── email_scan/       # Currently in development\n│   ├── social/       # Social email scan modules (Instagram, Mastodon, X, etc.)\n|   ├── adult/        # Adult sites \n|    ...               # New sites to be added soon\n├── user_scan/\n│   ├── dev/          # Developer platforms (GitHub, GitLab, npm, etc.)\n│   ├── social/       # Social platforms (Twitter/X, Reddit, Instagram, Discord, etc.)\n│   ├── creator/      # Creator platforms (Hashnode, Dev.to, Medium, Patreon, etc.)\n│   ├── community/    # Community platforms (forums, StackOverflow, HackerNews, etc.)\n│   ├── gaming/       # Gaming sites (chess.com, Lichess, Roblox, Minecraft, etc.)\n    ...\n```\n\n**Module guidelines:**\nThis project contains small \"validator\" modules that check whether a username exists on a given platform. Each validator is a single function that returns a Result object (see `core/orchestrator.py`).\n\nResult semantics:\n- Result.available() → `available`\n- Result.taken() → `taken`\n- Result.error(message: Optional[str]) → `error`, blocked, unknown, or request failure (include short diagnostic message when helpful)\n\nFollow this document when adding or updating validators.\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for examples.\n\n---\n\n## Dependencies: \n- [httpx](https://pypi.org/project/httpx/)\n- [colorama](https://pypi.org/project/colorama/)\n\n---\n\n## License\n\nThis project is licensed under the **MIT License**. See [LICENSE](LICENSE) for details.\n\n---\n\n## ⚠️ Disclaimer\n\nThis tool is provided for **educational purposes** and **authorized security research** only.\n\n- **User Responsibility:** Users are solely responsible for ensuring their usage complies with all applicable laws and the Terms of Service (ToS) of any third-party providers.\n- **Methodology:** The tool interacts only with **publicly accessible, unauthenticated web endpoints**. It does not bypass authentication, security controls, or access private user data.\n- **No Profiling:** This software performs only basic **yes/no availability checks**. It does not collect, store, aggregate, or analyze user data, behavior, or identities.\n- **Limitation of Liability:** The software is provided **“as is”**, without warranty of any kind. The developers assume no liability for misuse or any resulting damage or legal consequences.\n\n---\n\n## 🛠️ Troubleshooting\n\nSome sites may return **403 Forbidden** or **connection timeout** errors, especially if they are blocked in your region (this is common with some adult sites).\n\n- If a site is blocked in your region, use a VPN and select a region where you know the site is accessible.\n- Then run the tool again.\n\nThese issues are caused by regional or network restrictions, not by the tool itself. If it still fails, report the error by opening an issue.\n","funding_links":[],"categories":["USERNAME"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkaifcodec%2Fuser-scanner","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkaifcodec%2Fuser-scanner","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkaifcodec%2Fuser-scanner/lists"}