How Holehe Checks Social Media Account Availability via Email Verification

Holehe checks whether an email address is already registered on social media platforms by probing registration endpoints—not by testing username availability.

Holehe is an open-source OSINT tool by megadose that verifies email address usage across hundreds of online services. While many users search for "social media account availability," the tool specifically determines email-to-account association rather than username availability. This distinction matters for investigators, security researchers, and penetration testers working with email-based reconnaissance.

What Holehe Actually Checks

Holehe answers a precise question: Is this email address already tied to an existing account? It does not tell you whether a username is free to register. The tool achieves this by programmatically interacting with each platform's registration flow and interpreting server responses.

The verification process works as follows:

  1. Fetch prerequisite data (CSRF tokens, session cookies, or API keys)
  2. Submit the target email to the service's signup or recovery endpoint
  3. Parse the HTTP response to determine if the email is already in use
  4. Return structured output with exists, rateLimit, and error flags

In holehe/modules/social_media/facebook.py, this pattern is clearly implemented: the module retrieves a CSRF token, posts the email to Facebook's registration API, and examines the JSON response to determine account existence【/cache/repos/github.com/megadose/holehe/master/holehe/modules/social_media/facebook.py#L6-L83】.

Supported Social Media Platforms

Holehe includes dedicated modules for major social platforms under holehe/modules/social_media/:

Platform Module Path
Facebook holehe/modules/social_media/facebook.py
Instagram holehe/modules/social_media/instagram.py
Twitter/X holehe/modules/social_media/twitter.py
Snapchat holehe/modules/social_media/snapchat.py
Discord holehe/modules/social_media/discord.py
Pinterest holehe/modules/social_media/pinterest.py

Each module follows the same architectural pattern: import an httpx.AsyncClient, execute service-specific logic, and append a result dictionary to the output list.

How Holehe Loads and Executes Social Media Checks

The core orchestration happens in holehe/core.py through three key functions:

Dynamic module discovery — import_submodules recursively walks holehe.modules to load every social media checker:


# From holehe/core.py lines 37-47

def import_submodules(package, recursive=True):
    # Recursively imports all submodules in holehe.modules

    # Including holehe.modules.social_media and its children

Function extraction — get_functions identifies callable check functions from each loaded module【/cache/repos/github.com/megadose/holehe/master/holehe/core.py#L50-L63】:


# Returns list of functions like instagram.instagram, facebook.facebook, etc.

Asynchronous execution — launch_module spawns coroutines for each service with a shared httpx.AsyncClient【/cache/repos/github.com/megadose/holehe/master/holehe/core.py#L66-L71】:

async def launch_module(module, email, client, out):
    await module(email, client, out)

This design allows holehe to check dozens of social media platforms concurrently without blocking.

Command-Line Usage for Social Media Verification

Check an email against all services and filter to existing accounts only:

holehe alice@example.com --only-used

Output shows which social platforms have registered accounts:


[+] instagram.com         (exists: True)
[+] twitter.com           (exists: True)
[+] facebook.com          (exists: False)
[+] snapchat.com          (rateLimit: True)

Programmatic Social Media Checking

For targeted verification of a single platform, import the module directly:

import httpx
import trio
from holehe.modules.social_media import instagram

async def check_instagram_email(email: str):
    async with httpx.AsyncClient() as client:
        results = []
        await instagram.instagram(email, client, results)
        return results[0]

# Run the check

result = trio.run(check_instagram_email, "target@example.com")
print(result)

Sample result structure:

{
    'name': 'instagram',
    'domain': 'instagram.com',
    'method': 'register',
    'frequent_rate_limit': False,
    'rateLimit': False,
    'exists': True,      # Email already registered

    'error': False,
    'others': None
}

Interpreting Holehe Results for OSINT

Each social media check returns a standardized dictionary with these key fields:

  • exists: True — The email is registered to an account on this platform
  • rateLimit: True — The service throttled the request; retry later
  • error: True — An unexpected response occurred (network, parsing, or API change)

The others field may contain additional platform-specific metadata when available.

Key Source Files for Social Media Verification

File Purpose
holehe/core.py Orchestrates async execution and module loading【/cache/repos/github.com/megadose/holehe/master/holehe/core.py#L1-L34】
holehe/modules/social_media/__init__.py Package initializer exposing all social check functions
holehe/modules/social_media/facebook.py Reference implementation of email verification flow【/cache/repos/github.com/megadose/holehe/master/holehe/modules/social_media/facebook.py】
holehe/localuseragent.py Rotates browser-like User-Agent strings to avoid detection【/cache/repos/github.com/megadose/holehe/master/holehe/localuseragent.py】

Limitations of Holehe for Account Availability

Holehe cannot determine username availability because:

  • It never attempts username registration—only email verification
  • Most platforms don't expose username availability via email-based endpoints
  • Username enumeration typically requires separate, often rate-limited endpoints

For username availability checks, specialized tools or manual platform-specific methods are required.

Summary

  • Holehe verifies email-to-account association on social media platforms, not username availability
  • The tool probes registration endpoints and interprets HTTP responses to determine if an email is already registered
  • Social media modules live in holehe/modules/social_media/ with consistent async patterns
  • Core orchestration in holehe/core.py handles dynamic loading and concurrent execution via httpx.AsyncClient
  • Results return structured data with exists, rateLimit, and error boolean flags

Frequently Asked Questions

Can holehe check if a username is available on Instagram or Twitter?

No. Holehe only verifies whether an email address is already registered to an account. It does not test username availability. The tool interacts with registration and recovery endpoints that respond to email input, not username queries.

Is holehe detection accurate for all social media platforms?

Accuracy depends on the stability of each platform's registration endpoint. The megadose/holehe repository requires active maintenance as services change their APIs. Results marked with error: True indicate potential detection avoidance or API changes that need module updates.

What does "rateLimit: True" mean in holehe results?

The target platform throttled the request, typically due to too many checks from the same IP. The rateLimit flag in the result dictionary indicates you should retry with delays, proxy rotation, or from a different network. Some modules set frequent_rate_limit: True to warn that a platform aggressively limits requests.

Can holehe distinguish between active and deleted social media accounts?

Generally no. Holehe reports whether an email is registered in the platform's database, not account status. A deleted account may still return exists: True if the platform retains the email association for anti-abuse purposes. The result reflects database presence, not account activity.

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:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →