Email Tools

SMTP-verified professional email finding

The Email category is the email-finding surface. get_email takes a person’s name and a company domain, generates every common pattern (first@, first.last@, flast@, f.last@, etc.), and confirms the real mailbox without sending mail.

get_email requires the GTM Tools browser extension to be connected. It confirms Google Workspace mailboxes (the largest provider) through a logged-in Google session shared via the extension. If no session is connected, the tool returns setup instructions instead of running. Install it and press Connect once per workspace.

Tools

ToolTokensDescription
get_email5Get a person’s professional email (SMTP-verified)

get_email

ParameterTypeRequiredDescription
namestringYesFull name of the person (e.g. "Justin Mares")
domainstringYesCompany domain (e.g. "kettleandfire.com")
input_parametersobjectNoFree-form metadata echoed back in the response (useful for batch processing)
$curl -X POST https://api.gtm-tools.sh/api/v0/get_email \
> -H "Authorization: Bearer $GTM_TOOLS_API_KEY" \
> -H "Content-Type: application/json" \
> -d '{
> "name": "Justin Mares",
> "domain": "kettleandfire.com",
> "input_parameters": {"source": "linkedin"}
> }'
1{
2 "email": "justin@kettleandfire.com",
3 "status": "ok",
4 "domain": "kettleandfire.com",
5 "input_parameters": {"source": "linkedin"}
6}

Response fields

FieldTypeDescription
emailstring | nullThe SMTP-verified deliverable address, or null on any non-ok status
statusstringok, not_found, or try_again_later, the whole contract in one field
reasonstringPresent on non-ok results: catch_all, no_mx, unverifiable_provider, no_pattern_verified, smtp_blocked, smtp_unavailable, google_cooldown
retry_after_secondsnumberPresent on try_again_later only
domainstringEchoes back the input domain
input_parametersobjectEchoes back the input metadata (for batch correlation)

When the domain is catch-all

Catch-all domains accept SMTP traffic for every local-part, so verification can’t disambiguate the true address. Rather than hand back a guess that might silently bounce, get_email stays strict:

1{ "email": null, "status": "not_found", "reason": "catch_all", "domain": "acme.com" }

If you want to act anyway, generate the dominant pattern yourself and treat it as a hypothesis: cross-check against LinkedIn, and prefer a channel where being wrong is cheap. Every reason value and what to do about it is on Why is get_email returning not_found?.

How verification works

get_email does three things:

  1. Generate candidates. Every common pattern is produced from the name (justin@, justinmares@, justin.mares@, j.mares@, jmares@, etc.).
  2. Verify via SMTP. Each candidate is probed against the domain’s MX records: the verifier speaks SMTP, issues RCPT TO, and observes the server’s response, all without DATA, so no mail is ever sent.
  3. Return the first deliverable hit. Catch-all domains are detected by probing a known-bogus address first; if the server accepts it, the result comes back as not_found with reason: "catch_all" rather than a best guess.

This adds 2–5 seconds of latency per call.

Next steps