# Email Finder

> Find the professional email address of a person from a full name, a company and a country, with the Emelia Email Finder API. 1 credit, refunded when nothing is found.

Source: https://docs.emelia.io/docs/enrichment/email-finder

The Email Finder API returns the professional email address of a person from a full name and a company. It costs 1 credit per search, refunded when no email is found.

## Start a search

[`POST /tools/find/email`](https://docs.emelia.io/docs/enrichment/email-finder/find-email.md)

| Field            | Required | Example                                            |
| ---------------- | -------- | -------------------------------------------------- |
| `fullname`       | yes      | `Claire Fontaine`                                  |
| `companyName`    | yes      | `Nexora`                                           |
| `country`        | yes      | `FR`: the two letter code of the country           |
| `companyWebsite` | no       | `nexora.io`. Helps a lot when you know the domain. |

> **country is required.** A request without `country` is refused with `400 {"error": "\"country\" is required", "code": "INVALID_REQUEST"}`, before any job or credit. If you do not know it, deduce it from the website or the company.

**curl**

```bash
curl -X POST https://api.emelia.io/tools/find/email \
  -H "Authorization: $EMELIA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"fullname": "Claire Fontaine", "companyName": "Nexora", "companyWebsite": "nexora.io", "country": "FR"}'
# {"success":true,"jobId":"6650f1a2b839d80011c5f001"}
```

**JavaScript**

```js
const res = await fetch('https://api.emelia.io/tools/find/email', {
  method: 'POST',
  headers: { Authorization: process.env.EMELIA_API_KEY, 'Content-Type': 'application/json' },
  body: JSON.stringify({ fullname: 'Claire Fontaine', companyName: 'Nexora', companyWebsite: 'nexora.io', country: 'FR' }),
});
const { jobId } = await res.json();
```

**Python**

```python
import os
import requests

res = requests.post(
    "https://api.emelia.io/tools/find/email",
    headers={"Authorization": os.environ["EMELIA_API_KEY"]},
    json={"fullname": "Claire Fontaine", "companyName": "Nexora", "companyWebsite": "nexora.io", "country": "FR"},
)
job_id = res.json()["jobId"]
```

## Read the result

[`GET /tools/find/email/{jobId}`](https://docs.emelia.io/docs/enrichment/email-finder/get-result.md)

Poll every 3 to 5 seconds until `status` is no longer `running`. The [Enrichment overview](https://docs.emelia.io/docs/enrichment.md#how-a-job-works) has a ready-made polling helper.

**curl**

```bash
curl https://api.emelia.io/tools/find/email/6650f1a2b839d80011c5f001 \
  -H "Authorization: $EMELIA_API_KEY"
```

**JavaScript**

```js
const res = await fetch(`https://api.emelia.io/tools/find/email/${jobId}`, {
  headers: { Authorization: process.env.EMELIA_API_KEY },
});
const { data } = await res.json();
if (data.status === 'done') console.log(data.email ?? 'not found', data.qualification);
```

**Python**

```python
res = requests.get(
    f"https://api.emelia.io/tools/find/email/{job_id}",
    headers={"Authorization": os.environ["EMELIA_API_KEY"]},
)
data = res.json()["data"]
if data["status"] == "done":
    print(data.get("email", "not found"), data.get("qualification"))
```

```json title="Response"
{
  "success": true,
  "data": {
    "_id": "6650f1a2b839d80011c5f001",
    "fullname": "Claire Fontaine",
    "companyName": "Nexora",
    "companyWebsite": "nexora.io",
    "status": "done",
    "email": "claire.fontaine@nexora.io",
    "qualification": "valid",
    "fallbackFound": false,
    "date": "2026-10-11T08:00:00.000Z"
  }
}
```

| `status`  | Meaning                                                                                             |
| --------- | --------------------------------------------------------------------------------------------------- |
| `running` | Not finished. Keep polling.                                                                         |
| `done`    | Finished. `email` holds the address; no `email` means nothing was found (and the credit came back). |
| `error`   | The job failed.                                                                                     |

`qualification` is the verdict of the provider on the address found, for example `valid`. It is `invalid`, without `email`, when nothing was found or when the search timed out.

## How long it takes

Most searches end within seconds. When `companyWebsite` is given and finds nothing, Emelia runs a second pass on the company name alone (`fallbackFound` tells you it found the email there). Each pass can last about 2 minutes, so a search can take up to about 4 minutes. A timed out search keeps its credit.

## Past searches

[`GET /tools/find/email`](https://docs.emelia.io/docs/enrichment/email-finder/list-past-searches.md)

Your searches, newest first, with `page` from 1 and `limit` (15 by default, 100 at most). Use it to find a result you lost track of rather than paying for the search again.

## Tips

* **Send the domain.** `companyWebsite` gives better results than the company name alone.
* **Do not verify what the Email Finder found as `valid`:** the [Email Verifier](https://docs.emelia.io/docs/enrichment/email-verifier.md) would bill 0.25 credit for the same answer.
* **Polling is free** and not counted in the per minute quota.
