# Check if an e-mail address has a Yandex account

> Check in bulk whether Yandex Mail addresses such as yandex.ru, yandex.com and ya.ru have an account. Yes, no or unknown per address; unknowns are free.

Canonical: https://mobilevalidate.com/services/yandex-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 Yandex check answers whether an e-mail address has a Yandex Mail account. It covers `yandex.ru`, `yandex.com`, the short `ya.ru` and older country domains. 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 Yandex check tell you?

It tells you whether Yandex has a mail account at the address you send. Yandex Mail is one of the main consumer e-mail services in Russia and is widely used by Russian-speaking people in neighbouring countries. Users can receive mail under several domain names. `yandex.ru` is the classic one, `ya.ru` is a short alias, `yandex.com` is the international variant, and older accounts also used domains such as `yandex.by`, `yandex.kz` or `yandex.ua`.

- `registered: true`: a Yandex account exists at this address.
- `registered: false`: a conclusive "no account".
- `registered: null`: no conclusive answer. `status` and `reason` explain it, and you are not charged.

The alias domains matter for data quality. The same person may appear as `name@yandex.ru` in one system and `name@ya.ru` in another. We don't rewrite addresses, so each spelling is checked and billed as its own row. Merge them before you submit if you want one answer per person.

## Who uses it, and why?

The Yandex check is for businesses whose customers include Russian-speaking users. Those users often sign up with Yandex addresses, and generic webmail checks cover them less well.

- **Sign-up and promo abuse.** Throwaway registrations for bonuses and trials often use invented addresses at the largest local provider. A batch run over new sign-ups flags Yandex addresses that never existed. See [OTP and sign-up fraud](/use-cases/otp-and-signup-fraud).
- **Deliverability for transactional mail.** Removing Yandex addresses without an account before you send receipts or security notices protects your sender reputation with the provider.
- **CRM hygiene.** Mixed databases collect both `yandex.ru` and `ya.ru` spellings. Checking them shows which records still reach a real mailbox.

The [Mail.ru check](/services/mailru-email-check) covers the other large Russian-language provider. Run both in one job to cover a list with Russian-speaking customers. 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["yandex.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 `yandex.email.status`, `yandex.email.registered` and `yandex.email.billed` columns in your original row order.

## 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 returns row counts and the maximum cost first. 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.

## What are the limits?

The Yandex check is **bulk only**. `POST /v1/lookup` answers `403 service_disabled` ("The check 'yandex.email' is available in bulk jobs only (POST /v1/jobs)."). A job accepts 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`).
- Job results are kept for 30 days by default and can be purged earlier.

## How do I use it responsibly?

Check addresses of your own customers, users and leads, where you have a lawful basis. 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 find out whether a particular person uses Yandex, and don't use it to prepare unsolicited mailings. 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: yandex-demo-001" \
  -d '{"emails": ["registered@test.mobilevalidate.com", "not-registered@test.mobilevalidate.com", "unknown@test.mobilevalidate.com"], "checks": ["yandex"]}'
# 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": {
    "yandex.email": {
      "service": "yandex.email",
      "status": "completed",
      "registered": true,
      "attributes": null,
      "confidence": "high",
      "confidence_score": 0.99,
      "checked_at": "2026-09-25T14:25:57.575Z",
      "cached": false,
      "age_seconds": 0,
      "billed": false,
      "reason": null,
      "poll_after_ms": null
    }
  },
  "test": true
}
```

## Frequently asked questions

### Which domains does Yandex Mail use?

The main ones are yandex.ru, yandex.com and the short ya.ru. Some older addresses use country domains such as yandex.by or yandex.kz. Yandex treats these as alternative names for the same mailbox, but we check each address exactly as you send it.

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

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

### Is the Yandex check available in real time?

No, it is offered in bulk jobs only for now. POST /v1/lookup refuses it with service_disabled; use POST /v1/jobs.

### Do you merge name@yandex.ru and name@ya.ru into one row?

No. We only trim and lowercase addresses, so the two spellings are separate rows and are each checked. Merge them yourself first if you want one row per mailbox.

## Service code and modes

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

## Price (live)

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