Where Are Site-Specific Detection Modules Located in the Holehe Repository?
All site-specific detection logic in Holehe resides under the holehe.modules package, organized by service category in subdirectories like social_media/, shopping/, and forum/.
Holehe is an open-source OSINT tool for checking whether an email address is registered on various websites. Understanding exactly where the site-specific detection modules are located in the Holehe repository is essential for developers who want to add new services, debug existing checkers, or integrate specific modules into custom workflows.
The Root Location: holehe/modules/
The base path holehe/modules/ serves as the root package for all detection logic. Every site-specific checker lives within this directory tree, maintaining a consistent structure that separates concerns by service type. The package initializer at holehe/modules/__init__.py establishes this namespace for imports.
Category-Based Directory Layout
Within holehe/modules/, the code is grouped by the type of service. Each sub-directory contains a Python file for every supported site, and each category includes an __init__.py that exposes its detection functions for clean imports.
- Social Media:
holehe/modules/social_media/contains [twitter.py](https://github.com/megadose/holehe/blob/master/holehe/modules/social_media/twitter.py) - Shopping:
holehe/modules/shopping/contains [dominosfr.py](https://github.com/megadose/holehe/blob/master/holehe/modules/shopping/dominosfr.py) - Forums:
holehe/modules/forum/contains [thevapingforum.py](https://github.com/megadose/holehe/blob/master/holehe/modules/forum/thevapingforum.py) - Music:
holehe/modules/music/contains [spotify.py](https://github.com/megadose/holehe/blob/master/holehe/modules/music/spotify.py) - Programming:
holehe/modules/programing/contains [github.py](https://github.com/megadose/holehe/blob/master/holehe/modules/programing/github.py) (note the "programing" spelling in the repository) - Adult Content:
holehe/modules/porn/contains [pornhub.py](https://github.com/megadose/holehe/blob/master/holehe/modules/porn/pornhub.py)
Category initializers like holehe/modules/social_media/__init__.py and holehe/modules/shopping/__init__.py handle the exposure of these functions at the package level.
Standardized Module Interface
Every site-specific detector follows a strict asynchronous function signature defined in the source. Each Python file defines exactly one primary function matching the site name:
async def <site_name>(email: str, client, out: list):
"""Detect if <site> has an account for the given email."""
...
The parameters follow a consistent convention:
- email: The target email address as a string
- client: An
httpx.AsyncClient(or compatible) instance for HTTP requests - out: A list to which the function appends a result dictionary indicating registration status
Importing and Using Detection Modules
To invoke a specific checker directly, import the module from its category and call the async function with an active HTTP client:
import asyncio
import httpx
from holehe.modules.social_media import twitter
from holehe.modules.shopping import dominosfr
async def check_email(email: str):
async with httpx.AsyncClient() as client:
results = []
# Call the site-specific detectors
await twitter(email, client, results)
await dominosfr(email, client, results)
return results
if __name__ == "__main__":
email_to_test = "example@example.com"
detections = asyncio.run(check_email(email_to_test))
for r in detections:
print(r)
This pattern allows you to import only the specific services you need, minimizing overhead and enabling targeted email investigations.
Summary
- Site-specific detection modules are located under
holehe/modules/in the Holehe repository - Modules are categorized into folders like
social_media/,shopping/,forum/, andprograming/(note the single "m") - Each site is implemented as a Python file containing an async function with the signature
async def site_name(email: str, client, out: list) - The
clientparameter requires anhttpx.AsyncClientinstance for asynchronous HTTP operations - Category-level
__init__.pyfiles expose modules for clean imports (e.g.,from holehe.modules.social_media import twitter)
Frequently Asked Questions
What is the exact file path for the Twitter detection module in Holehe?
According to the Holehe source code, the Twitter detector is located at holehe/modules/social_media/twitter.py. This file defines the async twitter function that checks email registration against Twitter's API endpoints.
How do I add a new site-specific detection module to Holehe?
Create a new Python file under the appropriate category directory within holehe/modules/, implement the standard async function signature async def site_name(email: str, client, out: list), and ensure the category's __init__.py exposes your function. The module will automatically inherit the HTTP client handling and result formatting conventions used by existing checkers.
Why are the modules organized into categories like social_media and shopping?
This categorical structure groups related services together, making the codebase maintainable and allowing users to import specific types of checkers for targeted investigations. For example, you can import only holehe.modules.shopping modules if you are investigating e-commerce accounts associated with an email address.
Are Holehe detection modules synchronous or asynchronous?
All detection modules are asynchronous, requiring async/await syntax. Each function receives an httpx.AsyncClient instance as the client parameter to perform non-blocking HTTP requests, making the tool efficient when checking dozens of sites concurrently.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →