Find Work Email
Give it a LinkedIn URL — or a name and a company domain — and get back the person’s business email address.
- Endpoint
- POST /v1/api/enrich/work-email
- Cost
- 1 credit per email found
- Required input
- linkedin_url, or first_name + last_name + domain
- Returns
- Work email address
What it does
- Runs waterfall enrichment across several email providers and stops at the first that returns an address.
- Accepts two identifier routes: a LinkedIn profile URL, or first name + last name + company domain. Use whichever you have; send both when you can.
- Charges 1 credit only when an email is found. A miss is free.
- Finds an address; it does not check deliverability. Follow up with
verify-emailbefore you send.
Same lookup as the find_work_email MCP tool.
Request body
| Field | Type | Required | Notes |
|---|---|---|---|
linkedin_url | string | One route | The strongest identifier — most providers match on it directly. Max 2048 characters. |
first_name | string | Other route | Required with last_name and domain when there is no LinkedIn URL. Max 256. |
last_name | string | Other route | Required with first_name and domain when there is no LinkedIn URL. Max 256. |
domain | string | Other route | Company domain, e.g. stripe.com. Also worth sending alongside a LinkedIn URL — it unlocks extra providers. Max 256. |
organization_name | string | No | Company name, e.g. Stripe. A weaker stand-in for domain — only some providers accept it. Max 256. |
The request is valid when it has either linkedin_url or first_name + last_name + (domain or organization_name). Anything less is a 400.
Examples
cURL
# By LinkedIn URL
curl https://api.syncgtm.com/v1/api/enrich/work-email \
-H "Authorization: Bearer $SYNCGTM_API_KEY" \
-H "Content-Type: application/json" \
-d '{"linkedin_url": "https://www.linkedin.com/in/janedoe"}'
# By name and company domain
curl https://api.syncgtm.com/v1/api/enrich/work-email \
-H "Authorization: Bearer $SYNCGTM_API_KEY" \
-H "Content-Type: application/json" \
-d '{"first_name": "Jane", "last_name": "Doe", "domain": "stripe.com"}'Response
{ "status": "found", "data": { "email": "jane@stripe.com" } }{ "status": "not_found", "data": null }| Field | Type | Notes |
|---|---|---|
status | string | found or not_found |
data.email | string | The work email. Present only when status is found. |
Tips
- Send everything you have. A LinkedIn URL plus
domainreaches more providers than either alone, and costs the same. - Prefer
domainoverorganization_name. “Stripe” is ambiguous;stripe.comis not. - Suppress before you call. Skip contacts that already have an email in your CRM — filtering is free, re-buying an address is not.
- Never fill a miss with a guessed pattern. A fabricated
first.last@company.combounces like a fake and hurts your sending domain.
No LinkedIn URL and no domain? Look the company up first, or fall back to the MCP tool scrape_emails_from_website for a generic inbox.
Errors
| Status | code | Typical cause |
|---|---|---|
| 400 | invalid_request | Neither identifier route is complete |
| 402 | insufficient_credits | Balance below 1 credit |
All codes are on the Errors page.
Related endpoints
| Endpoint | Use it instead when |
|---|---|
personal-email | You need a personal address — 3 credits |
verify-email | You already have the email and need deliverability — 0.2 credits |