# Bangladesh phone numbers: format, mobile prefixes, validation and messaging rules

> Bangladesh phone number format: +880 and 01X mobile prefixes, tested validation code, porting since 2018, BTRC's A2P SMS rules and WhatsApp checks with consent.

Canonical: https://mobilevalidate.com/blog/bangladesh-phone-number-format · Last updated: 2026-10-14

![A +880 country-code pill feeding delta-like channels into ten digit tiles for the 01X operator codes, with 0 and 2 greyed out; beside it two SIM cards swapping under a 90-day clock and three chat rows answered yes, no and unknown.](https://mobilevalidate.com/images/blog/bangladesh-phone-number-format.svg)

*Bangladeshi mobiles are +880 1X: the code names the range holder, porting can change the network, and checks answer yes, no or unknown.*


By MobileValidate team (https://mobilevalidate.com/about) · Published: 2026-10-14 · Category: Guides · Tags: Bangladesh, Phone validation, E.164, MNP, SMS, WhatsApp, Compliance

Bangladeshi numbers use the country code +880. Mobile numbers have 10 digits after the code and start with 1 (01X when dialled at home), so in E.164 they look like +880 1XXX XXXXXX. The second digit names the operator that holds the range, but porting has been possible since 2018, so it doesn't prove the current network. Bulk SMS must go through a BTRC-enlisted aggregator.

This guide is part of our [phone numbers by country](/blog/phone-numbers-by-country) series. The tables are generated from libphonenumber's metadata, our MNP atlas and our public catalog. Example numbers are masked with X. We read the Bangladesh Telecommunication Regulatory Commission (BTRC) documents on its website on 2026-10-14; most are scanned, and some are in Bengali only, so we read them page by page. Where we rely on press reports instead, we say so. This is a summary, not legal advice.

## What does a Bangladeshi phone number look like?

A mobile number is `01XXX-XXXXXX` at home: the trunk prefix `0`, a two-digit operator code starting with `1`, and eight digits. From abroad it is `+880 1XXX XXXXXX`. BTRC's numbering plan defines exactly this shape for cellular mobile service: national access code `0`, a two-digit operator code `1X`, then an eight-digit subscriber number ([BTRC National Numbering Plan 2017](https://btrc.gov.bd/pages/policies/bangladesh-national-numbering-plan-2017-dadc69-6922d909dbfbab28ce047dc3), section 10.2). Landlines vary in length, from 6 to 10 digits after `+880`.

<!-- country-data:BD:format:start -->
<!-- generated by apps/web/scripts/gen-country-guide-data.mjs (libphonenumber metadata 9.0.39 via libphonenumber-js 1.13.13); edit the script, not this table -->

| Item | Value |
|---|---|
| Country calling code | `+880` |
| International call prefix (dialling out) | `00` |
| Trunk prefix (dialling at home) | `0` |
| Mobile: digits after +880 | 10 |
| Fixed line: digits after +880 | 6–10 |
| Toll-free: digits after +880 | 10 |
| VoIP: digits after +880 | 10 |
| Mobile, national format (masked) | `018XX-XXXXXX` |
| Mobile, international (masked) | `+880 18XX XXXXXX` |
| Mobile, E.164 (masked) | `+88018XXXXXXXX` |
| Fixed line, national format (masked) | `022XX-XXXXXX` |
| Fixed line, international (masked) | `+880 22XX XXXXXX` |
| Fixed line, E.164 (masked) | `+88022XXXXXXXX` |
<!-- country-data:BD:format:end -->

Store only the E.164 form. Bangladeshi forms often collect numbers as `017XXXXXXXX`, `8801XXXXXXXXX` without a plus, or with Bengali digits (`০১৭…`). A numbering-plan library with the default region `BD` turns most of these into `+8801…`; the Bengali digits need one extra step in JavaScript, shown below.

## Which prefixes are mobile numbers, and which operator holds each?

Every mobile number starts `01`, and in the plan the second digit is the operator code. For each 2-digit block, the generator counted every 10-digit number that libphonenumber's mobile pattern for `BD` accepts:

<!-- country-data:BD:prefixes:start -->
<!-- generated by apps/web/scripts/gen-country-guide-data.mjs (exact count over the mobile pattern, libphonenumber metadata 9.0.39); edit the script, not this table -->

| National prefix | International | Share of the block that is mobile (10-digit numbers) | 3-digit sub-blocks that aren't fully mobile |
|---|---|---|---|
| `011` | `+880 11` | 100% | — |
| `013` | `+880 13` | 100% | — |
| `014` | `+880 14` | 100% | — |
| `015` | `+880 15` | 100% | — |
| `016` | `+880 16` | 100% | — |
| `017` | `+880 17` | 100% | — |
| `018` | `+880 18` | 100% | — |
| `019` | `+880 19` | 100% | — |
| `037` | `+880 37` | 90.0% | not mobile: 0371 |
| `038` | `+880 38` | 90.0% | not mobile: 0381 |
| `044` | `+880 44` | 90.0% | not mobile: 0441 |
| `064` | `+880 64` | 10.0% | not mobile: 0640–0643, 0645–0649 |
| `066` | `+880 66` | 90.0% | not mobile: 0661 |
<!-- country-data:BD:prefixes:end -->

The `01` rows are the ones that matter: `011` and `013` to `019` are fully open, while `010` and `012` aren't mobile ranges. The other rows are an edge case. libphonenumber's mobile pattern also covers most of the `037`, `038`, `044` and `066` blocks and the `0644` block, which sit among geographic area codes. We found no BTRC document that explains them, so if your product only expects ordinary `01X` mobiles, check the prefix as well as the type (the code below does).

### 01X operator codes and the companies behind them

Schedule C of the numbering plan lists the operator code of each mobile company. Two codes were reserved in that list but given out later, as press reports show:

| Code | International | Range holder | Source and notes |
|---|---|---|---|
| `011` | `+880 11` | Pacific Bangladesh Telecom Limited | Plan, Schedule C. We found no current BTRC list confirming who uses `011` today. |
| `013` | `+880 13` | Grameenphone | BTRC approved it in August 2016 because `017` was almost full ([Daily Star, 2016](https://www.thedailystar.net/business/gp-gets-new-number-series-013-1273441)). |
| `014` | `+880 14` | Banglalink | Launched on 29 November 2018 as `019` ran low ([Daily Star, 2018](https://www.thedailystar.net/node/1666927)). |
| `015` | `+880 15` | Teletalk Bangladesh | Plan, Schedule C. |
| `016` | `+880 16` | Robi (from Airtel) | Airtel Bangladesh merged into Robi with effect from 16 November 2016; the plan reserves code 16 two years after the merger "unless and until the Commission decides otherwise". |
| `017` | `+880 17` | Grameenphone | Plan, Schedule C. |
| `018` | `+880 18` | Robi Axiata | Plan, Schedule C. |
| `019` | `+880 19` | Banglalink | Plan, Schedule C. |
| `010`, `012` | — | Reserved | Not valid mobile ranges today. |

Robi said at the merger that it would keep the `016` prefix and the Airtel brand for at least two years ([Daily Star, 2016](https://www.thedailystar.net/node/1315822)), and libphonenumber still accepts `016` as mobile. Read this table as "who holds the range". It tells you nothing about the network a ported number is on today.

## How do I validate a Bangladeshi number in code?

Use a libphonenumber port with full metadata and the default region `BD`, then keep only `01X` mobiles.

**Python** (`pip install phonenumbers`):

```python
import phonenumbers


def normalize_bd(raw: str) -> str | None:
    """E.164 for a Bangladeshi 01X mobile, or None."""
    try:
        n = phonenumbers.parse(raw, "BD")
    except phonenumbers.NumberParseException:
        return None
    if (not phonenumbers.is_valid_number(n) or phonenumbers.region_code_for_number(n) != "BD"
            or phonenumbers.number_type(n) != phonenumbers.PhoneNumberType.MOBILE):
        return None
    e164 = phonenumbers.format_number(n, phonenumbers.PhoneNumberFormat.E164)
    return e164 if e164.startswith("+8801") else None  # 01X only, see the prefix table
```

**JavaScript** (`npm install libphonenumber-js`):

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

/** "01XXX-XXXXXX", "+880 1XXX …", "8801…" or Bengali digits → E.164 for a 01X mobile, or null. */
export function normalizeBd(raw) {
  const ascii = String(raw).replace(/[০-৯]/g, (d) => String(d.charCodeAt(0) - 0x09e6)); // ০–৯ → 0–9
  const phone = parsePhoneNumberFromString(ascii, "BD");
  return phone?.isValid() && phone.country === "BD" && phone.getType() === "MOBILE" && phone.number.startsWith("+8801")
    ? phone.number : null;
}
```

We ran both on 2026-10-14 (Python 3.12 with phonenumbers 9.0.40, Node.js 24 with libphonenumber-js 1.13.13). Both returned an E.164 number for rows 1 to 5 below and nothing for the rest. One difference showed up: Python's library accepted a number typed in Bengali digits, but libphonenumber-js returned nothing until we added the digit conversion above. The shape regex column tests the pattern most tutorials give, after spaces, dashes and brackets are removed:

<!-- country-data:BD:tests:start -->
<!-- generated by apps/web/scripts/gen-country-guide-data.mjs (libphonenumber-js 1.13.13, region BD); edit the script, not this table -->

| # | Case | Input (masked) | Shape regex `^(?:\+880\|00880\|0)?[1346]\d{9}$` | libphonenumber (`BD`) |
|---|---|---|---|---|
| 1 | National, with trunk prefix | `018XX-XXXXXX` | passes | valid, `MOBILE` |
| 2 | International, with spaces | `+880 18XX XXXXXX` | passes | valid, `MOBILE` |
| 3 | International dialling prefix 00 | `00880 18XX-XXXXXX` | passes | valid, `MOBILE` |
| 4 | E.164 | `+88018XXXXXXXX` | passes | valid, `MOBILE` |
| 5 | Dashes and brackets | `(018XX) XXXXXX` | passes | valid, `MOBILE` |
| 6 | One digit short | `018XXXXXXX` | fails | invalid |
| 7 | One digit too many | `018XXXXXXXXX` | fails | invalid |
| 8 | Mobile shape, unused block 010 | `010XXXXXXXX` | passes | invalid |
| 9 | Fixed line | `022XX-XXXXXX` | fails | valid, `FIXED_LINE` |
| 10 | Toll-free range | `0800-XXXXXXX` | fails | valid, `TOLL_FREE` |
<!-- country-data:BD:tests:end -->

Row 8 is the one to remember. `010` is shaped like a mobile number and passes the regex, but it is a reserved code, so an OTP sent to it is wasted. Our post on [why an E.164 regex is not enough](/blog/e164-regex-is-not-enough) shows the same problem in other countries, and our [Python](/blog/phone-number-validation-python) and [JavaScript](/blog/phone-number-validation-javascript) guides cover more languages.

## Does number portability change the carrier?

Yes. Mobile number portability (MNP) went live in Bangladesh on 1 October 2018, run by a third-party clearinghouse licensed by BTRC. At launch, a switch within 72 hours cost Tk 50 plus VAT and required a visit to the new operator's customer care centre ([Daily Star, 2018](https://www.thedailystar.net/business/telecom/mnp-service-in-bangladesh-use-any-mobile-operator-keeping-same-number-1641148)). BTRC's guidelines, issued in July 2017, and the industry code annexed to them set the rules ([BTRC MNP guidelines](https://objectstorage.ap-dcc-gazipur-1.oraclecloud15.com/n/axvjbnqprylg/b/V2Ministry/o/office-btrc/2026/7/31291b55-6a73-49ed-8b50-37a865c6f29d.pdf)):

- **Mobile to mobile only.** Fixed-to-mobile and mobile-to-fixed porting aren't allowed, and every mobile operator must offer porting to prepaid and postpaid subscribers.
- **90-day wait.** A number can be ported once 90 days have passed since it was activated or last ported.
- **Three days at most.** The maximum time to complete a port is three days.
- **Routing by query.** Operators must use the all-call-query method, so the sending network looks up the current network of every call and SMS.

The Bangladesh row of our MNP atlas:

<!-- country-data:BD:mnp:start -->
<!-- generated by apps/web/scripts/gen-country-guide-data.mjs (row from content/datasets/mnp-atlas-2026); edit the script, not this table -->

| Item | Value |
|---|---|
| Mobile number portability | Yes |
| Mobile porting since | not verified |
| Maximum porting time | not verified |
| Governing rule | BTRC Regulatory and Licensing Guidelines for MNP Services |
| Published porting volume | none published |
| Source | [btrc.gov.bd](http://www.btrc.gov.bd/mobile-number-portability) |
| Checked | 2026-09-25 |
<!-- country-data:BD:mnp:end -->

The atlas row predates this guide. The launch date and the three-day limit come from the sources above. Our MNP atlas compares Bangladesh with other countries. For routing, pricing or fraud rules, look up the current network per number instead of reading the `01X` code. Our [SMS routing with MNP and HLR](/use-cases/sms-routing-mnp-hlr) use case shows where that pays off.

## Which messaging apps and channels reach people?

SMS reaches every active mobile. For WhatsApp, Meta changed how it prices Bangladesh on 1 October 2026: the country left the "Rest of Asia Pacific" region to get its own rate card, with lower utility and authentication rates, plus a new authentication-international rate that is higher than the regional authentication rate it replaced ([Meta pricing](https://developers.facebook.com/docs/whatsapp/pricing), read on 2026-10-14). If you send OTPs to Bangladesh from a business based abroad, compare both rates. Our [WhatsApp Business API pricing](/blog/whatsapp-business-api-pricing-2026) post covers the new rates.

We didn't find a published source that measures messaging-app use in Bangladesh in a way we can verify, so we don't quote shares. The practical answer is to measure your own opted-in customers. Check which apps they are registered on, route each person to the channel they use, and keep SMS as the fallback. Our [channel-by-country guide](/blog/choosing-a-messaging-channel-by-country) shows the method.

### How do I check WhatsApp registration for a Bangladeshi customer list?

Normalise every row first, then run one check per number. A check tells you whether a number is registered at the time of the check. Like any registration check, it can't tell you whether the person wants your messages:

| Answer | What it means | What to do |
|---|---|---|
| `registered: true` | The number has a WhatsApp account at `checked_at` | Offer WhatsApp to customers who opted in to it |
| `registered: false` | No account at `checked_at` | Use SMS or another channel |
| `unknown` | No conclusive answer (not billed) | Keep the current channel; retry later |
| `invalid_number` | Failed format validation (not billed) | Fix the data at the source |

For lists, use a [bulk job](/docs/bulk-jobs). WhatsApp checks get the bulk price only for groups of at least 132 numbers from the same country in one job, so collect a day's Bangladeshi numbers into one job rather than sending many small ones. Upload a CSV whose numbers are written nationally (`01XXX-XXXXXX`) with `default_country=BD`:

```bash title="Bulk WhatsApp check for a customer CSV"
curl https://api.mobilevalidate.com/v1/jobs \
  -H "Authorization: Bearer $MOBILEVALIDATE_API_KEY" \
  -F file=@customers.csv -F checks=whatsapp,carrier -F default_country=BD
```

Send the same body to `POST /v1/jobs/estimate` first: it is free and shows the maximum cost before anything runs. Unknown or inconclusive results are never charged; see [current prices](/pricing). Our [bulk WhatsApp number check](/blog/bulk-whatsapp-number-check) post walks through the whole flow.

## What are the rules for SMS, sender IDs and OTP?

These summarise BTRC documents as we read them on 2026-10-14, plus one press report where we couldn't find the directive itself. Not legal advice; ask counsel how they apply to you.

### Enlisted A2P aggregators

Application-to-person (A2P) SMS goes through aggregators that BTRC enlists under the Bangladesh Telecommunication Act, 2001. BTRC's list, last updated on 17 September 2026, names 152 enlisted companies. Under the enlistment they may provide one-way, machine-generated SMS: promotional, transactional and notification messages ([BTRC A2P list](https://btrc.gov.bd/pages/static-pages/6922df95933eb65569e22e80)).

The list changes. On 5 August 2026, BTRC cancelled the enlistment of seven aggregators that hadn't started operating or renewed in time. It said any further operation under a cancelled certificate is illegal and asked mobile operators to disconnect those companies' SMS connections ([BTRC notice, 2026](https://objectstorage.ap-dcc-gazipur-1.oraclecloud15.com/n/axvjbnqprylg/b/V2Ministry/o/office-btrc/2026/7/8ead7408-f29a-4d77-8694-124a7580821f.pdf)). Before you sign with an SMS provider for Bangladesh, find it on the current list.

### Unwanted promotional messages

In September 2018, BTRC ordered mobile operators to stop sending commercial and promotional messages to subscribers who don't want them, and to tell users how to block such messages. As reported, the directive also banned these messages between 12am and 8am, even for customers who had agreed to receive them ([Daily Star, 2018](https://www.thedailystar.net/node/1629235)). We couldn't find that directive on BTRC's current website, so we can't confirm whether it is still in force. Treat it as a floor: send marketing only to people who opted in, make opting out easy, and don't send overnight.

### Personal data

Parliament passed the Personal Data Protection Act, 2026 (Act No. 63 of 2026), published in the Bangladesh Gazette on 10 April 2026 and republished on BTRC's website ([BTRC](https://btrc.gov.bd/pages/laws/personal-data-protection-act-2026-ff6rc0-6a7adf8ab4d5d9e66801d8fc)). We haven't summarised its consent rules or when its parts take effect. A registration check on a customer's number is processing of personal data, so ask local counsel how the Act applies. Until then, follow the baseline in our [consent guide](/blog/whatsapp-number-checks-consent-and-law): your own customers, a stated purpose, minimal data and honoured objections.

### What that means for OTP

A one-time passcode the user asked for isn't marketing, but it travels the same routes. Send it through an enlisted aggregator, keep it free of offers, and don't reuse numbers collected for verification for marketing unless the person opted in.

## What changed recently?

The rows for `BD` and `+880` in our [numbering-plan changes dataset](/datasets/numbering-plan-changes-2019-2026), built from libphonenumber's release notes:

<!-- country-data:BD:changes:start -->
<!-- generated by apps/web/scripts/gen-country-guide-data.mjs (rows of content/datasets/numbering-plan-changes-2019-2026); edit the script, not this table -->

| Change named in the release notes (2019-01-08 to 2026-09-23) | Releases |
|---|---:|
| Numbering-plan metadata (validation, lengths, types) | 13 |
| Original-carrier prefix data | 3 |
| Geocoding (area names) | 3 |
| All | 19 |

Latest numbering-plan updates for `BD`: 2026-09-23 (v9.0.40), 2026-09-09 (v9.0.39), 2026-08-13 (v9.0.37), 2026-07-30 (v9.0.36), 2024-08-07 (v8.13.43).
<!-- country-data:BD:changes:end -->

Bangladesh's numbering-plan metadata changed in four libphonenumber releases between July and September 2026. A library that is a few months old will reject some valid new numbers, so update it at least monthly. Beyond numbering, the changes that matter are Meta's standalone WhatsApp rates from 1 October 2026, the August 2026 aggregator cancellations and the April 2026 data protection law.

## What can MobileValidate check for Bangladeshi numbers?

Generated from our public catalog:

<!-- country-data:BD:coverage:start -->
<!-- generated by apps/web/scripts/gen-country-guide-data.mjs (public catalog https://api.mobilevalidate.com/v1/services, fetched 2026-10-14); edit the script, not this table -->

| Check | Accepts Bangladesh numbers | Notes |
|---|---|---|
| Format and country (every lookup) | Yes | Each number is parsed first; an invalid number returns `invalid_number` and is never billed. |
| Carrier lookup (beta) | Yes | Line type and current network where data exists; no data means `unknown`, not billed. Real time and bulk. |
| US/CA carrier lookup (premium) | No (US, CA only) | Answers `unsupported_country` for other countries, not billed. |
| Live network status (HLR) | Yes | Live reachability, porting, roaming (true or false) and current network; `unknown` is free. Real time and bulk. |
| Number portability (MNP) | Yes | Ported or not ported, and the current network code; `unknown` is free. Real time and bulk. |
| Spam reputation | Limited access | All countries except sanctioned ones; report coverage is strongest in North America and Europe. |
| Messaging apps | Yes: WhatsApp, Telegram, Viber, Signal*, iMessage*, RCS*, LINE*, Zalo, Botim*, Facebook Messenger* | Registered, not registered or unknown; unknown is free. |
| Social networks | Yes: Facebook, Instagram, Threads, X (Twitter), TikTok*, Snapchat* | Not for Bangladesh numbers: LinkedIn (US, IN only). |
| Online accounts (Apple, Amazon, Microsoft, Netflix) | Yes: Apple, Amazon, Microsoft, Netflix | Registered, not registered or unknown; unknown is free. |

\* bulk jobs only. Catalog as fetched on 2026-10-14; the live list is at [`GET /v1/services`](https://api.mobilevalidate.com/v1/services).
<!-- country-data:BD:coverage:end -->

A lookup returns network and registration facts. It never returns a subscriber's name, national ID or address, and we don't offer "number details" searches.

Here is a practical flow for a customer list: normalise with `normalize_bd()`, then one real-time lookup gives the current network and WhatsApp registration. It uses the public sandbox key `mv_test_publicSandboxn9ZgneuhR1B9CRfKG3fulym` and our [test values](/docs/test-values). The sandbox accepts only those UK drama numbers, so the example uses them. With a live key, pass the output of `normalize_bd()`.

```python title="bd_channels.py"
import os

import requests  # pip install requests

API = "https://api.mobilevalidate.com/v1/lookup"
KEY = os.environ["MOBILEVALIDATE_API_KEY"]


def channels(numbers: list[str]) -> dict[str, dict]:
    """Current network and WhatsApp registration per number. None means we don't know."""
    r = requests.post(API, headers={"Authorization": f"Bearer {KEY}"}, timeout=15,
                      json={"numbers": numbers, "checks": ["carrier", "whatsapp"], "wait": 5})
    r.raise_for_status()
    out = {}
    for row in r.json()["results"]:
        carrier, wa = row["checks"]["network.carrier"], row["checks"]["whatsapp.registered"]
        attrs = carrier["attributes"] or {}
        out[row["e164"]] = {
            "network": attrs.get("carrier"),
            "whatsapp": wa["registered"] if wa["status"] == "completed" else None,
        }
    return out


for number, info in channels(["+447700900001", "+447700900002", "+447700900005"]).items():
    print(number, info)
```

What the [test values](/docs/test-values) return:

| Test value | `network` | `whatsapp` |
|---|---|---|
| `+447700900001` | `Test Carrier` | `True` |
| `+447700900002` | `None` (carrier `unknown`) | `False` |
| `+447700900005` | `None` (`unsupported_country`) | `None` |

Keep `None` apart from `False`: `None` means we don't know, and it's never billed. Requests with 20 or more consecutive numbers are refused (`403 suspected_enumeration`), and our [acceptable use policy](/legal/acceptable-use) forbids finding recipients for unsolicited messages. People can object through our [opt-out form](/opt-out). See [WhatsApp number check](/services/whatsapp-number-check), [MNP lookup](/services/mnp-lookup) and [carrier lookup](/services/carrier-lookup) for the fields.

## What are the key takeaways?

- Bangladeshi mobiles are `+880 1` plus nine digits, `01XXX-XXXXXX` at home; store the E.164 form.
- Mobile codes are `011` and `013` to `019`; `010` and `012` are reserved. Convert Bengali digits before parsing in JavaScript.
- The second digit names the range holder (Grameenphone, Robi, Banglalink, Teletalk), not the current network: porting has run since 1 October 2018.
- Send A2P SMS only through a BTRC-enlisted aggregator, and check the current list; enlistments are cancelled.
- Check WhatsApp registration only for customers you hold lawfully, keep `unknown` apart from `false`, and never treat registration as consent.

Platform, regulator and company names are used descriptively. MobileValidate is not affiliated with any of them.

## Sources

1. [Bangladesh National Numbering Plan 2017 (No. 14.32.0000.008.52.045.16-0.1139, 31 July 2017)](https://btrc.gov.bd/pages/policies/bangladesh-national-numbering-plan-2017-dadc69-6922d909dbfbab28ce047dc3) — Bangladesh Telecommunication Regulatory Commission, 2017
2. [Regulatory and Licensing Guidelines for Mobile Number Portability Services in Bangladesh (July 2017)](https://objectstorage.ap-dcc-gazipur-1.oraclecloud15.com/n/axvjbnqprylg/b/V2Ministry/o/office-btrc/2026/7/31291b55-6a73-49ed-8b50-37a865c6f29d.pdf) — Bangladesh Telecommunication Regulatory Commission, 2017
3. [SMS service providers: list of enlisted A2P SMS aggregators (last updated 17 September 2026)](https://btrc.gov.bd/pages/static-pages/6922df95933eb65569e22e80) — Bangladesh Telecommunication Regulatory Commission, 2026
4. [Notice on cancelling existing A2P SMS aggregator enlistment certificates (5 August 2026)](https://objectstorage.ap-dcc-gazipur-1.oraclecloud15.com/n/axvjbnqprylg/b/V2Ministry/o/office-btrc/2026/7/8ead7408-f29a-4d77-8694-124a7580821f.pdf) — Bangladesh Telecommunication Regulatory Commission, 2026
5. [Personal Data Protection Act, 2026 (Act No. 63 of 2026, Bangladesh Gazette, 10 April 2026)](https://btrc.gov.bd/pages/laws/personal-data-protection-act-2026-ff6rc0-6a7adf8ab4d5d9e66801d8fc) — Bangladesh Telecommunication Regulatory Commission (republished), 2026
6. [Now you can use any operator keeping same mobile number (1 October 2018)](https://www.thedailystar.net/business/telecom/mnp-service-in-bangladesh-use-any-mobile-operator-keeping-same-number-1641148) — The Daily Star, 2018
7. [GP gets new number series: 013 (21 August 2016)](https://www.thedailystar.net/business/gp-gets-new-number-series-013-1273441) — The Daily Star, 2016
8. [Banglalink brings 014 number series (29 November 2018)](https://www.thedailystar.net/node/1666927) — The Daily Star, 2018
9. [Robi, Airtel complete merger (16 November 2016)](https://www.thedailystar.net/node/1315822) — The Daily Star, 2016
10. [Stop unwanted messages (4 September 2018)](https://www.thedailystar.net/node/1629235) — The Daily Star, 2018
11. [WhatsApp Business Platform pricing (rate card updates effective 1 October 2026)](https://developers.facebook.com/docs/whatsapp/pricing) — Meta for Developers, 2026
12. [libphonenumber PhoneNumberMetadata.xml (region BD) and release notes](https://github.com/google/libphonenumber/blob/master/resources/PhoneNumberMetadata.xml) — libphonenumber project (Apache License 2.0), 2026

## Frequently asked questions

### How many digits is a Bangladeshi mobile number?

Ten digits after the country code +880, or eleven when written nationally with the leading 0. Every mobile number is 01X followed by eight digits at home, for example 01XXX-XXXXXX, and +880 1XXX XXXXXX in E.164.

### What is the Bangladesh country code for WhatsApp and international use?

+880. Drop the leading 0 of the national number: 017XX-XXXXXX becomes +880 17XX XXXXXX. Store that E.164 form and use it for every platform and API.

### Which operator does 013, 014, 015, 016, 017, 018 or 019 belong to?

The second digit is the operator code from BTRC's numbering plan: 013 and 017 Grameenphone, 014 and 019 Banglalink, 015 Teletalk, 016 and 018 Robi (016 came with the Airtel merger in 2016). Since mobile number portability started on 1 October 2018, the code shows only the range holder, not the current network.

### Can a Bangladeshi number keep its digits after changing operator?

Yes. Under BTRC's 2017 portability guidelines a subscriber can move to another mobile operator and keep the number once 90 days have passed since activation or the last port, and the port must finish within three days. Only mobile-to-mobile porting is allowed.

### Can I check whether Bangladeshi customers are on WhatsApp?

Yes, for numbers you hold with a lawful basis, such as your own customers or sign-ups. A MobileValidate check answers registered, not registered or unknown with a checked_at date; unknown answers are not billed. It never returns a name or profile, and requests that look like scans of number ranges are refused.

### Do bulk SMS senders in Bangladesh need BTRC approval?

A2P SMS aggregators must be enlisted with BTRC. Its list, last updated on 17 September 2026, names 152 enlisted companies, and in August 2026 BTRC cancelled seven enlistments and called any further operation under them illegal. Check that your provider is on the current list.
