# Pricing

> Per-check prices for every service, real-time and bulk. Unknown, unsupported, timed-out, invalid and duplicate results are never charged.

Canonical: https://mobilevalidate.com/pricing · Last updated: 2026-09-25

![How a lookup works: one request, checks run in parallel, one answer per check (yes, no or unknown), and only conclusive answers are charged.](https://mobilevalidate.com/images/how-a-lookup-works.svg)

*Checks run in parallel; unknown answers are free.*


You pay per check, and only when the check gives a conclusive answer. Each service has one price for real-time lookups and a lower price for bulk jobs. The table on this page shows current prices per check and per 1,000 checks. You're not charged for inconclusive results (unknown, unsupported country, timeout, invalid, duplicate).

## How is a check counted?

A check is one identifier (a phone number or an e-mail address) run against one service. A lookup of 10 numbers with `checks: ["whatsapp", "telegram"]` contains 20 checks. Each check is billed on its own, and only when its answer is conclusive:

- **Account checks** (for example "registered on Telegram"): billed for `registered: true` or `false`. Not billed for `null`.
- **Data checks** (for example the carrier lookup): billed when the answer carries the service's main data, such as a carrier. "No data" comes back as `unknown` and is free.
- **Spam reputation:** every level, including `no_reports`, is a conclusive answer and is billed. Unknown and unsupported-country results are free.

Invalid numbers, invalid e-mail addresses, duplicates within a request and suppressed identifiers are never checked, so they never cost anything. Each result shows `billed: true` or `false`, so you can reconcile every charge.

## How does the balance work?

Your account has a prepaid USD balance. When you send a request, we reserve the most it could cost, meaning every billable check answering conclusively. As answers arrive, we charge only the conclusive ones and give the rest back to your available balance. For a bulk job you can follow this in the job's `cost` object: `estimated_max`, `reserved`, `charged` and `released`.

If your balance can't cover the maximum cost, the request is refused with `insufficient_balance` before anything is checked. `GET /v1/account` shows your balance, the amount currently reserved and today's usage.

## How do I control spend?

- **`max_cost`** on any lookup or job: if the most the request could cost is higher, it's refused with `cost_limit_exceeded` and nothing is charged.
- **Free estimates:** `POST /v1/jobs/estimate` returns the maximum cost of a list before you commit.
- **Caching:** repeat checks inside the freshness window come from your account's cache and are free (`cached: true`, `billed: false`). Send `max_age: 0` only when you need a fresh answer.
- **Daily caps:** each account has a daily cap on numbers, and agent keys can have a daily spend cap. `GET /v1/limits` shows both.
- **Test keys:** build and test your integration for free with the [test numbers](/docs/test-mode).

## Real time or bulk: which price applies?

The price depends on how you send the check. `POST /v1/lookup` uses the real-time price. `POST /v1/jobs` uses the bulk price, whatever the service. Some services, such as the Signal, iMessage and RCS checks, are available in bulk jobs only. For those, the pricing table shows only the bulk price.

Use real time when a person or a process is waiting for the answer, for example during sign-up. Use bulk for lists, scheduled refreshes and anything that can wait a few minutes.

## Are there volume prices?

For large or committed volumes, tell us your expected monthly volume and services when you [request access](/request-access). We will discuss committed-volume pricing with you. Prices shown during the private preview may change before public launch. The price that applies to a request is fixed when the request is accepted.

## Frequently asked questions

### What counts as a conclusive answer?

A completed yes or no for account checks, or a completed answer with data for data checks such as the carrier lookup. Anything else, such as unknown, unsupported country, timeout, invalid or duplicate, is free.

### Why is bulk cheaper than real time?

Bulk jobs can be scheduled and batched, so they cost less to run. Real-time lookups answer within the request, which costs more. Every active service is available in bulk; some are available in bulk only.

### How do I know what a job will cost before it runs?

Call POST /v1/jobs/estimate. It is free and returns the maximum cost of the job, along with counts of invalid, duplicate, cached and unsupported rows.

### Is a spam reputation answer of no_reports charged?

Yes. For spam reputation every level, including no_reports, is a conclusive answer. Unknown and unsupported-country results are free.

### Do repeat checks cost money?

Not inside the freshness window. A repeat check of the same number or address for the same service can be served from your account's cache, and cache hits are free. Sending max_age 0 forces a fresh, billed check.

### Are test keys charged?

No. Test keys only answer for the documented test numbers and addresses, never reach a real network and are never billed.

## Price table (live, USD per conclusive check)

| Service | Code | Realtime / check | Realtime / 1,000 | Bulk / check | Bulk / 1,000 |
|---|---|---|---|---|---|
| WhatsApp number check | `whatsapp.registered` | $0.0018 | $1.80 | $0.00012 | $0.12 |
| WhatsApp Business account check | `whatsapp.business` | $0.0018 | $1.80 | $0.00015 | $0.15 |
| Telegram number check | `telegram.registered` | $0.0005 | $0.50 | $0.0003 | $0.30 |
| Viber number check | `viber.registered` | $0.00015 | $0.15 | $0.00008 | $0.08 |
| Signal number check | `signal.registered` | bulk only | — | $0.0003 | $0.30 |
| iMessage number check | `imessage.registered` | bulk only | — | $0.0003 | $0.30 |
| RCS capability check | `rcs.registered` | bulk only | — | $0.0003 | $0.30 |
| LINE number check | `line.registered` | bulk only | — | $0.0008 | $0.80 |
| Zalo number check | `zalo.registered` | $0.0005 | $0.50 | $0.0003 | $0.30 |
| Botim number check | `botim.registered` | bulk only | — | $0.0008 | $0.80 |
| MAX number check | `max.registered` | bulk only | — | $0.0015 | $1.50 |
| Facebook Messenger number check | `messenger.registered` | bulk only | — | $0.0005 | $0.50 |
| Facebook number check | `facebook.registered` | $0.00008 | $0.08 | $0.00005 | $0.05 |
| Instagram number check | `instagram.registered` | $0.00008 | $0.08 | $0.00005 | $0.05 |
| Threads number check | `threads.registered` | $0.0002 | $0.20 | $0.00015 | $0.15 |
| X (Twitter) number check | `x.registered` | $0.0003 | $0.30 | $0.00015 | $0.15 |
| TikTok number check | `tiktok.registered` | bulk only | — | $0.0015 | $1.50 |
| Snapchat number check | `snapchat.registered` | bulk only | — | $0.003 | $3.00 |
| LinkedIn number check | `linkedin.registered` | bulk only | — | $0.0008 | $0.80 |
| VK number check | `vk.registered` | $0.0015 | $1.50 | $0.0008 | $0.80 |
| Apple number check | `apple.registered` | $0.0005 | $0.50 | $0.0003 | $0.30 |
| Amazon number check | `amazon.registered` | $0.0005 | $0.50 | $0.0003 | $0.30 |
| Microsoft number check | `microsoft.registered` | $0.0005 | $0.50 | $0.0003 | $0.30 |
| Netflix number check | `netflix.registered` | $0.002 | $2.00 | $0.0015 | $1.50 |
| Carrier lookup | `network.carrier` | $0.0005 | $0.50 | $0.0003 | $0.30 |
| US/CA carrier lookup | `network.carrier_us` | bulk only | — | $0.003 | $3.00 |
| Spam reputation | `number.spam` | $0.0008 | $0.80 | $0.0004 | $0.40 |
| E-mail verification | `email.valid` | $0.002 | $2.00 | $0.0015 | $1.50 |
| Gmail account check by e-mail | `gmail.email` | bulk only | — | $0.0008 | $0.80 |
| Outlook account check by e-mail | `outlook.email` | bulk only | — | $0.0003 | $0.30 |
| Yahoo account check by e-mail | `yahoo.email` | bulk only | — | $0.0003 | $0.30 |
| Yandex account check by e-mail | `yandex.email` | bulk only | — | $0.0005 | $0.50 |
| Mail.ru account check by e-mail | `mailru.email` | bulk only | — | $0.00008 | $0.08 |
| Apple account check by e-mail | `apple.email` | $0.0005 | $0.50 | $0.0003 | $0.30 |
| Amazon account check by e-mail | `amazon.email` | $0.0005 | $0.50 | $0.0003 | $0.30 |
| Facebook account check by e-mail | `facebook.email` | $0.003 | $3.00 | $0.0015 | $1.50 |
| Instagram account check by e-mail | `instagram.email` | $0.003 | $3.00 | $0.0015 | $1.50 |
| Netflix account check by e-mail | `netflix.email` | $0.002 | $2.00 | $0.0015 | $1.50 |
| Spotify account check by e-mail | `spotify.email` | $0.0003 | $0.30 | $0.00015 | $0.15 |
| LinkedIn account check by e-mail | `linkedin.email` | bulk only | — | $0.00005 | $0.05 |
| X (Twitter) account check by e-mail | `x.email` | bulk only | — | $0.00015 | $0.15 |
