# Bulk WhatsApp number check for Indian customer lists (+91)

> Check an Indian list for WhatsApp: turn 0, 91, 091 and Hindi-digit cells into +91, keep 6–9 mobiles, get a free estimate, and follow DPDP Act and TRAI rules.

Canonical: https://mobilevalidate.com/blog/bulk-whatsapp-number-check-india · Last updated: 2026-11-08

![A +91 pill followed by ten digit slots, the first two marked 9 and 1, fed by a 0 chip, a struck-out 091 chip and a chip of other-script digits, with a donut, a three-step cost staircase and a DPDP timeline below.](https://mobilevalidate.com/images/blog/bulk-whatsapp-number-check-india.svg)

*Indian numbers: +91 and ten digits, a leading 91 may belong to the number, and DPDP duties land in 2027.*


By MobileValidate team (https://mobilevalidate.com/about) · Published: 2026-11-08 · Category: Guides · Tags: WhatsApp, India, Bulk jobs, List hygiene, E.164, Compliance

To check a list of Indian numbers for WhatsApp, convert every row to E.164 (`+91` and 10 digits), keep only mobiles that start with 6, 7, 8 or 9, remove duplicates, upload the file as a bulk job with the `whatsapp` check, read the free estimate, and download one answer per number: registered, not registered or unknown. The length is the easy part, because every Indian mobile has 10 digits. The traps are the spellings: `091` prefixes, a leading `91` that is part of the number, and digits typed in Devanagari or another Indian script. Check only numbers your customers gave you, for a purpose you told them about: that is the rule India's Digital Personal Data Protection Act builds on.

This guide covers what is specific to India. The general flow is in our [bulk WhatsApp number check guide](/blog/bulk-whatsapp-number-check), and the numbering plan, prefix tables and porting rules are in our [India phone number format guide](/blog/india-phone-number-format). Facts are as of 8 November 2026, and every price below carries its date. This is general guidance, not legal advice.

## How do you format Indian numbers for a WhatsApp check?

Use the international form: `+91`, then the 10-digit number with no leading 0. An Indian CRM or lead export usually holds the same mobile written several ways:

| Cell in your file | What happened | Fix |
|---|---|---|
| `98XXX XXXXX` | The 10-digit number as people say it | Add `+91` |
| `098XXX XXXXX` | Written with the trunk `0` | Drop the `0`, add `+91` |
| `+91 98XXX XXXXX` | International, with spaces or dashes | Remove the spaces |
| `9198XXXXXXXX` | International without the plus (the wa.me link style), 12 digits | Add `+` |
| `0091 98XXX XXXXX` | Dialled from abroad with `00` | Replace `0091` with `+91` |
| `091 98XXX XXXXX` | `0` + country code, an old habit from STD dialling, 13 digits | Replace `091` with `+91` (the library won't) |
| `+91 (0)98XXX XXXXX` | International with the trunk `0` kept in brackets | Drop the `(0)` |
| `९८XXX XXXXX` | Typed in Devanagari (or Bengali, Tamil, Gujarati…) digits | Convert the digits to 0–9 first |
| `9.19E+11` | A spreadsheet stored a 12-digit number as a value | Can't be fixed: re-export the column as text |

Two of these rows are specific to India.

**The `091` row.** A number written `091` and then 10 digits mixes the trunk `0` with the country code. With the default region `IN`, libphonenumber-js reads the `0` as the trunk prefix and the rest as a 12-digit national number, so it returns an invalid number. Rewrite `091` to `+91` before parsing.

**The leading `91` that isn't a country code.** The `91` block is a fully mobile block, so `91XXX XXXXX` is a complete 10-digit Indian mobile. A cleanup script that strips any leading `91` turns it into eight digits. Strip `91` only from 12-digit cells, or let the library decide: in our test it read `91…` with 10 digits as a national number and `91…` with 12 digits as country code plus number, both correctly.

Our free [phone list cleaner](/tools/phone-list-cleaner) converts and dedupes a file of up to 50,000 rows in your browser; pick India as the default country. It handles the `0`, `91`, `0091` and `+91` spellings, but it marks `091` cells and Indian-script digits invalid, so fix those first. For your own pipeline, this converter handles all of them and returns `null` for anything that isn't a valid Indian mobile:

```js
import { parsePhoneNumberFromString } from "libphonenumber-js/max";

// Zero of each Indian digit script: Devanagari, Bengali, Gurmukhi, Gujarati, Odia, Tamil, Telugu, Kannada, Malayalam.
const ZEROS = [0x0966, 0x09e6, 0x0a66, 0x0ae6, 0x0b66, 0x0be6, 0x0c66, 0x0ce6, 0x0d66];
const toAscii = (s) => s.replace(/\p{Nd}/gu, (d) => {
  const c = d.codePointAt(0), z = ZEROS.find((z) => c >= z && c <= z + 9);
  return z === undefined ? d : String(c - z);
});

/** One Indian list cell → E.164 mobile (+91 and 10 digits starting 6–9), or null. */
export function toE164In(raw) {
  let s = toAscii(String(raw).trim());
  if (/^\d(\.\d+)?E\+\d+$/i.test(s)) return null;                 // 9.19E+11: the spreadsheet already lost digits
  const digits = s.replace(/\D/g, "");
  if (/^091\d{10}$/.test(digits) && !s.startsWith("+")) s = "+" + digits.slice(1); // "091 98…": 0 + country code
  const p = parsePhoneNumberFromString(s, "IN");
  return p?.isValid() && p.country === "IN" && ["MOBILE", "FIXED_LINE_OR_MOBILE"].includes(p.getType())
    && /^\+91[6-9]/.test(p.number) ? p.number : null;
}
```

We ran it on 2026-11-07 with Node 24 and libphonenumber-js 1.13.13, on libphonenumber's own example number for India. Digits are masked with X here:

| Input | Output |
|---|---|
| `081XXX XXXXX` | `+9181XXXXXXXX` |
| `+91 81XXX XXXXX` | `+9181XXXXXXXX` |
| `9181XXXXXXXX` (12 digits) | `+9181XXXXXXXX` |
| `0091 81XXX XXXXX` | `+9181XXXXXXXX` |
| `091 81XXX XXXXX` | `+9181XXXXXXXX` (`null` without the `091` rewrite) |
| `+91 (0)81XXX XXXXX` | `+9181XXXXXXXX` |
| `८१XXX XXXXX` (Devanagari digits) | `+9181XXXXXXXX` (`null` without `toAscii`) |
| `৮১XXX XXXXX` (Bengali digits) | `+9181XXXXXXXX` |
| `௮௧XXX XXXXX` (Tamil digits) | `+9181XXXXXXXX` |
| `91XXX XXXXX` (10 digits, the `91` block) | `+9191XXXXXXXX` |
| `9.18123E+11` | `null` |
| `1600 XXX XXX` (a service call number) | `null` |
| `080 2XXX XXXX` (a Bengaluru landline) | `null` |
| `+91 81XXX XXXX` (one digit short) | `null` |
| `+880 18XXXXXXXX` (a Bangladeshi mobile) | `null` |

The first nine rows are the same customer, so after conversion they collapse into one number, which keeps the duplicate count honest. The type check keeps `FIXED_LINE_OR_MOBILE` on purpose: in blocks that India shares between landline area codes and mobiles, the metadata can't tell the two apart, and dropping those rows would lose real mobiles. Rows from other countries return `null` here; put them in their own file or keep their `+` form.

## Which Indian numbers should you drop before the check?

Every Indian number has 10 digits after `+91`, landlines included, so a length check alone lets landlines through. Drop these before you upload:

| Row | Why it can't be a WhatsApp customer number | How to spot it |
|---|---|---|
| Landlines | Fixed lines share the 10-digit length and some `6`, `7` and `8` blocks | Library type `FIXED_LINE` |
| `140` numbers | Promotional call series used by businesses, not by people | Starts with `140` |
| `1600` and `1601` numbers | Service and transactional call series for banks, government and other sectors | Starts with `1600` or `1601` |
| Machine-to-machine SIMs | The dedicated M2M series has 13 digits | Too long for a person's mobile |
| Unused blocks | Right length, no allocation (for example `010`) | Library says invalid |

The `^[6-9]\d{9}$` regex most tutorials give lets some landlines through and doesn't know which blocks are unused. Our [India format guide](/blog/india-phone-number-format#which-prefixes-are-mobile-numbers) has the block-by-block table, and our free [phone number validator](/tools/phone-number-validator) shows the type of up to 500 numbers at once.

Don't read anything else into the prefix. Indian numbers have been portable between operators since 20 January 2011, and 16.77 million subscribers asked to port in September 2026 alone ([TRAI PR 140/2026](https://trai.gov.in/sites/default/files/2026-10/PR_No140of2026.pdf)). The first digits don't name today's operator or circle. For a WhatsApp check that doesn't matter; for routing SMS it does, which is what an MNP lookup is for.

## How do you check a list of Indian numbers on WhatsApp?

Five steps, from export to answers:

1. **Export only customers who gave you their number**, with your own ID column (for example `crm_id,phone`). Format the phone column as text. Leave out bought lists, scraped numbers and number ranges.
2. **Convert and dedupe.** Run every cell through a converter like the one above, or the free list cleaner. Keep the rows that return `null` aside for a manual fix; don't guess missing digits.
3. **Estimate.** Upload the file in the [dashboard](https://app.mobilevalidate.com/jobs) (**Bulk jobs › Upload a list**), or send the numbers to `POST /v1/jobs/estimate`. The estimate is free, checks nothing and stores nothing.
4. **Run with a cost cap.** Start the job with `max_cost` set to the estimate, so it can never cost more. Choose `whatsapp`, or `whatsapp.business` if you also need to know whether the account is a WhatsApp Business account.
5. **Download and join back.** The result file keeps your row order (`row_no`). Store each answer with its `checked_at` date.

A job holds up to 50,000 numbers, and a dashboard file can be up to 10 MB. Indian exports are often bigger, so split them into several jobs; each job is estimated and capped on its own.

### What does the estimate do with `0`, `00` and `+` spellings?

Here is a real estimate made with the public sandbox key on 2026-11-07. The sandbox accepts only our [test values](/docs/test-values), which are UK drama-range numbers, so this shows the behaviour, not Indian data. The first number is sent three ways: in E.164, in national format with the trunk `0`, and with the `00` international prefix:

```bash
curl https://api.mobilevalidate.com/v1/jobs/estimate \
  -H "Authorization: Bearer mv_test_publicSandboxn9ZgneuhR1B9CRfKG3fulym" \
  -H "Content-Type: application/json" \
  -d '{"numbers": ["+447700900001", "07700 900001", "0044 7700 900001", "+447700900002", "+447700900006"],
       "checks": ["whatsapp.business"], "default_country": "GB"}'
```

Response (abridged):

```json
{
  "object": "estimate",
  "total": 5,
  "valid": 3,
  "invalid": 0,
  "duplicate": 2,
  "cached": 0,
  "checks": ["whatsapp.business"],
  "max_cost": { "amount": "0", "currency": "USD" },
  "breakdown": [
    { "check": "whatsapp.business", "price_mode": "batch", "reason": null, "checks": 0,
      "unit_price": { "amount": "0.0003", "currency": "USD" } },
    { "check": "whatsapp.business", "price_mode": "realtime", "reason": "small_batch", "checks": 3,
      "unit_price": { "amount": "0.004", "currency": "USD" },
      "countries": ["GB"], "batch_minimum": 132 }
  ]
}
```

`duplicate: 2` is the two extra spellings of the first number. For your file, `default_country` is `"IN"`, and a `098…`, a `0091 98…` and a `+9198…` cell become one check. Duplicates are never checked or billed. `max_cost` is 0 because test keys are never billed.

The `small_batch` line is the other thing to read. The bulk price needs **at least 132 numbers from the same country in one job**. These three numbers are below that minimum, so they would be checked the real-time way, at the real-time price. An Indian customer list clears it easily; the few `+971` or `+1` customers in the same export may not, and the estimate shows them on their own line before you spend anything. Details are in the [bulk jobs docs](/docs/bulk-jobs).

### What does it cost?

From our public catalog ([`GET /v1/services`](https://api.mobilevalidate.com/v1/services)), fetched on 2026-11-07:

| Check | Bulk job, per 1,000 | Real time, per 1,000 |
|---|---:|---:|
| WhatsApp registration (`whatsapp`) | US$0.25 | US$4.00 |
| WhatsApp Business account (`whatsapp.business`) | US$0.30 | US$4.00 |
| Number portability, MNP (`number.mnp`) | US$2.00 | US$2.00 |
| Live network status, HLR (`number.hlr`) | US$5.00 | US$6.00 |

Only conclusive answers are billed. Unknown, invalid, duplicate and unsupported rows are free, and so are repeats served from your account's cache. Prices can change; the [pricing page](/pricing) always has the current ones.

A worked example with made-up figures, to show the arithmetic: a 200,000-row lead export, split into four jobs, converts to 161,800 unique valid Indian mobiles; the rest are duplicates, landlines, `1600` numbers and cells lost to scientific notation. The WhatsApp jobs can cost at most 161,800 × US$0.00025 = **US$40.45**. If you then want the current network of the 48,000 numbers that came back not registered, to route SMS to them, an MNP job costs at most 48,000 × US$0.002 = **US$96.00**.

## What share of Indian numbers are on WhatsApp?

We don't quote one, and you shouldn't plan with one: a national figure describes the country, not your list. What TRAI's own data does show is how many Indian mobile connections have no broadband at all. At the end of September 2026 India had 1,319.19 million wireless subscriptions and 1,058.79 million wireless broadband subscriptions, both counting machine-to-machine SIMs. On the day of peak network activity that month, 1,212.80 million wireless subscribers were active ([TRAI PR 140/2026](https://trai.gov.in/sites/default/files/2026-10/PR_No140of2026.pdf)).

Two things follow for a WhatsApp check:

- **About 260 million subscriptions had no broadband.** Some of them belong to people who aren't online at all, for example on a basic phone. A number like that can answer `registered: false` and still be alive and reachable by SMS. Don't read "not on WhatsApp" as "dead number"; that is a question for an HLR check.
- **About 106 million subscriptions weren't active on the peak day.** The number in your CRM may be one its owner rarely uses. Inactive numbers are later disconnected and, after a quarantine, given to someone else, as our [India format guide](/blog/india-phone-number-format#are-disconnected-indian-numbers-reused) explains. Old lists drift, so re-check them before each campaign.

## Is WhatsApp cheaper than SMS for OTP in India?

At list price, India is one of the cheapest WhatsApp markets for codes, unless you send from abroad. From [our rate-card dataset](/datasets/whatsapp-rate-card-history), transcribed from Meta's USD rate cards:

| WhatsApp category, India | 1 July 2026 | 1 October 2026 |
|---|---:|---:|
| Authentication | US$0.0014 | US$0.0014 |
| Authentication-international | US$0.0304 | US$0.0304 |
| Utility | US$0.0014 | US$0.0014 |
| Marketing | US$0.0118 | US$0.0118 |
| Service (after 1,000 free per number per month) | free | US$0.0014 |

Prices are per delivered message. Meta charges only for delivered messages, so a code sent to a number without WhatsApp costs nothing but time. Our free [WhatsApp cost calculator](/tools/whatsapp-cost-calculator) applies the October 2026 card to your own monthly volumes.

Three India-specific points:

- **Sending from abroad.** India has had an authentication-international rate since 1 July 2024. Meta charges it to eligible businesses based in another country than the recipient. A business becomes eligible once it sends more than 750,000 messages outside customer service windows in a moving 30-day period to users in markets with such a rate, and it gets 30 days' notice. Meta determines the business's country from public information, such as where it is listed and where its parent company is ([Meta, 2026](https://developers.facebook.com/documentation/business-messaging/whatsapp/pricing/authentication-international-rates)). For a large sender based in, say, Singapore, a code to a `+91` user costs about 22 times the local rate.
- **Rupee billing.** Solution providers and directly integrated businesses whose sold-to country is India must move every WhatsApp messaging account to INR billing by 31 December 2026. From 1 January 2027, Meta stops delivering messages from their non-INR accounts ([Meta pricing](https://developers.facebook.com/docs/whatsapp/pricing), read on 2026-11-07). If your Indian entity still pays in USD, plan the switch before you plan a campaign.
- **2026 changes.** Meta raised India's marketing rate on 1 January 2026 and its authentication-international rate on 1 April 2026, both before the first card in our dataset. Between July and October 2026 the only change was the new service-message charge.

We don't quote SMS prices here. Indian SMS prices depend on route, DLT category and contract, and list prices say little about what you pay. Put the rate from your own invoice next to the table above; our [WhatsApp OTP vs SMS OTP cost guide](/blog/whatsapp-otp-vs-sms-otp-cost) has the formula for cost per verified user. A pre-check fits in front of it: knowing which customers are on WhatsApp means you send the code to the channel that reaches them first.

## What do the DPDP Act and Rules require before you check or message?

India's Digital Personal Data Protection Act, 2023 (DPDP Act) was enacted on 11 August 2023. The Digital Personal Data Protection Rules, 2025 were published in the Gazette on 13 November 2025 (G.S.R. 846(E)) and announced the next day ([PIB, 2025](https://www.pib.gov.in/PressReleasePage.aspx?PRID=2190014)). We read the Act and the Rules in MeitY's published texts on 2026-11-07.

### When does each part apply?

The Rules commence in three steps (rule 1, [DPDP Rules, 2025](https://www.meity.gov.in/static/uploads/2025/11/53450e6e5dc0bfa85ebd78686cadad39.pdf)):

| Part | In force | What it covers |
|---|---|---|
| Rules 1, 2 and 17 to 21 | On publication, 13 November 2025 | Definitions and the Data Protection Board |
| Rule 4 | One year after publication, November 2026 | Registration and duties of consent managers |
| Rules 3, 5 to 16, 22 and 23 | Eighteen months after publication, May 2027 | Notice, security, breach reporting, retention, children's data, rights and the rest of the duties |

A separate notification of the same date (G.S.R. 843(E)) phases in the Act's own sections the same way: sections 3 to 17, which hold the grounds for processing, notice, consent and the duties of data fiduciaries, apply eighteen months after publication ([Taxmann, 2025](https://www.taxmann.com/post/blog/govt-notifies-commencement-dates-for-dpdp-act/)). So the core duties aren't enforceable yet as of November 2026. They will be before most lists you build today are out of date, so build the process now.

### What the Act asks of a list check

A customer's mobile number is personal data, and checking it on a platform is processing. The Act allows processing only for a lawful purpose, either with consent or for one of the "certain legitimate uses" in section 7 ([DPDP Act, 2023](https://www.meity.gov.in/static/uploads/2024/06/2bf1f0e9f04e6fb4f8fef35e82c42aa5.pdf), section 4):

- **Consent** must be "free, specific, informed, unconditional and unambiguous with a clear affirmative action", and limited to the data needed for the stated purpose (section 6(1)). Under the Rules, the notice that comes with a consent request must stand on its own and state the specific purpose in plain language ([PIB backgrounder, 2025](https://static.pib.gov.in/WriteReadData/specificdocs/documents/2025/nov/doc20251117695301.pdf)).
- **Voluntarily provided data.** Section 7(a) allows processing "for the specified purpose for which the Data Principal has voluntarily provided her personal data", as long as she hasn't said she doesn't consent. A customer who gave you a number for order updates has given it for that purpose, not for marketing on a new channel.
- **Language.** People must be able to read the notice in English or in any of the 22 languages of the Eighth Schedule to the Constitution (section 5(3)). Plan notices in the languages your customers use.
- **Withdrawal and requests.** Consent can be withdrawn as easily as it was given, and data fiduciaries must answer requests to access, correct or erase data within 90 days at most ([PIB, 2025](https://www.pib.gov.in/PressReleasePage.aspx?PRID=2190014)).
- **Penalties.** Up to ₹250 crore for failing to keep reasonable security safeguards, up to ₹200 crore each for breach-notification and children's-data failures, and up to ₹50 crore for other violations ([PIB backgrounder, 2025](https://static.pib.gov.in/WriteReadData/specificdocs/documents/2025/nov/doc20251117695301.pdf)).

### TRAI's rules cover SMS, not WhatsApp

TRAI's Telecom Commercial Communications Customer Preference Regulations, 2018 (TCCCPR) govern commercial SMS and calls carried by Indian operators ([TCCCPR, 2018](https://www.trai.gov.in/sites/default/files/2024-09/RegulationUcc19072018.pdf)): senders, headers and content templates are registered on the operators' DLT platforms, people set their do-not-disturb preferences by SMS or call to `1909`, and consent is recorded as "explicit consent" verified with the recipient. The Third Amendment of 18 September 2026 adds that messages based on a customer's inquiry may be sent for only seven days, and only when the inquiry is made in writing or digitally and kept in verifiable form ([TRAI PR 119/2026](https://www.trai.gov.in/sites/default/files/2026-09/PR_No119of2026.pdf)). Our [guide to TRAI's 2026 anti-spam rules](/blog/india-trai-anti-spam-rules-2026) has the full amendment and a sender checklist.

WhatsApp messages don't pass through DLT or the 1909 register. That doesn't make WhatsApp a way around them: a customer who registered "fully blocked" on DND has told you what they want, and the DPDP Act applies to every channel.

### WhatsApp's own opt-in rule

WhatsApp's Business Messaging Policy (last updated 23 September 2026) says you may only contact people on WhatsApp if they have given you their mobile number or username and you have received their opt-in permission to receive messages or calls from you ([WhatsApp, 2026](https://whatsappbusiness.com/policy/)). A `registered: true` answer is a fact about the number, not permission to message it. Our [consent and law guide](/blog/whatsapp-number-checks-consent-and-law) covers other regions.

On our side, a request with long runs of consecutive numbers is refused as suspected enumeration, each account has a daily cap, and our [acceptable use policy](/legal/acceptable-use) forbids unsolicited bulk messaging and checking ranges to find out who uses an app. Anyone can object through the [opt-out form](/opt-out).

## What do you do with numbers that are not on WhatsApp?

Route them to a channel that reaches them, and keep the answer:

| Answer | What it means | What to do |
|---|---|---|
| `registered: true`, customer opted in | Account exists | Send what they asked for on WhatsApp; keep SMS as the fallback |
| `registered: true`, no opt-in | Account exists | Nothing changes; ask for opt-in at the next contact they expect |
| `registered: false` | No account on this number | SMS through a DLT-registered header and template, or a call |
| Unknown | No conclusive answer | Keep the current channel, re-check later; free |
| `null` from your converter | Not a valid Indian mobile | Fix the record by hand, or ask the customer |

For the not-registered group, two network checks answer the next questions. An [MNP lookup](/services/mnp-lookup) returns the current network code, which your SMS provider can use for routing, because the prefix doesn't show it. A [live network status (HLR) check](/services/hlr-lookup) tells you whether the number is reachable at all. Treat unknown as missing data, never as a dead number, and don't overwrite a stored conclusive answer with an unknown one. Our [list cleaning guide](/blog/how-to-clean-a-phone-number-list-in-bulk) shows how to combine the checks.

## How do you start with MobileValidate?

The checks for this guide are [WhatsApp number check](/services/whatsapp-number-check), [WhatsApp Business check](/services/whatsapp-business-check) and [number portability (MNP)](/services/mnp-lookup). All three take Indian numbers in real time and in bulk jobs. You don't need a WhatsApp account, a phone or a QR pairing.

- **Free tools, no sign-up.** Clean and dedupe the export with the [phone list cleaner](/tools/phone-list-cleaner), check a few numbers' type with the [phone number validator](/tools/phone-number-validator), and price your messages with the [WhatsApp cost calculator](/tools/whatsapp-cost-calculator). All three run in your browser; the [tools page](/tools) lists the rest. To look up one number's network without an account, the free [carrier lookup](/services/carrier-lookup) answers three numbers a day.
- **Free to build.** [Get a free test key](/get-test-key) to build against fixed test answers, and use the free estimate on any file before you pay.
- **Real checks free.** Every live account can check 20 phone numbers and 10 e-mail addresses for real, free, on the dashboard's **Try it** page. [Request access](/request-access) to open one.
- **Then prepay.** Top-ups of US$100 or more get a 5% bonus, US$500 or more 8%, and US$2,000 or more 10%.

Results are kept for your account's retention setting, 30 days by default, and you can delete a job's results at any time. A check returns registration facts only, never a name, Aadhaar number or address. WhatsApp is named descriptively; MobileValidate is not affiliated with WhatsApp, Meta, TRAI or MeitY.

## What are the key takeaways?

- Convert every row to `+91` and 10 digits before upload. `0…`, `91…` (12 digits), `0091…`, `+91 (0)…` and `091…` are the same customer; only `091` needs a rewrite before libphonenumber-js reads it.
- Never strip a leading `91` from a 10-digit cell: the `91` block is mobile. Convert Devanagari, Bengali, Tamil and other Indian digits before parsing.
- Keep 6–9 mobiles; drop landlines, `140`, `1600` and `1601` numbers and 13-digit M2M SIMs.
- Bulk WhatsApp checks cost US$0.25 per 1,000 (catalog, 2026-11-07), with a minimum of 132 numbers per country group in one job for the bulk price. Unknowns and duplicates are free.
- WhatsApp authentication to India lists at US$0.0014; foreign senders above Meta's threshold pay US$0.0304. Indian-billed accounts must move to INR by 31 December 2026.
- The DPDP Act's core duties apply from May 2027, and TRAI's DLT and 1909 rules govern SMS today. Check your own customers' numbers for the purpose they gave them, never bought or scraped lists.

## Sources

1. [The Digital Personal Data Protection Act, 2023 (No. 22 of 2023, 11 August 2023)](https://www.meity.gov.in/static/uploads/2024/06/2bf1f0e9f04e6fb4f8fef35e82c42aa5.pdf) — Ministry of Electronics and Information Technology, Government of India, 2023
2. [Digital Personal Data Protection Rules, 2025 (G.S.R. 846(E), Gazette of India Extraordinary No. 760, 13 November 2025)](https://www.meity.gov.in/static/uploads/2025/11/53450e6e5dc0bfa85ebd78686cadad39.pdf) — Ministry of Electronics and Information Technology, Government of India, 2025
3. [Government notifies DPDP Rules to empower citizens and protect privacy (14 November 2025)](https://www.pib.gov.in/PressReleasePage.aspx?PRID=2190014) — Press Information Bureau, Government of India, 2025
4. [DPDP Rules, 2025 notified: a citizen-centric framework for privacy protection (backgrounder, 17 November 2025)](https://static.pib.gov.in/WriteReadData/specificdocs/documents/2025/nov/doc20251117695301.pdf) — Press Information Bureau, Government of India, 2025
5. [Govt notifies commencement dates for DPDP Act, 2023 (G.S.R. 843(E), 13 November 2025)](https://www.taxmann.com/post/blog/govt-notifies-commencement-dates-for-dpdp-act/) — Taxmann, 2025
6. [Telecom Commercial Communications Customer Preference Regulations, 2018 (19 July 2018)](https://www.trai.gov.in/sites/default/files/2024-09/RegulationUcc19072018.pdf) — Telecom Regulatory Authority of India, 2018
7. [Press release No. 119/2026: TRAI strengthens framework for curbing unsolicited commercial communications (18 September 2026)](https://www.trai.gov.in/sites/default/files/2026-09/PR_No119of2026.pdf) — Telecom Regulatory Authority of India, 2026
8. [Press release No. 140/2026: telecom subscription data as on 30 September 2026 (27 October 2026)](https://trai.gov.in/sites/default/files/2026-10/PR_No140of2026.pdf) — Telecom Regulatory Authority of India, 2026
9. [Pricing on the WhatsApp Business Platform](https://developers.facebook.com/docs/whatsapp/pricing) — Meta for Developers, 2026
10. [Authentication-international rates](https://developers.facebook.com/documentation/business-messaging/whatsapp/pricing/authentication-international-rates) — Meta for Developers, 2026
11. [WhatsApp Business Messaging Policy (last updated 23 September 2026)](https://whatsappbusiness.com/policy/) — WhatsApp, 2026

## Frequently asked questions

### How do I convert Indian numbers to +91 for a WhatsApp check?

Keep the 10-digit number and put +91 in front: 98XXX XXXXX and 098XXX XXXXX both become +9198XXXXXXXX. A cell that starts with 91 and has 12 digits only needs the plus, and 0091 becomes +91. A cell written 091 plus 10 digits needs one extra rewrite, because libphonenumber-js reads the 0 as a trunk prefix and rejects the number.

### Can I just strip a leading 91 from Indian numbers?

No. The 91 block is a mobile block, so a 10-digit cell such as 91XXX XXXXX is already a complete Indian mobile. Stripping 91 from it leaves eight digits and a broken number. Remove 91 only from 12-digit cells, or let a numbering-plan library with the default region IN decide, which handled both cases correctly in our test on 2026-11-07.

### Do numbers typed in Hindi or other Indian digits work?

Only after you convert them. In our test, libphonenumber-js 1.13.13 returned nothing for numbers typed in Devanagari, Bengali or Tamil digits. Mapping each script's digits 0 to 9 to ASCII first fixed all three. Indian forms and WhatsApp-collected leads often contain such cells.

### How much does a bulk WhatsApp check of Indian numbers cost?

On 2026-11-07 our public catalog listed the WhatsApp registration check at US$0.25 per 1,000 numbers in bulk jobs and US$4.00 per 1,000 in real time. The bulk price needs at least 132 numbers from the same country in one job. Unknown, invalid and duplicate rows are never billed. Current prices are on the pricing page.

### Does India's DPDP Act apply to checking customer numbers on WhatsApp?

A phone number linked to a person is personal data, so checking it is processing under the Digital Personal Data Protection Act, 2023. The DPDP Rules, 2025 were published on 13 November 2025, and the main duties on notice and consent come into force 18 months later, in May 2027. Check only numbers people gave you, for the purpose you told them.

### Do TRAI's DND and DLT rules apply to WhatsApp messages?

TRAI's commercial communication regulations cover SMS and calls carried by Indian telecom operators: DLT registration of senders, headers and templates, the 1909 do-not-disturb preferences and the 7-day window for messages after an inquiry. WhatsApp messages don't pass through DLT, but WhatsApp's own policy requires opt-in, and the DPDP Act covers every channel.

### Is WhatsApp cheaper than SMS for OTP in India?

Meta's authentication rate for India is US$0.0014 per delivered message on the rate cards of 1 July and 1 October 2026. A business based outside India that crosses Meta's volume threshold pays the authentication-international rate of US$0.0304 instead, about 22 times more. Compare both with the DLT-registered SMS rate on your own invoice.

### What is the INR billing change for WhatsApp in India?

Meta requires solution providers and directly integrated businesses whose sold-to country is India to move all WhatsApp messaging accounts to rupee billing by 31 December 2026. From 1 January 2027, Meta stops delivering messages from their accounts that are not billed in INR.
