LeakCheck vs HaveIBeenPwned: Two Different Questions About a Breach

HIBP tells you which breaches an email appears in. LeakCheck returns the records. A comparison of scope, access, cost and ethics, plus how OSINTsearch ladders breach disclosure across its plans.

Patrick Saif7 min read

ShareXLinkedInHacker News
Cover card for the leakcheck vs haveibeenpwned post
Cover card for the leakcheck vs haveibeenpwned post

LeakCheck vs HaveIBeenPwned looks like a choice between two breach databases, and it is really a choice between two questions. HaveIBeenPwned (HIBP) answers "which breaches contain this email?" LeakCheck answers "what did those breaches contain next to it?" One is a notification service built for the people who were breached. The other is a record-level search built for people investigating exposure. They overlap on the list of breaches and diverge on almost everything after that.

This post compares scope, access, what each returns, cost and the ethical weight of record-level data. It closes with how OSINTsearch ladders breach disclosure across its plans, because the tiering is a direct answer to the question of who should see what.

What HaveIBeenPwned returns

HIBP, run by Troy Hunt, indexes breach datasets and lets anyone check whether an email address or phone number appears in them. The response is a list of breach names with dates, record counts and the data classes each one exposed: email addresses, passwords, usernames, IP addresses and so on. It never shows you the actual username or password from the record. The Pwned Passwords service lets you check a password hash against known-leaked passwords using k-anonymity, again without revealing anything else.

bash
curl -s -H "hibp-api-key: $HIBP_KEY" \
  "https://haveibeenpwned.com/api/v3/breachedaccount/user%40example.com?truncateResponse=false" \
  | jq '.[] | {Name, BreachDate, DataClasses}'

Domain search lets a verified domain owner see all addresses on that domain that appear in breaches. That is the closest HIBP gets to a bulk investigative feature, and it is deliberately limited to owners. The API requires a paid key; the website is free for single lookups.

What LeakCheck returns

LeakCheck is a paid service that indexes breach and compilation data and returns the records themselves: for a query email, the username, name, phone, date of birth, address or IP that sat in the same row, along with the source name and date. Queries can be by email, username, phone, name or other keys, and the public API is used by a lot of investigative tooling, including OSINTsearch.

The record is the point, and it is also the hazard. A username paired with an email in a 2017 gaming forum dump is a pivot that turns one identifier into a 750-platform sweep. A home address paired with a name is something you have no business seeing without a lawful reason. LeakCheck sells access with terms; the responsibility for what you do with a record sits with you.

HaveIBeenPwnedLeakCheck
Question answeredWhich breaches include this identifierWhat the breach records contain
Query keysEmail, phone, domain (owner-verified)Email, username, phone, name, keyword, others
Returns identifiers of other peopleNoYes, from the same record
PasswordsNever in lookups; hash check via k-anonymityPresent in the source data; OSINTsearch strips them at fetch
AccessFree site, paid API keyPaid plans and API
Best forNotifying and protecting the affected personInvestigating exposure and pivoting

Where they agree and where they differ in practice

Both will tell you an address is in a known breach and roughly when. HIBP's breach list is carefully curated; LeakCheck includes compilations, which are aggregated dumps with uncertain provenance, and marks them. If you only need "has this address been exposed, and should I rotate?", HIBP is the right tool, and it costs nothing.

If your work is identity resolution, HIBP stops one step short. The data class "usernames" tells you a handle exists in the record; it does not tell you what the handle is. LeakCheck does, and that handle is often an old one, which is exactly the kind of lead that finding old usernames depends on. In my own cases the breach-recovered handle has been the link between two profiles more often than any other single field.

How OSINTsearch tiers breach disclosure

OSINTsearch uses LeakCheck upstream, and the disclosure ladder has three rungs, chosen so that the cheapest tier cannot spend the shared query budget and the middle tier cannot see identifiers. It is a cost control and a privacy control in the same table.

  • Free: none. The breach API is not called. The route refuses before any upstream contact and before quota is consumed. The upstream limit is 13 requests per second charged to the whole account, shared by every visitor, so unbounded free traffic would starve the paying tiers.
  • Starter: partial. The lookup runs. You see which breach, when, the exposed data categories, and counts of how many records carry a username, email, phone, name, date of birth, address or IP. No value is shown, not even a masked one, because those are other people's identifiers rather than the one you typed.
  • Pro and Enterprise: full. The projected record as the upstream returns it, with passwords and government id numbers stripped at the fetch boundary for every tier. There is no plan on which a plaintext secret exists to be shown.
json
{
  "source": { "name": "ExampleForum", "breachDate": "2019-03", "compilation": false },
  "exposed": ["email", "username", "password"],
  "passwordExposed": true,
  "has_username": true,
  "has_phone": false,
  "_disclosure": "partial"
}

The partial rung withholds rather than masks on purpose. A first character plus a length class is a fair teaser for a social result, because it proves the account you searched for exists on a platform you named. Inside a breach corpus the values belong to other people, and narrowing their name space without being asked to is not a teaser, it is a leak. The Pro rung also feeds handles discovered in breach records into deep search as seeds, so a username from a 2019 dump can be swept across the live platforms in the same session. Plans are on the pricing page; the username search is free to try.

LeakCheck vs HaveIBeenPwned: choosing between them

Use HIBP when you are the affected party, or advising one: it is free, careful, and built for exactly that. Use LeakCheck, directly or through a tool that tiers access, when you are resolving identity and need the paired fields, and hold yourself to the retention and purpose limits that come with record-level data. The two are complementary far more often than they are rivals, and the email OSINT guide shows where breach lookups sit in a wider sequence.

FAQ

Access is sold under terms and is lawful in many jurisdictions for security research and authorized investigation. What makes a specific query lawful is your purpose and basis, not the service.

Does HaveIBeenPwned show passwords or usernames?

No. It lists breach names and data classes. Pwned Passwords checks a hash prefix against leaked passwords without revealing any record.

Does OSINTsearch show passwords from breaches?

No. Passwords and government id numbers are removed at the fetch boundary on every plan, including Pro and Enterprise.

Why does Starter show counts but not the handles?

Because the handles are other people's identifiers sitting in the same record. Starter shows which breach and how many records carry each field type; Pro shows the projected records.

Different questions, different duties

LeakCheck vs HaveIBeenPwned is not a benchmark contest. HIBP tells someone they were exposed; LeakCheck tells an investigator what the exposure contained. The second is more powerful and carries more duty, which is why the sensible design is not to hide it but to tier it, log it, and strip the fields that nobody has a legitimate reason to read.

ShareXLinkedInHacker News
All articles

Try it

Run a live search on any username.

Free preview, no account needed. Sign up to view available profile details.

For other identifiers, try reverse email lookup or phone number lookup.