What Does "Email Already Exists" Mean in Holehe? How to Understand Email Registration Checks

In Holehe, "email already exists" means the investigated email address is already registered to an account on that specific service, indicated by the exists: true flag in the output.

Holehe is an OSINT (Open-Source Intelligence) tool that checks whether an email address appears on hundreds of online services. Rather than logging in, it exploits registration and password-reset endpoints to infer account existence. When a service responds with a message like "account already exists with this email," Holehe records this as a confirmed registration.

How Holehe Detects "Email Already Exists"

Each Holehe module targets a specific service's registration flow. The module sends a request with the target email, then parses the response for error messages or status codes that indicate prior registration.

The detection pattern follows this structure:

  • Request: POST to a signup or validation endpoint with the target email
  • Parse: Search response text for phrases like "already exists," "is already registered," or service-specific error codes
  • Flag: Set exists: true when such indicators appear

This approach works because most services reveal existing accounts during registration to prevent duplicate signups—a side channel that Holehe leverages for reconnaissance.

Code-Level Implementation: Where Detection Occurs

7‑Cups Module: String Matching for "Account already exists"

The sevencups module in holehe/modules/medical/sevencups.py demonstrates explicit string detection. It submits a multipart form to https://www.7cups.com/listener/CreateAccount.php and checks for the exact phrase indicating prior registration.

if "Account already exists with this e-mail address" in response.text:
    out.append({
        "name": name,
        "domain": domain,
        "method": method,
        "frequent_rate_limit": frequent_rate_limit,
        "rateLimit": False,
        "exists": True,
        "emailrecovery": None,
        "phoneNumber": None,
        "others": None
    })

The exists: True value directly answers whether the email already exists on 7‑Cups.

Sporcle Module: Similar Registration Endpoint Validation

The Sporcle module located at holehe/modules/medias/sporcle.py follows an identical pattern. It probes Sporcle's registration system and searches for confirmation that an account already exists with the submitted email address.

Tumblr Module: Error Code Interpretation

Not all services use human-readable strings. The Tumblr module in holehe/modules/social_media/tumblr.py checks for API error codes where error code 2 corresponds to "User already exists." This shows the same underlying principle—detecting prior registration—implemented through structured error responses rather than string parsing.

Practical Usage: Interpreting "Email Already Exists" Results

Python API Example

import trio
import httpx
from holehe.modules.medical.sevencups import sevencups

async def check_email_exists():
    email = "target@example.com"
    results = []
    
    async with httpx.AsyncClient() as client:
        await sevencups(email, client, results)
    
    # Examine the result

    for service in results:
        if service.get("exists") is True:
            print(f"Email already exists on {service['name']}: registration confirmed")
        elif service.get("exists") is False:
            print(f"Email not found on {service['name']}")
        else:
            print(f"Could not determine status for {service['name']}")
    
    return results

trio.run(check_email_exists)

Command-Line Output Interpretation

holehe target@example.com --only-used

When "email already exists" conditions trigger, the JSON output includes:

{
  "name": "sevencups",
  "domain": "7cups.com",
  "method": "register",
  "frequent_rate_limit": false,
  "rateLimit": false,
  "exists": true,
  "emailrecovery": null,
  "phoneNumber": null,
  "others": null
}

The exists: true field is the machine-readable equivalent of "email already exists."

Why "Email Already Exists" Matters for Investigators

Understanding this signal helps investigators:

  • Confirm active accounts: A positive exists flag validates that the email owner engaged with that service
  • Map digital footprint: Multiple confirmed services build a profile of online presence
  • Identify recovery vectors: Registered accounts often have password-reset flows that may reveal additional information
  • Filter false positives: The explicit detection reduces uncertainty compared to ambiguous HTTP status codes

Summary

  • "Email already exists" in Holehe output means the target email has a confirmed account on that service, represented by exists: true
  • Detection occurs in service-specific modules by parsing registration responses for existence indicators
  • String matching (7‑Cups, Sporcle) and error code analysis (Tumblr) are the two primary technical methods
  • The core.py orchestrator aggregates module results into统一 output
  • Results indicate active registration, not merely that the service was checked

Frequently Asked Questions

What is the difference between exists: true and exists: false?

exists: true means the service explicitly confirmed the email is registered, typically through an "already exists" message. exists: false means the service indicated the email is available for registration or returned no existence signal. Some queries may return exists: null when the service's response is ambiguous or rate-limited.

Can "email already exists" results be false positives?

False positives are rare when exists: true is reported because Holehe modules require explicit confirmation strings or codes. However, services occasionally change their error messages, which could break detection. The modules in sevencups.py and similar files target stable, long-used phrases to minimize this risk.

Does Holehe actually create accounts when checking for "email already exists"?

No. Holehe submits registration requests without completing the signup flow—typically stopping after the initial email validation step. No account is created; the tool only captures the service's response to determine whether the email already exists in their database.

How can I see which services returned "email already exists" for my target?

Use the --only-used CLI flag or filter JSON output for exists: true:

holehe target@example.com --only-used

# Or post-process full output

holehe target@example.com | jq '.[] | select(.exists == true) | .name'

This returns only services where the email already exists, streamlining investigation of confirmed accounts.

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 →