Email finder
Verified work email of a person at a company, by name and domain.
https://api.treffer.io/v1/email/finder
Cost
1 credit per hit
On a miss
0 credits
Rate limit
300 per minute
Every address is checked for deliverability before we return it.
Request
Send a name and a company. Providing the domain will lead to
more reliable and accurate results.
-
•
Name:
full_name, orfirst_nameandlast_nametogether. -
•
Company:
domainorcompany_name.
| Field | Type | Required | Description |
|---|---|---|---|
first_name
|
string | Conditional | First name of the person. Required with last_name when full_name is not supplied. |
last_name
|
string | Conditional | Last name of the person. Required with first_name when full_name is not supplied. |
full_name
|
string | Conditional | Full name of the person. Required when first_name and last_name are not supplied. |
company_name
|
string | Conditional | Company name, e.g. Treffer. Required when domain is not supplied. |
domain
|
string | Conditional | Company website domain, e.g. treffer.io. Required when company_name is not supplied. |
Why the domain is preferred: the email address is on it. A company name first has to be matched to a domain, and in Germany it is common for several companies to share the same or a very similar name, so a name alone can lead to the wrong company.
Example request
curl -X POST 'https://api.treffer.io/v1/email/finder' \
-H 'X-API-Key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"first_name": "Christian",
"last_name": "Hecker",
"domain": "traderepublic.com"
}'
import requests
response = requests.post(
"https://api.treffer.io/v1/email/finder",
headers={"X-API-Key": "YOUR_API_KEY"},
json={
"first_name": "Christian",
"last_name": "Hecker",
"domain": "traderepublic.com",
},
timeout=120,
)
print(response.json())
Response
| Field | Type | Description |
|---|---|---|
found
|
boolean | Whether we found an email. |
credits_consumed
|
integer | Credits charged for this call. 0 on a miss. |
message
|
string | Human readable summary of the result. The wording can change, so do not parse or depend on it. |
email
|
string | The work email we found. |
deliverability
|
string | "valid" when the mailbox was confirmed, "catch_all" when the domain accepts any address. |
Every field is always in the response, hit or miss
A value we do not have is null, a list with no items is empty, and nested groups are always there with all their fields. You can map any path without checking whether a key exists.
Example response
{
"found": true,
"credits_consumed": 1,
"message": "Found [email protected].",
"email": "[email protected]",
"deliverability": "valid"
}
{
"found": false,
"credits_consumed": 0,
"message": "No email found.",
"email": null,
"deliverability": null
}
Deliverability
On a hit, deliverability is one of two values.
valid
The mailbox was confirmed to exist.
catch_all
The domain accepts mail for any address, so the mailbox itself could not be confirmed. Higher bounce risk.
What to expect
Not every person has a findable email
A miss means we could not confirm an address, not that the person does not exist or has no address.
Lookups run against live sources and can sometimes be slow
Most responses arrive in under a second. Some data comes from public sources, which can
occasionally be slower. After 90 seconds we return
503 rather than hold the connection open. Set your client
timeout above that, like
120 seconds, so you receive the
503 instead of timing out first. It usually means a
source was down, so retrying is worth it.
Coverage
Works for companies and people worldwide, since we cannot confirm whether a position is located in Germany. Our API is specialized on Germany though, and will have the best data for German companies.
Errors
Failures use the shared error shape. See Errors for every code.