# Check if an e-mail address has an Outlook account

> Check in bulk whether outlook.com, hotmail.com and live.com addresses have a Microsoft consumer mailbox. Yes, no or unknown; unknowns are free.

Canonical: https://mobilevalidate.com/services/outlook-email-check · Last updated: 2026-09-25

![An e-mail envelope routed to mail servers found in DNS; two mailboxes are confirmed and one answer is unknown.](https://mobilevalidate.com/images/email-mailbox-verification.svg)

*E-mail checks look up the domain's mail servers, then whether the mailbox exists.*


The Outlook check answers whether an e-mail address has an account on Microsoft's consumer mail service. That covers `outlook.com` and the older `hotmail.com`, `live.com` and `msn.com` addresses. It runs in bulk jobs and returns `registered: true`, `false` or `null` (unknown) for each address, with the time we checked. Nothing is sent to the address and no mailbox is read.

## What does the Outlook check tell you?

It tells you whether Microsoft has a consumer mailbox at the address. Outlook.com is where Microsoft's free web mail lives today. Microsoft launched it in 2012 and moved Hotmail users onto it in 2013, keeping their addresses. As a result, a single list often mixes `@outlook.com`, `@hotmail.com`, `@hotmail.co.uk`, `@live.com` and `@msn.com`, all served by the same system.

- `registered: true`: an account exists at this address.
- `registered: false`: a conclusive "no account".
- `registered: null`: no conclusive answer, with `status` and `reason` explaining why. You are not charged.

Old Hotmail and Live addresses make this check useful. Some of them are still active after twenty years, and many were abandoned long ago. The check tells the two apart without sending anything. Work and school mailboxes on Microsoft 365 use the organisation's own domain and are managed by that organisation. They are not consumer Outlook.com accounts.

## Who uses it, and why?

Outlook-family domains are common in older customer databases, which makes them a typical source of bounces and stale records.

- **Re-activating old customer data.** Before a legitimate transactional or service mailing to customers you already have, a batch run shows which `hotmail.com` and `live.com` addresses no longer have an account.
- **Deliverability.** Large mailbox providers watch bounce rates. Removing addresses that no longer exist protects the reputation that your receipts and password resets depend on.
- **Sign-up checks after the fact.** A periodic job over new registrations flags Outlook addresses that never existed. That is typical of throwaway sign-ups. See [OTP and sign-up fraud](/use-cases/otp-and-signup-fraud).

For an answer while the user is still on the form, use the real-time [mailbox check](/services/email-verification). For phone numbers linked to a Microsoft account, see the [Microsoft account number check](/services/microsoft-account-number-check).

## What do you get back?

Each address is a row with `kind: "email"` and one entry per requested check in `checks`.

| Field | Type | Meaning |
|---|---|---|
| `email` | string or null | Normalized address (trimmed, lowercased); `null` when invalid |
| `email_status` | enum | `valid`, `invalid_email`, `duplicate` or `suppressed` |
| `checks["outlook.email"].registered` | boolean or null | `true` account exists, `false` none, `null` unknown |
| `…status` | enum | `completed`, `pending`, `unknown`, `unsupported_country` or `failed` |
| `…reason` | string or null | e.g. `UPSTREAM_TIMEOUT` |
| `…confidence`, `…checked_at` | enum, timestamp | How sure the answer is, and when it was obtained |
| `…cached`, `…billed` | boolean | Cache hit, and whether it was charged |

Downloads add the columns `outlook.email.status`, `outlook.email.registered` and `outlook.email.billed`. Inputs are masked in stored results.

## How is it billed?

You pay the bulk price per address with a conclusive answer. You're not charged for inconclusive results (unknown, unsupported country, timeout, invalid, duplicate). The free `POST /v1/jobs/estimate` call counts valid, invalid, duplicate and cached rows and returns the maximum cost before you commit. See [pricing](/pricing) for current rates.

Repeat checks of the same address inside the freshness window can come from your account's cache, and cache hits are free. If you cancel a running job, rows that have not started are released and not billed.

## What are the limits?

The Outlook check is **bulk only**. `POST /v1/lookup` answers `403 service_disabled` with "The check 'outlook.email' is available in bulk jobs only (POST /v1/jobs)." A job accepts up to 50,000 numbers and e-mails, as JSON `emails` or as a CSV upload with an `email` column.

- Up to 20 checks per request. Identifiers × applicable checks may not exceed 100,000 per job.
- Requests that look like sequential number ranges or generated e-mail lists are rejected. Twenty or more addresses in one request on one domain whose local parts differ only by digits or separators are refused with `suspected_enumeration`. Live keys are also limited to 50 addresses of one such pattern per account per UTC day.
- Addresses are only trimmed and lowercased, never rewritten.
- The daily cap counts e-mail addresses like numbers (see `GET /v1/limits`).

## How do I use it responsibly?

Check addresses that belong to your own customers, users or leads. We never open mailboxes and never send e-mail to the address. The answer is yes, no or unknown, and never a name, avatar or profile.

A "yes" does not mean the person agreed to hear from you. Don't use the check to build or "clean" lists for unsolicited e-mail. The [acceptable use policy](/legal/acceptable-use) forbids that, along with guessing addresses. Anyone can object through the [opt-out form](/opt-out). Suppressed addresses are skipped and free.

## Example request

With a test key, `test.mobilevalidate.com` addresses give fixed answers (see [test mode](/docs/test-mode)).

```bash
curl https://api.mobilevalidate.com/v1/jobs \
  -H "Authorization: Bearer $MOBILEVALIDATE_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: outlook-demo-001" \
  -d '{"emails": ["registered@test.mobilevalidate.com", "not-registered@test.mobilevalidate.com", "unknown@test.mobilevalidate.com"], "checks": ["outlook"]}'
# then: GET /v1/jobs/{id}?wait=30 and GET /v1/jobs/{id}/results
```

Response of `GET /v1/jobs/{id}/results` (excerpt, test mode: the first item of `data`):

```json
{
  "kind": "email",
  "input": "re•••@test.mobilevalidate.com",
  "email": "registered@test.mobilevalidate.com",
  "email_status": "valid",
  "e164": null,
  "country": null,
  "checks": {
    "outlook.email": {
      "service": "outlook.email",
      "status": "completed",
      "registered": true,
      "attributes": null,
      "confidence": "high",
      "confidence_score": 0.99,
      "checked_at": "2026-09-25T14:25:53.015Z",
      "cached": false,
      "age_seconds": 0,
      "billed": false,
      "reason": null,
      "poll_after_ms": null
    }
  },
  "test": true
}
```

## Frequently asked questions

### Which addresses does the Outlook check cover?

Microsoft's consumer mail domains, such as outlook.com, hotmail.com, live.com and msn.com, including country versions like hotmail.co.uk. Work and school mailboxes that run on Microsoft 365 under a company's own domain are a different product and are not what this check is for.

### Does the check send an e-mail or open the mailbox?

No. Nothing is sent to the address and no mailbox is opened or read. You get yes, no or unknown, and never a name, avatar or profile.

### Is a Hotmail address still valid today?

It can be. Hotmail addresses were moved into Outlook.com and many still work. The check tells you whether a given hotmail.com address still has an account.

### Why can't I run the Outlook check in real time?

The Outlook check is offered in bulk jobs only for now. POST /v1/lookup refuses it with service_disabled. Use POST /v1/jobs, or the real-time mailbox check (email) at sign-up.

### Is an Outlook account the same as a Microsoft account?

An Outlook.com address is normally also the sign-in for a Microsoft account, but a Microsoft account can use any e-mail address or a phone number. To check a phone number for a Microsoft account, use the Microsoft account number check.

## Service code and modes

- Code: `outlook.email` (input: e-mail address)
- Modes: bulk only · worldwide

## Price (live)

- Realtime: not available (bulk only)
- Bulk (POST /v1/jobs): $0.0003 per check ($0.30 per 1,000)
- You're not charged for inconclusive results (unknown, unsupported country, timeout, invalid, duplicate).

## Response fields (from the public catalog)

| Field | Type | Meaning |
|---|---|---|
| registered | boolean or null | true = found, false = not found, null = unknown (not charged) |
| status | enum | completed, pending, unknown, unsupported_country, failed |
| checked_at | timestamp | When the answer was obtained |

_Platform and brand names are used only to describe which service a check refers to. MobileValidate is not affiliated with, endorsed by or sponsored by any of these companies; all trademarks belong to their owners._
