Back to Projects
Github Recon

Github Recon

Retrieves and aggregates public OSINT data about a GitHub user using Go and the GitHub API. Finds hidden emails in commit history, previous usernames, friends, other GitHub accounts, and more.

osintgithubcybersecurity

Latest Release GoDoc GoReportCard

🧾 Project Overview

Retrieves and aggregates public OSINT data about a GitHub user using Go and the GitHub API. Finds hidden emails in commit history, previous usernames, friends, other GitHub accounts, and more.

Screenshot example screenshot

🚀 Features

From usernames:

From emails:

⚠️ Disclaimer

This tool is intended for educational purposes only. Use responsibly and ensure you have permission to access the data you are querying.

📦 Installation

With Go

go install github.com/anotherhadi/github-recon@latest

With Nix/NixOS

Click to expand

From anywhere (using the repo URL):

nix run github:anotherhadi/github-recon -- [--flags value] target_username_or_email

Permanent Installation:

# add the flake to your flake.nix
{
  inputs = {
    github-recon.url = "github:anotherhadi/github-recon";
  };
}

# then add it to your packages
environment.systemPackages = with pkgs; [ # or home.packages
  inputs.github-recon.defaultPackage.${pkgs.system}
];

🧪 Usage

github-recon [--flags value] target_username_or_email

Flags

-t, --token string           Github personal access token (e.g. ghp_aaa...). Can also be set via GITHUB_RECON_TOKEN environment variable. You also need to set the token in $HOME/.config/github-recon/env file if you want to use this tool without passing the token every time. (default "null")
-d, --deepscan               Enable deep scan (clone repos, regex search, analyse licenses, etc.)
    --max-size int           Limit the size of repositories to scan (in MB) (only for deep scan) (default 150)
-e, --exclude-repo strings   Exclude repos from deep scan (comma-separated list, only for deep scan)
-r, --refresh                Refresh the cache (only for deep scan)
-s, --show-source            Show where the information (authors, emails, etc) were found (only for deep scan)
-m, --max-distance int       Maximum Levenshtein distance for matching usernames & emails (only for deep scan) (default 20)
    --trufflehog             Run trufflehog on cloned repositories (only for deep scan) (default true)
-S, --silent                 Suppress all non-essential output
    --spoof-email            Spoof email (only for email mode) (default true)
-a, --print-avatar           Show the avatar in the output
-j, --json string            Write results to specified JSON file

Token

For the best experience, provide a GitHub Personal Access Token. Without a token, you will quickly hit the rate limit and have to wait.

You can set the token in multiple ways:

For safety, it is recommended to create the Personal Access Token on a separate GitHub account rather than your main account. This way, if anything goes wrong, your primary account remains safe.

How does the email spoofing work?

Here’s the process:

  1. Create a new repository.
  2. Make a commit using the target’s email as the author.
  3. Push the commit to GitHub.
  4. Observe which GitHub account the commit is linked to. This method always works, but it only reveals the account if the email is set as the user’s primary email.

All of these steps are handled automatically by the tool, so you just need to provide the target email.

💡 Examples

github-recon anotherhadi --token ghp_ABC123...
github-recon [email protected] # Find github accounts by email
github-recon anotherhadi --json output.json --deepscan # Clone the repo and search for leaked email

🕵️‍♂️ Cover your tracks

Understanding what information about you is publicly visible is the first step to managing your online presence. github-recon can help you identify your own publicly available data on GitHub. Here’s how you can take steps to protect your privacy and security:

You can also use a tool like TruffleHog to scan your repositories specifically for exposed secrets and tokens.

Useful links:

🤝 Contributing

Feel free to contribute! See CONTRIBUTING.md for details.

🙏 Credits

Some features and ideas in this project were inspired by the following tools:

Big thanks to their authors for sharing their work with the community.