On this page
Dutch phone numbers use the country code +31 and have 10 digits when written at home, always starting with 0. A mobile number starts with 06, so 06 XXXXXXXX in the Netherlands becomes +31 6 XXXXXXXX from abroad (E.164: +316XXXXXXXX), with nine digits after +31. Landlines start with a two- or three-digit area code such as 010 or 0111, company numbers with 088, and machine-to-machine numbers with 0970. The prefix shows which operator received the block, but numbers move between networks, so it doesn't prove the current one.
This guide is part of our phone numbers by country series. The tables come from libphonenumber's metadata, the Dutch numbering plan on wetten.overheid.nl, reports by the ACM (the Netherlands Authority for Consumers and Markets, which issues numbers), our MNP atlas and our public catalog. Example numbers are masked with X or are libphonenumber's own example numbers; the Dutch plan has no range reserved for fiction. We read the plan, the Telecommunications Act (Telecommunicatiewet) and the ACM and AP guidance on 2026-11-07; most are in Dutch only. This is a summary, not legal advice.
What does a Dutch phone number look like?
A Dutch number is 10 digits including the leading 0, the trunk prefix you dial inside the country. Article 2 of the numbering plan fixes geographic numbers at ten digits, and Annex 1 gives the same length to mobile, 084/087, 085/091 and 088 numbers. What follows the 0 tells you the kind of number:
| First digits (national) | International | Type |
|---|---|---|
01 to 05, 07 (2- or 3-digit area codes) | +31 10 … +31 79 | Landline, for example 010 Rotterdam, 020 Amsterdam, 0111 Zierikzee |
061 to 065, 068 | +31 6 | Mobile |
066 | +31 66 | Pagers (semafonie) |
085, 091 | +31 85, +31 91 | Public electronic communication services without an area code (mostly VoIP) |
084, 087 | +31 84, +31 87 | Personal assistant services (follow-me numbers) |
088 | +31 88 | Company and institution numbers |
0800, 0900, 0906, 0909 | +31 800, +31 900 … | Freephone and information services (8 or 11 digits) |
0970 | +31 970 | Machine-to-machine (12 digits) |
From abroad, drop the 0 and add +31. Dutch people often write a mobile as 06-12345678 or 06 1234 5678, and on business cards +31 (0)6 …. Strip the bracket and the 0 before you store it.
| Item | Value |
|---|---|
| Country calling code | +31 |
| International call prefix (dialling out) | 00 |
| Trunk prefix (dialling at home) | 0 |
| Mobile: digits after +31 | 9, 11 |
| Fixed line: digits after +31 | 9 |
| Toll-free: digits after +31 | 7–10 |
| Premium rate: digits after +31 | 7–10 |
| VoIP: digits after +31 | 9 |
| Pager: digits after +31 | 9 |
| Universal access (UAN): digits after +31 | 5, 6, 9 |
| Mobile, national format (masked) | 06 1XXXXXXX |
| Mobile, international (masked) | +31 6 1XXXXXXX |
| Mobile, E.164 (masked) | +3161XXXXXXX |
| Fixed line, national format (masked) | 010 XXX XXXX |
| Fixed line, international (masked) | +31 10 XXX XXXX |
| Fixed line, E.164 (masked) | +3110XXXXXXX |
The "9, 11" for mobiles is libphonenumber's view: it types the 11-digit 0970 M2M numbers as mobile too, because they sit on mobile networks. For a person's number, expect exactly nine digits after +31. Toll-free and premium numbers vary between 7 and 10 digits after +31 because the plan allows 0800 and 090x numbers of 8 or 11 digits nationally (Annex 3).
Which prefixes are mobile numbers?
The numbering plan lists these 06 ranges (Nummerplan, Annex 1):
| Range | Use in the plan |
|---|---|
061, 062, 063, 064 | Mobile telephony |
0650 to 0655 | Mobile telephony |
0656 to 0659 | Former pager range, mobile telephony since 1 January 2006 |
066 | Pagers (semafonie) |
0670 to 0675, 0677 to 0679, 06760 | Videotex, data and internet access |
068 | Mobile telephony |
060, 069 | No entry; earmarked for mobile but not released for allocation |
The ACM's numbering report confirms it: numbers starting 06 are for mobile telephony, except the 066 and 067 ranges, and 060 and 069 are meant for mobile but not yet made available by the ministry (ACM Monitor Nummeruitgifte 2025). For each two-digit block, the generator counted every number of a mobile length that libphonenumber's mobile pattern for NL accepts:
| National prefix | International | Share of the block that is mobile (9, 11-digit numbers) | 3-digit sub-blocks that aren't fully mobile |
|---|---|---|---|
061 | +31 61 | 100% | — |
062 | +31 62 | 100% | — |
063 | +31 63 | 100% | — |
064 | +31 64 | 100% | — |
065 | +31 65 | 100% | — |
068 | +31 68 | 100% | — |
097 | +31 97 | 10.0% | not mobile: 0971–0979 |
The 097 row is the M2M range: only 0970 is in use, so libphonenumber accepts a tenth of the 097 block. All other rows are personal mobiles.
How full is the 06 range?
The ACM issues 06 numbers to operators in blocks of 10,000. At the end of 2025, 88.7% of the issuable 06 numbers had been issued, the same as a year earlier. The ACM says it will look more closely at the situation if the share passes 90% (ACM Monitor Nummeruitgifte 2025). There were no changes to the mobile ranges in 2025.
Which operator holds a 06 block?
The Dutch mobile market has three networks. In the ACM's Telecommonitor for the second quarter of 2026, KPN and Odido each had a 25 to 30% share of mobile connections, VodafoneZiggo 20 to 25%, and virtual operators on those networks 15 to 20% together. The country had 24.77 million mobile connections and 22.1 million M2M SIM cards (ACM Telecommonitor Q2 2026). Odido is the brand that replaced T-Mobile and Tele2 in September 2023 (RCR Wireless, 2023), so older lookup tables may still show the old names.
What are 0970 numbers?
They are numbers for machine-to-machine (M2M) services, such as smart meters, alarm panels, payment terminals and connected cars. The plan gives 0970 a length of 12 digits nationally, so 11 digits follow +31. 0971 to 0978 have no use assigned yet, and 0979 is kept outside the plan for network-internal use (Nummerplan, Annex 1).
Since 1 March 2013, a new automated application must use a 0970 number. It may also use 067, 0800, 084, 087, 090 or 1 numbers if it meets their purpose rules (article 1c). M2M numbers are growing fast: the ACM reports 19.1 million more 0970 numbers issued in 2025 than in 2024 (+34.92%) and doesn't exclude that the issuable space could run out in the short term (ACM Monitor Nummeruitgifte 2025).
For your forms, the rule is simple: a 0970 number belongs to a device, not to a person. libphonenumber returns MOBILE for it, so filter it out yourself, as the code below does.
What do 085, 088, 084/087 and 14 numbers mean?
085and091are for public electronic communication services. The ACM explains that085serves providers that want a number that looks like a landline without a link to an area, mostly VoIP services, and091is for value-added services. libphonenumber types both asVOIP.088is for companies and institutions: a single national number for an organisation with several offices. 3,730,800088numbers had been issued in 2025 (ACM).084and087are personal assistant services (follow-me numbers that forward to wherever the user is). The plan excludes erotic, call-prolonging and entertainment services from them.14plus the area code (5 or 6 digits, for example14 020) reaches a municipality's contact centre,1400the central government and14088the government contact centre for businesses.112is the emergency number, and116xxxnumbers are harmonised European services of social value.
None of these should be accepted as a personal sign-up number. A landline area code still says where the line was issued: unlike France, the Netherlands kept its geographic numbering.
How do I validate a Dutch number in code?
Use a libphonenumber port with full metadata and the default region NL, keep only numbers typed as mobile, and drop the 0970 M2M numbers.
Python (pip install phonenumbers):
import phonenumbers
from phonenumbers import PhoneNumberType
def normalize_nl(raw: str) -> str | None:
"""E.164 for a Dutch mobile number (06), or None. Pagers (066) and M2M (097) are dropped."""
try:
n = phonenumbers.parse(raw, "NL")
except phonenumbers.NumberParseException:
return None
if (not phonenumbers.is_valid_number(n) or phonenumbers.region_code_for_number(n) != "NL"
or phonenumbers.number_type(n) != PhoneNumberType.MOBILE
or phonenumbers.national_significant_number(n).startswith("97")):
return None
return phonenumbers.format_number(n, phonenumbers.PhoneNumberFormat.E164)
for raw in ["06 12345678", "06-1234 5678", "+31 (0)6 12345678", "0031 6 12 34 56 78",
"+31 06 12345678", "066 2345678", "010 123 4567", "085 123 4567"]:
print(f"{raw!r:24} -> {normalize_nl(raw)}")JavaScript (npm install libphonenumber-js):
import { parsePhoneNumberFromString } from "libphonenumber-js/max";
/** "06 …", "+31 (0)6 …", "0031 …" → E.164 for a Dutch mobile number, or null.
* Pagers (066) and M2M numbers (097) are dropped. */
export function normalizeNl(raw) {
const phone = parsePhoneNumberFromString(String(raw), "NL");
return phone?.isValid() && phone.country === "NL" && phone.getType() === "MOBILE"
&& !phone.nationalNumber.startsWith("97") ? phone.number : null;
}
for (const raw of ["06 12345678", "06-1234 5678", "+31 (0)6 12345678", "0031 6 12 34 56 78",
"+31 06 12345678", "066 2345678", "010 123 4567", "085 123 4567"]) {
console.log(JSON.stringify(raw).padEnd(24), "->", normalizeNl(raw));
}We ran both on 2026-11-07 (Python 3.12 with phonenumbers 9.0.40, Node.js 24 with libphonenumber-js 1.13.13). Every input is one of libphonenumber's example numbers for NL (mobile, pager, fixed line and VoIP), written in different ways. Both printed the same results; Python prints single quotes and None, JavaScript double quotes and null:
'06 12345678' -> +31612345678
'06-1234 5678' -> +31612345678
'+31 (0)6 12345678' -> +31612345678
'0031 6 12 34 56 78' -> +31612345678
'+31 06 12345678' -> +31612345678
'066 2345678' -> None
'010 123 4567' -> None
'085 123 4567' -> NoneTwo things are worth noting. +31 06 …, a common mistake that keeps the 0 after the country code, still parses to the right number in both libraries. The pager example 066 … is valid but typed PAGER, so it is dropped, as are the Rotterdam landline and the 085 VoIP number.
The generated test table runs the same idea over masked inputs. The shape regex column tests the pattern most tutorials give, after spaces, dots, dashes and brackets are removed:
| # | Case | Input (masked) | Shape regex ^(?:\+31|0031|0)?[69]\d{8,10}$ | libphonenumber (NL) |
|---|---|---|---|---|
| 1 | National, with trunk prefix | 06 1XXXXXXX | passes | valid, MOBILE |
| 2 | International, with spaces | +31 6 1XXXXXXX | passes | valid, MOBILE |
| 3 | International dialling prefix 00 | 0031 6 1XXXXXXX | passes | valid, MOBILE |
| 4 | E.164 | +3161XXXXXXX | passes | valid, MOBILE |
| 5 | Dashes and brackets | (06) 1XXXXXXX | passes | valid, MOBILE |
| 6 | One digit short | 061XXXXXX | fails | invalid |
| 7 | One digit too many | 061XXXXXXXX | passes | invalid |
| 8 | Mobile shape, unused block 060 | 060XXXXXXX | passes | invalid |
| 9 | Fixed line | 010 XXX XXXX | fails | valid, FIXED_LINE |
| 10 | Pager range | 066 XXXXXXX | passes | valid, PAGER |
Rows 7, 8 and 10 are the Dutch traps. The regex lets an 11-digit 06 number through because it allows the M2M length, passes 060, which is not released, and passes the 066 pager range. A regex like ^0?6[1-58]\d{7}$ is closer, but it still can't keep up with plan changes; parse with a maintained library instead. Our E.164 developer guide and the post on why an E.164 regex is not enough cover the general problem.
Which numbers can I use in tests and examples?
The Dutch numbering plan has no block reserved for films, books or examples, unlike the UK or France. Use libphonenumber's example numbers (06 12345678 for a mobile, 010 123 4567 for a landline) in parser unit tests, mask the rest with X, and never use a real customer's number. A sandbox or test key is the safe way to test lookups.
Does number portability change the carrier?
Yes. A Dutch mobile number can move to another operator and keep its digits. The rules are in article 4.10 of the Telecommunications Act (Telecommunicatiewet):
- One working day. The number must be moved as quickly as possible and activated on the date agreed with the subscriber, at the latest within one working day of that date. Service may not be interrupted for more than one working day.
- No direct charge. The subscriber can't be charged directly for porting.
- After the contract ends. A subscriber can still claim the right for up to one month after the contract ends.
- ACM issues the numbers. Numbers are allocated by the ACM on application (article 4.2); the minister sets the numbering plans after consulting the ACM (article 4.1).
The operators founded the association COIN in 1999 to agree the porting arrangements, and COIN runs the central platform on which operators exchange porting messages today (COIN history; COIN number portability). The Netherlands row of our MNP atlas:
| Item | Value |
|---|---|
| Mobile number portability | Yes |
| Mobile porting since | 1999 |
| Maximum porting time | 1 working day (activation after agreed date) |
| Governing rule | Telecommunicatiewet art. 4.10(5)(c) (implements EECC Art. 106) |
| Published porting volume | none published |
| Source | wetten.overheid.nl, btk.gov.tr |
| Checked | 2026-11-07 |
The one-working-day rule in the atlas comes from the European Electronic Communications Code (Art. 106), which article 4.10 implements. The atlas gives 1999 as the launch year; we didn't find a primary Dutch source with the exact date. With three networks and many virtual operators, a block holder is a weak guess for SMS routing, pricing or fraud rules. Look up the current network per number; our MNP atlas compares the Netherlands with other countries.
What are the rules for sales calls, SMS and caller ID?
These summarise the law and the regulators' guidance as we read them on 2026-11-07. Not legal advice; ask counsel how they apply to you. Two regulators share the work: the ACM enforces article 11.7 (unsolicited communication) and the caller-ID rules of the Telecommunications Act, and the Autoriteit Persoonsgegevens (AP) supervises the GDPR (article 15.1 of the Act).
The end of the Bel-me-niet register (2021)
The Netherlands used to have an opt-out list, the Bel-me-niet register: consumers registered their numbers, and callers had to skip them. A law of 10 February 2021 replaced it with opt-in for sales calls to natural persons and removed the register's article 11.8 from the Act with effect from 1 July 2021 (Staatsblad 2021, 103). From then on, a business could call a consumer only with consent, or if the person was a current or former customer.
Sales calls need explicit consent (since 1 July 2026)
The customer exception ended on 1 July 2026, when article 7.8 of the Energy Act (Energiewet), which amends article 11.7, came into force (Staatsblad 2025, 89; Rijksoverheid, 15 May 2025). The ACM summarises the rules (ACM, 25 June 2026):
- Who is protected: consumers, sole traders (zzp'ers) and general partnerships (vof's).
- Prior, explicit consent: a business may call them with a sales offer only if they agreed in advance. Consent can't be collected by phone during a service call.
- Exceptions: charities, lotteries that give to charity, and publishers of newspapers and magazines may still call existing and former customers. The ACM's business page puts that at a customer relationship in the last three years (ACM, telemarketing).
- Withdrawal: saying "don't call me again" during a call is enough, and the business must remove the number from its list immediately. Every call must offer that choice.
- Show your number: a sales caller may not hide its caller ID (article 11.7(8)).
If your process still "cleans against Bel-me-niet", it is five years out of date: keep a consent record per number instead.
Marketing SMS, WhatsApp and e-mail need consent (article 11.7)
Article 11.7(1) bans automated calling systems, fax and electronic messages for unsolicited commercial, ideological or charitable communication, unless the sender can show that the recipient consented beforehand (Telecommunicatiewet). The ePrivacy Directive's definition of electronic mail covers SMS (Directive 2002/58/EC, Art. 2(h)), and the AP's guidance names newsletters, text messages and app messages (AP, digital direct marketing):
- Individuals: consent before the first message.
- Existing customers (soft opt-in): you may use contact details you got from a customer when selling a product or service to market your own similar products or services. The customer must have been able to object, free and easily, when you collected the details, and must be able to object in every message (article 11.7(4)). The July 2026 change removed the customer exception for sales calls only; this one remains.
- Business recipients: no prior consent is needed for legal persons or people acting in their profession if they published the contact details for receiving such messages (article 11.7(3)).
- Every message must state the sender's real identity and a valid address or number for unsubscribing (article 11.7(7)).
SMS sender IDs
Dutch operators and SMS brokers run a self-regulatory SMS Sender ID Register through COIN, to fight smishing that uses alphanumeric sender names. It checks the sender name, not the message content. Only telecom providers and SMS brokers can join; a brand registers its sender ID through the provider that sends its messages (COIN, SMS Sender ID Register). If you send A2P SMS to Dutch numbers with an alphanumeric sender, ask your provider whether your name is registered. COIN's page doesn't say how unregistered names are treated, so test delivery before a campaign.
Caller ID spoofing
Article 11.10a of the Act forbids using caller ID to give the called person false information about the calling line or user, and the ACM supervises number use, including this ban (Kamerstukken 29911, nr. 302). In 2020, operators, banks and the police formed a taskforce against spoofing, and the government announced rules on the use of Dutch numbers abroad. As of November 2026 that work is a bill: the Wetsvoorstel nummerbeleid was in public consultation from 10 July to 9 October 2026. Its three parts are suballocation of numbers, extraterritorial use of Dutch numbers and caller-number recognition, with new powers for the ACM, aimed at spoofing, phishing and bank-helpdesk fraud (internetconsultatie.nl). We found no rule in force yet that makes Dutch operators block calls from abroad showing a Dutch number. For a voice OTP, show a number your provider is allowed to use, and expect stricter checks once the bill passes; our guide to STIR/SHAKEN attestation levels explains how other countries authenticate caller IDs.
Personal data (GDPR)
A phone number linked to a person is personal data under the GDPR (Regulation (EU) 2016/679). Checking a customer's number, for reachability or WhatsApp registration, needs a lawful basis under Art. 6, such as a contract or a legitimate interest you have weighed, and people can object to direct marketing at any time under Art. 21. Our posts on whether a phone number is personal data and on consent for WhatsApp checks give the baseline: your own customers, a stated purpose, minimal data and honoured objections.
Which messaging apps and channels reach people?
SMS reaches every active Dutch mobile. We didn't find a primary source that measures messaging-app use in the Netherlands in a way we can verify for this guide, so we don't quote shares. Measure your own opted-in customers instead: check which apps they are registered on, route each person to the channel they use, and keep SMS as the fallback.
How do I check WhatsApp registration for a Dutch 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. 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. Upload a CSV with numbers written the Dutch way (06-12345678, +31 (0)6 … and spaces also work) and default_country=NL:
curl https://api.mobilevalidate.com/v1/jobs \
-H "Authorization: Bearer $MOBILEVALIDATE_API_KEY" \
-F file=@customers.csv -F checks=whatsapp,mnp -F default_country=NLSend the same body to POST /v1/jobs/estimate first: it is free and shows the maximum cost before anything runs. Filter out 0970 and 066 rows before the upload; they are devices and pagers, not people.
What changed recently?
The rows for NL and +31 in our numbering-plan changes dataset, built from libphonenumber's release notes:
| Change named in the release notes (2019-01-08 to 2026-09-23) | Releases |
|---|---|
| Original-carrier prefix data | 4 |
| Numbering-plan metadata (validation, lengths, types) | 2 |
| Alternate formatting | 1 |
| All | 7 |
Latest numbering-plan updates for NL: 2022-05-05 (v8.12.48), 2019-02-06 (v8.10.5).
The Dutch validation metadata has hardly changed since 2022; the plan's ranges were stable in 2025 too. The rule changes matter more:
| Date | Change |
|---|---|
| 1 January 2006 | 0656 to 0659 move from pagers to mobile telephony |
| 1 March 2013 | New automated (M2M) applications must use 0970 numbers |
| 1 July 2021 | Opt-in for sales calls to natural persons; Bel-me-niet register closed |
| 1 July 2026 | Customer exception for sales calls ends; explicit prior consent for consumers, sole traders and general partnerships |
| 10 July to 9 October 2026 | Public consultation on the number policy bill (suballocation, use of numbers abroad, caller-number recognition) |
What can MobileValidate check for Dutch numbers?
Generated from our public catalog:
Catalog data as of 2026-11-07.
| Check | Accepts Netherlands 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 Netherlands 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. The live list is at GET /v1/services.
A lookup returns network and registration facts. It never returns a subscriber's name or address, and we don't offer "number details" searches.
How to start without paying:
- Free test key. Get a test key: it never touches a real network and returns fixed answers for reserved test numbers, so you can build every branch first (test mode).
- Free real checks. Every account can run 20 phone numbers and 10 e-mail addresses through the real-time checks for free on the dashboard's Try it page.
- Free carrier lookup. The public carrier lookup page answers three numbers a day without sign-up.
- Free estimate.
POST /v1/jobs/estimateshows the maximum cost of a bulk file before anything runs.
To get a live account, request access. Viber and Zalo checks are bulk-only for now, as the asterisks in the table show. Prices are on the pricing page, which also lists the bonus on larger top-ups.
Because the 06 prefix shows only the block holder, the useful Dutch lookup is the current network. An MNP lookup gives ported or not ported and the current network code; an HLR lookup adds live reachability. Here is a small flow for a customer list that adds WhatsApp registration. It uses the public sandbox key mv_test_publicSandboxn9ZgneuhR1B9CRfKG3fulym and our test values. The sandbox accepts only those UK drama numbers, so the example uses them. With a live key, pass the output of normalize_nl().
import os
import requests # pip install requests
API = "https://api.mobilevalidate.com/v1/lookup"
KEY = os.environ["MOBILEVALIDATE_API_KEY"]
def route(numbers: list[str]) -> dict[str, dict]:
"""Porting status, current network and WhatsApp registration. None means we don't know."""
r = requests.post(API, headers={"Authorization": f"Bearer {KEY}"}, timeout=15,
json={"numbers": numbers, "checks": ["mnp", "whatsapp"], "wait": 5})
r.raise_for_status()
out = {}
for row in r.json()["results"]:
mnp, wa = row["checks"]["number.mnp"], row["checks"]["whatsapp.registered"]
attrs = (mnp["attributes"] or {}) if mnp["status"] == "completed" else {}
out[row["e164"]] = {
"porting": attrs.get("porting"),
"mcc_mnc": attrs.get("mcc_mnc"),
"whatsapp": wa["registered"] if wa["status"] == "completed" else None,
}
return out
for number, info in route(["+447700900001", "+447700900002", "+447700900003"]).items():
print(number, info)What it printed with the sandbox key on 2026-11-07:
+447700900001 {'porting': 'not_ported', 'mcc_mnc': '23415', 'whatsapp': True}
+447700900002 {'porting': 'not_ported', 'mcc_mnc': '23415', 'whatsapp': False}
+447700900003 {'porting': None, 'mcc_mnc': None, 'whatsapp': None}The third test value answers unknown (a simulated timeout), so everything is 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 forbids finding recipients for unsolicited messages. People can object through our opt-out form. See WhatsApp number check for the fields.
What are the key takeaways?
- Dutch numbers are 10 digits at home and
+31plus 9 digits in E.164; mobiles start06. Store+316XXXXXXXX, without the(0), spaces or dashes. - Not every
06is a person's mobile:066is pagers,067data access, and060and069are not released. Machine-to-machine numbers start0970and have 12 digits; libphonenumber calls them mobile, so filter them yourself. 085and091are mostly VoIP,088company numbers,084and087follow-me numbers; landline area codes still show a place.- The prefix names the block holder, not the current network: a port takes effect within one working day of the agreed date.
- The Dutch plan has no fiction range; use libphonenumber's example numbers in tests, never real numbers.
- The Bel-me-niet register closed in 2021. Since 1 July 2026, sales calls to consumers, sole traders and general partnerships need explicit prior consent, and marketing SMS and app messages need consent under article 11.7, with a soft opt-in for existing customers.
- Caller ID spoofing is illegal (article 11.10a); a number policy bill against spoofing finished consultation on 9 October 2026.
Network, regulator and company names are used descriptively. MobileValidate is not affiliated with any of them.
Sources
- Nummerplan telefoon- en ISDN-diensten (BWBR0010198), version in force from 3 October 2025 — Ministry of Economic Affairs via wetten.overheid.nl, 2025
- Nummerplannen voor telecomaanbieders — ACM (Autoriteit Consument & Markt), 2026
- Monitor Nummeruitgifte 2025 (March 2026) — ACM (Autoriteit Consument & Markt), 2026
- Telecommunicatiewet (BWBR0009950), version in force from 15 August 2026: articles 4.2, 4.10, 11.7, 11.10a and 15.1 — wetten.overheid.nl, 2026
- Wet van 10 februari 2021 tot wijziging van de Telecommunicatiewet (opt-in for unsolicited calls; end of the Bel-me-niet register), Staatsblad 2021, 103 — Officiële bekendmakingen, 2021
- Besluit van 31 maart 2025 (entry into force of article 7.8 of the Energiewet, amending article 11.7 Telecommunicatiewet, on 1 July 2026), Staatsblad 2025, 89 — Officiële bekendmakingen, 2025
- Ongevraagd bellen per juli 2026 beperkt (news, 15 May 2025) — Rijksoverheid (Government of the Netherlands), 2025
- Vanaf 1 juli strengere regels voor telemarketing: alleen nog maar als klant toestemming heeft gegeven (news, 25 June 2026) — ACM (Autoriteit Consument & Markt), 2026
- Verkoop via telemarketing (rules for businesses) — ACM (Autoriteit Consument & Markt), 2026
- Digital direct marketing — Autoriteit Persoonsgegevens (Dutch Data Protection Authority), 2026
- Kamerbrief over spoofing en nummerbeleid, Kamerstukken 29911, nr. 302 (16 December 2020) — Officiële bekendmakingen, 2020
- Wetsvoorstel nummerbeleid (public consultation, 10 July to 9 October 2026) — Ministry of Economic Affairs via internetconsultatie.nl, 2026
- Historie (founding of COIN for number portability, 1999) — Vereniging COIN, 2026
- Nummerportabiliteit — Vereniging COIN, 2026
- SMS Sender ID Register — Vereniging COIN, 2026
- ACM Telecommonitor tweede kwartaal 2026 (20 October 2026) — ACM (Autoriteit Consument & Markt), 2026
- T-Mo Netherlands, Tele2 shake off DT ties, rebrand as Odido — RCR Wireless News, 2023
- Directive 2002/58/EC on privacy and electronic communications (ePrivacy Directive) — EUR-Lex, Publications Office of the European Union, 2002
- Directive (EU) 2018/1972 establishing the European Electronic Communications Code — EUR-Lex, Publications Office of the European Union, 2018
- Regulation (EU) 2016/679 (General Data Protection Regulation) — EUR-Lex, Publications Office of the European Union, 2016
- libphonenumber PhoneNumberMetadata.xml (region NL) — libphonenumber project (Apache License 2.0), 2026
Frequently asked questions
How many digits is a Dutch phone number?
Ten digits when written in the Netherlands, starting with 0, for example 06 XXXXXXXX for a mobile. In international form you drop the 0 and add the country code +31, so nine digits follow: +31 6 XXXXXXXX. Landlines, 085 and 088 numbers have the same length. The exceptions are machine-to-machine numbers starting 0970, which have 12 digits, and some 0800 and 0900 numbers with 8 or 11 digits.
What is the Netherlands country code for WhatsApp and international calls?
+31. Drop the leading 0 of the Dutch number: 06 12345678 becomes +31 6 12345678. People often write +31 (0)6 …; the (0) is only a reminder for callers inside the country. Save the E.164 form +316XXXXXXXX, without the 0, spaces or dashes.
Are all 06 numbers mobile in the Netherlands?
Almost. The national numbering plan reserves 061 to 065 and 068 for mobile telephony. 066 is still the old pager (semafonie) range and 067 is used for data and internet access. 060 and 069 are earmarked for mobile but have not been released for allocation yet, so no valid number starts with them today.
What are 097 numbers in the Netherlands?
Numbers starting 0970 are for machine-to-machine services, such as smart meters, alarms and connected cars. They have 12 digits nationally (11 after +31). Since 1 March 2013, new automated applications must use them instead of 06 numbers. They are not personal mobiles, so don't accept them as a customer's contact number.
Can I tell the operator from a 06 number?
No. The ACM issues 06 numbers to operators in blocks of 10,000, but any number can be moved to another operator and keep its digits. The law requires the port to take effect within one working day of the agreed date. To know today's network, look up each number.
Does the Bel-me-niet register still exist?
No. The Bel-me-niet register closed on 1 July 2021, when the Netherlands switched to opt-in for sales calls. From 1 July 2026, the exception for existing and former customers ended too: businesses may only call consumers, sole traders and general partnerships who gave explicit prior consent. Charities, charity lotteries and publishers keep a narrow customer exception.
Do I need consent to send marketing SMS or WhatsApp messages in the Netherlands?
Yes. Article 11.7 of the Telecommunications Act bans unsolicited commercial electronic messages, including SMS and app messages, unless the recipient consented beforehand. The exception is an existing customer offered your own similar products, who could object when you collected the number and can object in every message. Each message must name the sender and give a valid way to unsubscribe.
Is caller ID spoofing illegal in the Netherlands?
Yes. Article 11.10a of the Telecommunications Act forbids using caller ID to give the called person false information about the calling line or user, and the ACM supervises this. As of November 2026, a bill on number policy that targets spoofing, phishing and bank-helpdesk fraud has finished public consultation but is not yet law.
Related services and guides
More from the blog
All articlesGuides
Phone numbers by country: formats, portability, channels and rules
How phone numbers differ by country: formats and E.164, numbering changes, portability, line types, messaging channels, and a dated tracker of calling and texting rules.
11 min read
Developers
E.164 phone number format: a practical guide for developers
How to normalize phone numbers to E.164 in JavaScript and Python, the pitfalls that break deduplication, and how the MobileValidate API normalizes input.
8 min read
Developers
E.164 regex: why a pattern is not enough to validate phone numbers
The common E.164 regex accepts impossible numbers. Real counterexamples, the shortest valid international numbers, and what to use a regex for instead.
7 min read

