
Archived Nov 2026. Final dataset of 691 websites for finding accounts by username. No longer maintained.

As of November 9, 2026, WhatsMyName is no longer maintained. This repository is archived and read-only. Issues, pull requests and discussions are closed.
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:
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
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.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.
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.
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:
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 |
strip_bad_char characters from the username.{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.post_body and headers if post_body exists. Otherwise send a GET, still including any headers.e_code and the body contains e_string.m_code and the body contains m_string.Many sites use the same code for both outcomes (often 200), so never decide on the status code alone. Always check the strings too.
{
"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"
]
}
{
"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.