Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

![User Scanner Logo](https://github.com/user-attachments/assets/49ec8d24-665b-4115-8525-01a8d0ca2ef4)
<p align="center">
<img src="https://img.shields.io/badge/Version-1.4.0.3-blueviolet?style=for-the-badge&logo=github" />
<img src="https://img.shields.io/badge/Version-1.4.1.1-blueviolet?style=for-the-badge&logo=github" />
<img src="https://img.shields.io/github/issues/kaifcodec/user-scanner?style=for-the-badge&logo=github" />
<img src="https://img.shields.io/badge/Tested%20on-Termux-black?style=for-the-badge&logo=termux" />
<img src="https://img.shields.io/badge/Tested%20on-Windows-cyan?style=for-the-badge&logo=Windows" />
Expand All @@ -19,14 +19,14 @@
---
A powerful **2-in-1 OSINT suite** engineered for deep **Email and Username Intelligence**.

With **285+ total scan vectors**—including **100+ email-integrated sites** and **185+ username platforms**—you can map digital footprints, analyze target behavior, uncover interests, and verify account registrations in seconds.
With **290+ total scan vectors**—including **105+ email-integrated sites** and **185+ username platforms**—you can map digital footprints, analyze target behavior, uncover interests, and verify account registrations in seconds.

The ultimate reconnaissance tool for hunting down targets using just an email or username—now fully integrated with **Hudson Rock** for instant data breach intelligence.


## Features

-**Deep Email & Username OSINT:** Look up email registrations and perform advanced username profiling across 285+ platforms.
-**Deep Email & Username OSINT:** Look up email registrations and perform advanced username profiling across 290+ platforms.
-**Profile Data Extraction:** Goes beyond basic availability checks to scrape and extract rich metadata, account details, and digital footprints from target profiles.
-**Dual-Mode Engine:** Run targeted email campaigns, massive username sweeps, or simultaneous dual-identifier scans.
-**Granular Status Reporting:** Get crystal-clear results (`Registered`/`Available` for emails; `Found`/`Not Found`/`Error` for usernames) backed by precise exception handling.
Expand Down
2 changes: 1 addition & 1 deletion flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
in {
default = pkgs.python312Packages.buildPythonApplication {
pname = "user-scanner";
version = "1.4.0.3";
version = "1.4.1.1";

src = self;

Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "flit_core.buildapi"

[project]
name = "user-scanner"
version = "1.4.0.3"
version = "1.4.1.1"
description = "Check username availability across multiple popular platforms"
readme = "README.md"
license = {file = "LICENSE"}
Expand Down
8 changes: 6 additions & 2 deletions user_scanner/core/engine.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
import asyncio
import inspect
import concurrent.futures

from typing import List
from types import ModuleType

from user_scanner.core.result import Result
from user_scanner.core.helpers import find_category, get_site_name, load_modules, load_categories

_shared_executor = concurrent.futures.ThreadPoolExecutor(max_workers=60)

async def check(module: ModuleType, target: str) -> Result:
module_name = module.__name__.split(".")[-1]
Expand All @@ -27,7 +29,8 @@ async def check(module: ModuleType, target: str) -> Result:
if inspect.iscoroutinefunction(func):
result = await func(target)
else:
result = await asyncio.to_thread(func, target)
loop = asyncio.get_running_loop()
result = await loop.run_in_executor(_shared_executor, func, target)
except Exception as e:
result = Result.error(e)

Expand Down Expand Up @@ -65,3 +68,4 @@ async def check_all(target: str, is_email: bool = True) -> List[Result]:
results.extend(sublist)

return results

2 changes: 1 addition & 1 deletion user_scanner/version.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{
"version": "1.4.0.3",
"version": "1.4.1.1",
"version_type": "pypi"
}