On this page

Email & domains

MX record lookup

API · Pro

Coverage: Works with domains from any country, including names with accents or in other alphabets. We recognise the provider of the big email services (Google, Microsoft 365, Yahoo, iCloud, Zoho, Proton, Fastmail, GMX, IONOS, OVHcloud, Yandex, Mail.ru, QQ, NetEase and Naver), of Amazon SES and of the main email security filters (Mimecast, Proofpoint, Barracuda and Cisco).

Open tool
On this page

Purpose

Find out whether a domain receives email, which mail servers it uses (its MX records, in priority order) and which provider runs them: Google, Microsoft 365, Zoho, Proton and others.

Requirements

Anyone can read these guides, no account needed. Some tools require Pro, as indicated in each guide.

Every domain that receives email lists its mail servers in DNS, in its MX records. Type a domain, an email address or a link and we’ll tell you whether it can receive email, which servers handle it and who runs them. We only read public DNS.

How to use it

  1. Type a domain such as example.com, or paste an email address or a link: we only use its domain.

  2. Press “Look up MX”. We read the domain’s MX records in public DNS and check that each server has an address.

  3. Read the result: whether the domain receives email, its servers in the order they’re tried and the provider behind them.

Synthetic example

Note

Invented example, not a real lookup. Do not call or open its links.

Synthetic example
example.com

Interpret the result

This domain receives email: It lists its mail servers in DNS, so a message sent to an address at this domain has somewhere to go.

It receives email, but something is wrong: It lists mail servers, but at least one of them is misconfigured, so some messages may be delayed or lost.

This domain doesn’t receive email: It lists no mail servers, or it states that it accepts no email. A message sent to an address at this domain won’t arrive.

This domain doesn’t exist: It isn’t registered or it has no DNS. Nobody can receive email at it, so be wary of a message that claims to come from it.

Servers with a lower priority number are tried first; the others are backups.

Limitations

Warning

We read the domain’s public DNS records. If you type an email address or a link, only its domain leaves your browser. The domain you look up isn’t stored.

Troubleshooting

That doesn’t look like a public domain. Try something like example.com.

DNS didn’t answer in time. Try again in a few seconds.

You’ve run a lot of checks in a row. Wait a minute and try again.

Use with the API

Warning

Needs an API key and credits. Each completed call costs 1 credit, even when there is no data. An active Pro account includes 20 credits per UTC calendar month, shared by every API route and spent first; unused monthly credits do not roll over. Credits bought on your account page work without Pro and never expire.

Note

Errors are never charged: 401 invalid_api_key (missing or invalid key), 403 pro_required (no Pro credits and no purchased credits), 422 invalid input, 429 quota_exceeded (no credits left), rate_limit_exceeded or ai_busy (the AI of sms-check is at capacity), 503 tool_warming (the data is still being prepared) or tool or provider unavailable. After a 429 or 503, retry once the seconds in the Retry-After header have passed.

Whether a domain receives email: its MX servers in priority order, whether each one has an address, a null or implicit MX, and the provider that runs them (google, microsoft, zoho, proton, amazon_ses and others). Accepts a domain, an email address or a link. Public DNS only; nothing is stored.

Send the JSON body to the tool's own route, or to POST /v2/tools with the tool field added. Both routes return the same result.

Endpoint
POST https://api.nocall.io/v2/mx-lookup
POST https://api.nocall.io/v2/tools  {"tool":"mx-lookup","domain":"example.com"}

Parameters

NameTypeRequiredDescription
domainstring (1–320)YesA domain, or an email address or link whose domain is used, up to 320 characters. Public names only: IP addresses, single labels and special-use names (.local, .internal, .test…) are a 422.
bash
REQUEST_ID="$(uuidgen)" && [ -n "$REQUEST_ID" ] &&
curl --request POST 'https://api.nocall.io/v2/mx-lookup' \
  --header "Authorization: Bearer $NOCALL_API_KEY" \
  --header 'Content-Type: application/json' \
  --header "Idempotency-Key: $REQUEST_ID" \
  --data '{"domain":"example.com"}'

Example response (200)

This is the documented example from the API reference. Lookups use a fictional number, and aggregates and AI answers show the shape of the result, not live data.

JSON
{
  "data": {
    "tool": "mx-lookup",
    "result": {
      "domain": "example.com",
      "domainAscii": "example.com",
      "found": true,
      "records": [
        {
          "priority": 1,
          "host": "aspmx.l.google.com"
        },
        {
          "priority": 5,
          "host": "alt1.aspmx.l.google.com"
        }
      ],
      "nullMx": false,
      "implicitMx": false,
      "acceptsMail": true,
      "provider": "google",
      "signals": [],
      "attention": false
    }
  },
  "meta": {
    "requestId": "req_example",
    "unitsCharged": 1,
    "usage": {
      "periodStart": "2026-10-01",
      "unitLimit": 20,
      "unitsUsed": 3,
      "unitsRemaining": 17
    }
  }
}

Result fields (data.result)

FieldTypeDescription
domainstringThe domain in Unicode.
domainAsciistringThe same domain in ASCII (punycode), as DNS sees it.
foundbooleanWhether the domain exists in DNS. false is still a completed result.
recordsarray<object>The MX servers as priority and host, lowest priority value (tried first) first. Empty with a null MX.
nullMxbooleanWhether the domain publishes “MX 0 .” (RFC 7505): it receives no email.
implicitMxbooleanNo MX record, but the domain has an address, so email is delivered there (RFC 5321).
acceptsMailbooleanWhether the domain can receive email: MX servers or an implicit MX, and no null MX.
providerstring (enum, 20) | nullWho runs the mail servers, from their names: google, microsoft, yahoo, icloud, zoho, proton, fastmail, gmx, ionos, ovh, yandex, mailru, qq, netease, naver, mimecast, proofpoint, barracuda, cisco or amazon_ses; null when not recognised.
signalsarray<"domain_not_found" | "no_mx" | "null_mx" | "implicit_mx" | "single_mx" | "mx_without_address" | "mx_ip_literal">domain_not_found, no_mx, null_mx, implicit_mx, single_mx, mx_without_address or mx_ip_literal.
attentionbooleanWhether the result deserves a look: the domain receives no email, or a server is misconfigured.

Frequently asked questions

What is an MX record?

It’s the DNS record that tells other servers where to deliver a domain’s email. A domain can have several, each with a priority: the lowest number is tried first and the others are backups.

What if a domain has no MX records?

It usually doesn’t receive email. Some servers still try the domain’s own address, which works but is rare for a domain that really uses email. A domain can also publish a “null MX” to say it accepts no email at all.

Can I see who runs a company’s email?

Often, yes: the names of the MX servers show the provider (Google, Microsoft 365, Zoho…) or the security service that filters the email before it arrives. It’s public information that anyone can look up.

Does it tell me whether an email address exists?

No. It tells you whether the domain receives email. Whether one particular mailbox exists is only known to its mail server, and we don’t ask it. To check how an address is written, its domain and its type, use the email address checker.