How holehe's 120+ Modules Are Categorized by Service Domain
Holehe's 120+ modules are organized into 18 service-based categories under holehe/modules/, with each sub-package grouping together platforms that share a common domain such as social media, e-commerce, productivity, or adult content.
This categorization system in megadose/holehe enables security researchers and OSINT practitioners to quickly locate relevant modules and understand the tool's coverage at a glance. Rather than organizing by technical implementation or API type, holehe structures its I2O+ (Input → Output plus) architecture around the real-world service domains that users actually search.
How the Module Categories Work
In holehe/modules/, each category exists as a standalone Python package with its own __init__.py. Modules within a category implement a standardized interface: they accept an email address, an asynchronous HTTP client, and a results list, then append a dictionary containing name, exists, emailrecovery, phoneNumber, others, and rateLimit.
This design means adding coverage for a new shopping site requires only creating a new file in holehe/modules/shopping/, following the same pattern as existing modules like amazon.py or ebay.py.
Complete Category Breakdown
The 18 categories cover distinct service domains. Below is the full taxonomy with representative modules and source locations:
Social Media
- Purpose: Profile and login discovery on networking platforms
- Modules:
twitter,instagram,snapchat,tiktok(viafacebook),xing - Source:
holehe/modules/social_media/
Software
- Purpose: Desktop and cloud software with password-recovery endpoints
- Modules:
office365,lastpass,adobe,docker,firefox - Source:
holehe/modules/software/
Shopping
- Purpose: E-commerce account lookups
- Modules:
amazon,ebay,vivino,naturabuy,garmin - Source:
holehe/modules/shopping/
Productivity
- Purpose: Organization and task management tools
- Modules:
evernote,anydo - Source:
holehe/modules/productivity/
Music
- Purpose: Streaming and music-related platforms
- Modules:
spotify,soundcloud,lastfm,tunefind - Source:
holehe/modules/music/
Adult Content
- Purpose: Adult sites with exposed account-recovery
- Modules:
pornhub,xnxx,xvideos - Source:
holehe/modules/porn/
Payment
- Purpose: Financial and payment services
- Modules:
venmo - Source:
holehe/modules/payment/
OSINT
- Purpose: Intelligence and email-lookup APIs
- Modules:
rocketreach - Source:
holehe/modules/osint/
Learning
- Purpose: Educational platforms
- Modules:
quora,duolingo,codecademy - Source:
holehe/modules/learning/
Programming
- Purpose: Developer platforms and coding sites
- Modules:
github,replit,devrant,teamtreehouse - Source:
holehe/modules/programing/
Real Estate
- Purpose: Property-listing services
- Modules:
vrbo - Source:
holehe/modules/real_estate/
Crowdfunding
- Purpose: Fundraising platforms
- Modules:
buymeacoffee - Source:
holehe/modules/crowfunding/
Company
- Purpose: Personal-branding and about-page services
- Modules:
aboutme - Source:
holehe/modules/company/
CMS
- Purpose: Content management systems
- Modules:
wordpress,gravatar,atlassian - Source:
holehe/modules/cms/
Medical
- Purpose: Health-oriented platforms
- Modules:
sevencups,caringbridge - Source:
holehe/modules/medical/
Media Sharing
- Purpose: Photo and video hosting services
- Modules:
flickr - Source:
holehe/modules/medias/
Transport
- Purpose: Ride-sharing and travel services
- Modules:
blablacar - Source:
holehe/modules/transport/
Sports
- Purpose: Fitness and athletic platforms
- Modules:
bodybuilding - Source:
holehe/modules/sport/
Working with Categories in Code
Running a Single Module
Target a specific service using direct import from its category:
import trio, httpx
from holehe.modules.social_media.twitter import twitter
async def demo():
email = "test@example.com"
out = []
async with httpx.AsyncClient() as client:
await twitter(email, client, out)
print(out) # → [{'name': 'twitter', 'exists': True, ...}]
trio.run(demo)
Running All Modules in a Category
Programmatically discover and execute every module within a category:
import trio, httpx
from importlib import import_module
from pathlib import Path
async def run_category(category: str, email: str):
out = []
async with httpx.AsyncClient() as client:
mod_path = Path(__file__).parent / "holehe" / "modules" / category
for py_file in mod_path.glob("*.py"):
if py_file.name == "__init__.py":
continue
mod = import_module(f"holehe.modules.{category}.{py_file.stem}")
await getattr(mod, py_file.stem)(email, client, out)
return out
email = "test@example.com"
results = trio.run(run_category, "social_media", email)
print(results)
CLI: Scanning Across All Categories
Execute the full module suite from command line:
holehe test@example.com
The CLI dispatcher in holehe/core.py automatically loads all categories and modules, handling the asynchronous orchestration.
Key Implementation Files
| File | Role |
|---|---|
holehe/core.py |
Orchestrates module loading and async dispatch |
holehe/modules/__init__.py |
Exposes category package structure |
holehe/modules/social_media/twitter.py |
Reference social-media implementation |
holehe/modules/software/office365.py |
Reference software-category implementation |
holehe/modules/shopping/amazon.py |
Reference shopping-category implementation |
Summary
- 18 domain-based categories organize holehe's 120+ modules under
holehe/modules/ - Service taxonomy prioritizes real-world use cases over technical implementation details
- Standardized interface across all modules enables consistent extension and maintenance
- Category-level imports allow targeted or broad execution strategies
- I2O+ architecture separates input handling, service queries, and result aggregation cleanly
Frequently Asked Questions
How many categories does holehe have?
Holehe organizes its modules into 18 distinct categories, ranging from social_media and shopping to specialized domains like medical, transport, and adult content. This number has grown organically as the tool expanded its service coverage.
Can I run only specific categories instead of all modules?
Yes. While the CLI (holehe test@example.com) runs all available modules, you can programmatically target specific categories using the pattern shown in the code example above—importing from holehe.modules.{category} and iterating over that sub-package's Python files.
How do I add a new module to an existing category?
Create a new Python file in the appropriate holehe/modules/{category}/ directory. The module must implement the standard async function signature: async def servicename(email, client, out) where client is an httpx.AsyncClient and out is a list to which you append result dictionaries. No changes to core.py are required for category additions.
Why are categories organized by service type rather than technical approach?
The domain-based taxonomy aligns with how OSINT practitioners actually search—by the platform they're investigating. A researcher looking for social media accounts doesn't need to know whether a service uses OAuth, REST, or GraphQL; they need to find the social_media category and select relevant targets. This organization also makes coverage gaps immediately visible.
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 →