# Check if an e-mail address has a Mail.ru account

> Check in bulk whether mail.ru, inbox.ru, list.ru, bk.ru and internet.ru addresses have a Mail.ru account. Yes, no or unknown; unknowns are free.

Canonical: https://mobilevalidate.com/services/mailru-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 Mail.ru check answers whether an e-mail address has a Mail.ru account. It covers `mail.ru` and the provider's other domains: `inbox.ru`, `list.ru`, `bk.ru` and `internet.ru`. 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 Mail.ru check tell you?

It tells you whether Mail.ru has a mailbox at the exact address you send. Mail.ru is one of the large Russian-language web mail services. Since 2021 it has been part of the VK group, after Mail.ru Group renamed itself VK. When people register, Mail.ru offers several domains. So a list with Russian-speaking customers typically contains `@mail.ru`, `@inbox.ru`, `@list.ru`, `@bk.ru` and `@internet.ru`.

Those domains work differently from Yandex's aliases. Each one is its own address space, so `name@bk.ru` and `name@list.ru` can be two different people. That is one more reason we never rewrite or merge addresses.

- `registered: true`: a Mail.ru mailbox 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.

## Who uses it, and why?

The Mail.ru check matters for businesses whose sign-ups include users in Russia and other Russian-speaking markets, where Mail.ru and [Yandex](/services/yandex-email-check) carry a large share of consumer e-mail.

- **Bonus and trial abuse.** Mass registrations often use invented addresses on any of the provider's domains. A batch run over new accounts flags addresses that never existed. See [OTP and sign-up fraud](/use-cases/otp-and-signup-fraud).
- **Deliverability.** Dead Mail.ru addresses cause hard bounces. Removing them keeps receipts and security notices reaching the rest of your users.
- **Lead and CRM quality.** A form lead on `@bk.ru` or `@list.ru` looks as plausible as one on `@mail.ru`. The check shows which of them are real mailboxes.

Run Mail.ru and Yandex together in one job to cover a Russian-language list. For phone-based checks in the same region, see the [VK check](/services/vk-number-check).

## What do you get back?

Each address becomes a row with `kind: "email"` and one entry per 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["mailru.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 (CSV or NDJSON) add `mailru.email.status`, `mailru.email.registered` and `mailru.email.billed` columns.

## 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). Run `POST /v1/jobs/estimate` first. It's free and shows the maximum cost, which you can then pass as `max_cost`. See [pricing](/pricing).

Repeat checks of the same address inside the freshness window can come from your account's cache. Cache hits are free.

## What are the limits?

The Mail.ru check is **bulk only**. `POST /v1/lookup` refuses it with `403 service_disabled` ("The check 'mailru.email' is available in bulk jobs only (POST /v1/jobs)."). A job takes up to 50,000 numbers and e-mails.

- Up to 20 checks per request. Identifiers × applicable checks are capped at 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.
- The daily cap counts e-mail addresses like numbers (see `GET /v1/limits`).

## How do I use it responsibly?

Check addresses of people who gave them to you, or that you otherwise have a lawful reason to process. We never read mailboxes or send e-mail to the address. The answer is yes, no or unknown and contains no personal details.

Don't use the check to try the same name across `mail.ru`, `bk.ru`, `list.ru` and the other domains to find a person, and don't use it to prepare unsolicited mail. The [acceptable use policy](/legal/acceptable-use) forbids both. Anyone can object through the [opt-out form](/opt-out). Suppressed addresses are skipped and free.

## Example request

Test keys return fixed answers for `test.mobilevalidate.com` addresses (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: mailru-demo-001" \
  -d '{"emails": ["registered@test.mobilevalidate.com", "not-registered@test.mobilevalidate.com", "unknown@test.mobilevalidate.com"], "checks": ["mailru"]}'
# 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": {
    "mailru.email": {
      "service": "mailru.email",
      "status": "completed",
      "registered": true,
      "attributes": null,
      "confidence": "high",
      "confidence_score": 0.99,
      "checked_at": "2026-09-25T14:25:50.198Z",
      "cached": false,
      "age_seconds": 0,
      "billed": false,
      "reason": null,
      "poll_after_ms": null
    }
  },
  "test": true
}
```

## Frequently asked questions

### Which domains belong to Mail.ru?

Mail.ru offers addresses on mail.ru and on its alternative domains inbox.ru, list.ru, bk.ru and internet.ru. Unlike aliases, these are separate addresses: name@bk.ru and name@list.ru can belong to different people.

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

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

### Can I run the Mail.ru check in real time?

Not yet. It is offered in bulk jobs only, and POST /v1/lookup refuses it with service_disabled. Use POST /v1/jobs.

### What happens with invalid or duplicate addresses in my file?

They are marked email_status invalid_email or duplicate, are never checked and are never charged.

## Service code and modes

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

## Price (live)

- Realtime: not available (bulk only)
- Bulk (POST /v1/jobs): $0.00008 per check ($0.08 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._
