Find Person Email
Use this endpoint to find a person's email by providing their name and company, and/or their LinkedIn profile URL. It uses advanced algorithms and SMTP verification to deliver accurate, privacy-compliant results.
Endpoint
https://api.anymailfinder.com
/v5.1/find-email/personPricing
- 1 credit: charged only when a valid email is found.
- Free: if no email is found or the result is blacklisted.
- Repeated searches within the past 30 days are free.
Authentication
Include your API key using the Authorization header.
Refer to the Authentication page for setup instructions.
Performance
- Timeout recommendation: 180 seconds.
Searches are performed in real time. Response times depend on factors like the company's SMTP server, website responsiveness, and advanced operations to uncover catch-all emails. - No Rate Limits.
Our system efficiently auto-scales to handle high volumes of requests.
Code example
curl -X POST "https://api.anymailfinder.com/v5.1/find-email/person" \-H "Authorization: YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"domain": "microsoft.com","full_name": "John Doe"}'
Request parameters
- person name (
full_name, orfirst_name+last_name) and company (domainorcompany_name) linkedin_urlonly - use when name and company aren't available- both - we first run the name + company lookup, and if it doesn't return a valid email, we fall back to searching the LinkedIn profile (which may return an email at a different company than the one you provided)
domain produces the most accurate results - use it whenever you have it. If you only have a company name, use company_name and we'll try to resolve a domain from it. When both are provided, domain is used first.
Send as JSON in the POST body:
| Parameter | Example value | Description |
|---|---|---|
domainstring - optional | "microsoft.com" | The company's domain. If a company name is passed here, we'll attempt to find the domain. |
company_namestring - optional | "Microsoft" | The company name. If a domain is passed here, we'll detect and treat it accordingly. |
first_namestring - optional | "John" | First name of the person. |
last_namestring - optional | "Doe" | Last name of the person. |
full_namestring - optional | "John Doe" | Alternative to first + last name. |
linkedin_urlstring - optional | "https://www.linkedin.com/in/satyanadella/" | Can be used alone, or together with name and company. |
Headers
| Parameter | Example value | Description |
|---|---|---|
x-webhook-urlstring - optional | "https://yourdomain.com/webhook" | If provided, the result will be POSTed to this URL instead of waiting for the response. |
Response
200OK
- Without webhook: The request responds once the search completes, returning the full result below.
- With webhook: The request returns immediately with 200 OK, and the result will be sent to the specified
x-webhook-urlvia POST.
{"credits_charged": 1,"email": "john.doe@microsoft.com","email_status": "valid","mx_domain": "outlook.com","mx_host": "microsoft-com.mail.protection.outlook.com","person_company_name": null,"person_full_name": null,"person_job_title": null,"valid_email": "john.doe@microsoft.com"}
| Property | Type | Description | ||||||
|---|---|---|---|---|---|---|---|---|
credits_charged | number | Number of credits charged for this request. | ||||||
email | string | null | The email found, or null if not found.Tip: if you want only valid emails, use valid_email. | ||||||
email_status | string | The email status. One of the following:
not_found instead. Nothing else in the response changes. Risky emails were never charged, so billing is unaffected. The verify-email endpoint keeps the risky status. Learn about email verification statuses | ||||||
mx_domain | string | null | The root domain of the MX hostname, e.g. google.com or outlook.com. null when mx_host is null. | ||||||
mx_host | string | null | The domain's primary MX hostname, or null if no email was found. | ||||||
person_company_name | string | null | The person's company name, sourced from their LinkedIn profile. Populated only when the returned email was found via LinkedIn. Otherwise null. | ||||||
person_full_name | string | null | The person's full name, sourced from their LinkedIn profile. Populated only when the returned email was found via LinkedIn. Otherwise null. | ||||||
person_job_title | string | null | The person's job title, sourced from their LinkedIn profile. Populated only when the returned email was found via LinkedIn. Otherwise null. | ||||||
valid_email | string | null | The email only when email_status is valid. Otherwise null. |
400Bad Request
The request is missing required data or is improperly formatted.
Review the message field to identify and correct the issue.
{"error": "bad_request","message": "..."}
401Unauthorized
The request did not include a valid API key. If no key was sent at all, the message tells you to add the Authorization header instead.
Refer to the Authentication page to ensure your API key is properly included.
{"error": "unauthorized","message": "Invalid API key. Copy it again from https://app.anymailfinder.com/settings/api (if you regenerated it, use the new one)."}
402Payment Needed
Your account does not have enough credits to complete this request.
You can purchase additional credits to continue.
{"error": "upgrade_needed","message": "Your account does not have enough credits. Purchase more at https://app.anymailfinder.com/purchase."}
Need Help?
Our team is experienced with APIs and is here to help.
Chat with us.