EmailFindings
A work email lookup for one person. An object rather than a bare string, because an address is the end of a process that can succeed, half-succeed, honestly fail, or never have started.
Fields #
| Field | Type | Notes |
|---|---|---|
status | string | The field to branch on. found - a mailbox that answered, real as far as SMTP can establish; charged. catch_all - the domain accepts every address put to it, so email is our best-ranked guess and the server accepting it means nothing; charged, and treating it as found is how you bounce. not_found - the domain answered honestly and rejected everything tried, which is a fact about this person rather than about us; charged, because a customer who stops paying for "no" starts being told "maybe". unresolved - we never got to ask, and reason says why; not charged. |
reason | string | Why the lookup did not happen. Present on unresolved only. no_current_employer - the profile lists no current role, and a past one is never used: it would produce a deliverable address at a place they have left, which is worse than no address because nothing downstream can tell it from a good one. no_company_domain - we could not get a mail domain for their employer; send domain on the target if you know it. name_is_not_usable - nothing an address can be built from survived their name field. lookup_failed - ours, not yours; retry the target. email_finding_is_not_available - not enabled on this deployment. |
email | string | The best candidate. Set for found and catch_all only - and on catch_all it is a ranked guess rather than a verified mailbox, which is what the status is telling you. |
pattern | string | The template the address came from, in the conventional notation. Worth more than the address itself: it is the company's house style, which is how you derive a colleague we were never asked about. |
candidates | EmailCandidate[] | Every address worth looking at, best first. Addresses the mail server flatly rejected are not listed, because a list of rejections is not something you can act on. It is here because a catch-all domain is a judgement call belonging to whoever is about to send the mail, and they cannot make it from one address. |
domain | string | What the addresses were built on. Published because an address on the wrong domain is otherwise indistinguishable from a bad guess on the right one - and because if you disagree with it, you can send domain on the target next time. |
checked_at | string (RFC 3339) | When the lookup ran. |
Absent is not null: a field we did not get is omitted rather than sent as an empty string, so you can tell "LinkedIn does not have this" from "this person left it blank".
Sample #
{
"status": "found",
"email": "[email protected]",
"pattern": "{first}.{last}@{domain}",
"domain": "microsoft.com",
"candidates": [
{
"email": "[email protected]",
"pattern": "{first}.{last}@{domain}",
"status": "deliverable"
},
{
"email": "[email protected]",
"pattern": "{f}{last}@{domain}",
"status": "unknown"
}
],
"checked_at": "2026-09-01T10:00:06Z"
}