
WhatsMyName

The project has closed
As of November 9, 2026, WhatsMyName is no longer maintained. This repository is archived and read-only. Issues, pull requests and discussions are closed.
Why I’m closing it
I started WhatsMyName in 2015 because I was frustrated with how inaccurate the username checker sites of the time were. Eleven years later, a few things have changed:
- My interests have moved on. These days I spend my time on bookmarklets and other projects rather than on WhatsMyName.
- Maintenance has become too much. Keeping hundreds of site detections working has fallen to me and a few others, and that’s more than we can sustain.
- The problem it was built to solve has been solved. There are some really neat username enumeration sites and tools now. WhatsMyName was a fix for a 2015 problem, and the field has caught up.
Thank you
For eleven years, people used, forked, extended and argued about this project. Thank you to everyone who contributed a site or a fix, opened an issue, wrote a script or tool on top of the data, maintained a fork, taught it in a class, or used it in an investigation. WhatsMyName was only ever as good as the community around it, and that community made it better than I could have alone.
— Micah “WebBreacher” Hoffman
What stays
The data stays here, and you can keep using it under its license:
wmn-data.json holds the final dataset: 691 sites, last updated November 9, 2026.
wmn-data-schema.json is its JSON schema.
- Both stay at their current URLs, so tools that download them from
main keep working.
Websites change all the time and nobody is updating these detections now, so the data will get less accurate over time. Treat results as leads to verify, not as facts.
Table of Contents
About WhatsMyName
WhatsMyName (WMN) was a community-maintained dataset for finding out whether a username exists across hundreds of websites. Investigators, researchers and curious people used it to verify online identities and check their own digital footprints.
Micah “WebBreacher” Hoffman created WhatsMyName in 2015 to deal with a real frustration: existing username checkers were full of false positives. Contributions from people all over the world grew it into one of the most widely used username enumeration datasets in the OSINT community.
Many tools and sites build on the data, and some have adopted the WhatsMyName name as well. Not all of them are connected to this project. The tools listed in Tools and Sites That Use WhatsMyName use WhatsMyName data and credit the project.
How It Works
WMN is a single JSON file, wmn-data.json. Each entry describes how to check one website for a username: what URL to request, what a response looks like when the account exists, and what it looks like when it doesn’t.
Tools read this file and do the actual checking. That separation means anyone can build a checker on top of the same data.
To be included, a site had to:
- Be publicly accessible. Sites behind paywalls or logins can’t be checked.
- Include the username in the URL. The profile URL must contain the username directly.
- Not transform the username. Sites that swap usernames for numeric IDs won’t work.
wmn-data.json has four top-level elements: license, authors, categories and sites. Each item in sites uses these fields, in this order:
| Field |
Required? |
Purpose |
name |
required |
Display name of the site |
uri_check |
required |
URL to check, with {account} in place of the username |
uri_pretty |
optional |
Human-readable profile URL, used when uri_check is an API endpoint |
post_body |
optional |
Request body. If present, the check is a POST request |
headers |
optional |
HTTP headers to send. Always present when post_body is set |
strip_bad_char |
optional |
Characters to remove from the username before building the request. Each character is removed separately ("@." means remove @ and .) |
e_code |
required |
HTTP status code when the account exists |
e_string |
required |
A string present only when the account exists |
m_string |
required |
A string present only when the account does not exist |
m_code |
required |
HTTP status code when the account does not exist |
known |
required |
Usernames that existed on the site when the entry was last verified |
cat |
required |
Category, one of the values in the schema’s cat enum |
valid |
optional |
false means the entry was known to be broken. Checkers should skip it |
protection |
optional |
Anti-automation measures seen on the site, such as cloudflare, captcha or user-agent |
Checking a site
- Remove any
strip_bad_char characters from the username.
- Replace
{account} in uri_check (and in post_body, if present) with the username. Use plain string replacement: many post_body values are JSON, so template functions that treat { and } as placeholders will break them.
- Send a POST with
post_body and headers if post_body exists. Otherwise send a GET, still including any headers.
- Decide the result:
- Found: the status code equals
e_code and the body contains e_string.
- Not found: the status code equals
m_code and the body contains m_string.
- Anything else is unknown: the site may be blocking you, down, or changed since the entry was written.
Many sites use the same code for both outcomes (often 200), so never decide on the status code alone. Always check the strings too.
Example: GET entry
{
"name": "Example GET",
"uri_check": "https://www.example.com/load_profile_info.php?name={account}",
"uri_pretty": "https://www.example.com/profile/{account}",
"headers": {
"Accept": "text/html"
},
"e_code": 200,
"e_string": "\"registered_at\":",
"m_string": "\"error\":\"not_found\"",
"m_code": 404,
"known": [
"whoami",
"johndoe"
],
"cat": "images",
"protection": [
"captcha",
"cloudflare"
]
}
Example: POST entry
{
"name": "Example POST",
"uri_check": "https://www.example.com/interact_api/load_profile_info.php",
"post_body": "{\"username\":\"{account}\"}",
"headers": {
"Content-Type": "application/json"
},
"e_code": 200,
"e_string": "\"registered_at\":",
"m_string": "\"error\":\"not_found\"",
"m_code": 404,
"known": [
"whoami",
"johndoe"
],
"cat": "images"
}
These tools used WhatsMyName data and credited the project as of November 2026. Their maintainers run them independently, and this list will not be updated.
🌐 Web-based (no install required)
| Tool |
Type |
Description |
| whatsmyname.app |
 |
The go-to web interface by the OSINT Combine team. Filters by category, exports to CSV and PDF, always pulls the latest data. |
| FreeUsername |
 |
Formerly WhatsMyName Apps (independent, not affiliated). Combines WMN data with Sherlock and Maigret, with live results and JSON/CSV export. |
⌨️ Command-line and scripts
| Tool |
Type |
Description |
| Naminter |
 |
Built specifically for this dataset. Supports Cloudflare bypass, browser impersonation, concurrent checking, and extensive config options. |
| Blackbird |
 |
Fast username search that integrates WMN data. |
| WhatsMyName-Python |
 |
Simple Python script by @C3n7ral051nt4g3ncy. |
| Tool |
Type |
Description |
| NameSeeker |
 |
Cross-platform desktop app for username and email search across hundreds of sites. Exports to PDF, CSV, and JSON. |
| Maltego WhatsMyName Transforms |
 |
Local Maltego transforms that check usernames in real time using the JSON file. |
| Who Am I |
 |
Chrome/Brave extension combining WMN data with Sherlock and Maigret, by OSINT Liar. |
| FreeUsername (Android) |
 |
Android version of FreeUsername, combining WMN data with Sherlock and Maigret. Checks run on the device. Exports to JSON and CSV. |
🐳 Self-hosted and containerized
License

This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.
评论