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

> German phone number format: +49, variable-length numbers, 015/016/017 mobile prefixes, tested validation code, porting since 2002 and UWG consent rules.

Canonical: https://mobilevalidate.com/blog/germany-phone-number-format · Last updated: 2026-11-02

![A card of four digit rows of different lengths beside a +49 pill, a crossed-out regex pill and a ticked E.164 pill, four network towers linked by porting arrows, and a document with a shield.](https://mobilevalidate.com/images/blog/germany-phone-number-format.svg)

*German numbers have no single length: validate by numbering plan, not regex, and check the network per number.*


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

German numbers use the country code +49. A mobile number has 10 or 11 digits after the code and starts with 15, 16 or 17 (015x, 016x or 017x when dialled at home), so in E.164 it looks like +49 15XX XXXXXXX or +49 171 XXXXXXX. Germany has no single number length: mobile lengths depend on the block, and landline area codes have two to five digits. The prefix names the company that holds the range, but numbers have been portable since 2002, so it doesn't prove the current network.

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](/datasets/mnp-atlas-2026) and our public catalog. Example numbers are masked with X or taken from the Federal Network Agency's fictional "drama numbers", which are never given to anyone. We read the Federal Network Agency's numbering plans, its list of allocated mobile blocks and the laws on gesetze-im-internet.de on 2026-11-02; most are in German only. This is a summary, not legal advice.

## What does a German phone number look like?

A mobile number is `015X XXXXXXXX`, `016X XXXXXXX` or `017X XXXXXXX` at home: the trunk prefix `0`, a two-digit service code (`15`, `16` or `17`), then a block code and the subscriber digits. From abroad you drop the `0` and write `+49 15X XXXXXXXX`. Germans often write `+49 (0)171 XXXXXXX`, with the trunk prefix in brackets, as a reminder to dial it at home. Don't store that form.

The length is the tricky part. The Federal Network Agency's mobile numbering plan sets it per range (Nummernplan Mobile Dienste, sections 2.3, 2.4 and 4.3.1):

- **`015` numbers always have 11 digits** after the `0` (after `+49`): `15`, a block code and the subscriber number.
- **`0160`, `0162`, `0163` and `017` numbers have 10 or 11 digits.** The operator holding the block decides which length it gives out, so `0171 XXXXXXX` (10 digits) and `0171 XXXXXXXX` (11 digits) can both be real.

Landlines vary even more. Germany has about 5,200 local network areas, each with an area code (Ortsnetzkennzahl, or Vorwahl) of two to five digits without the leading `0` (Federal Network Agency, Ortsnetzrufnummern). Since 1 July 2011, new local numbers are in principle 11 digits long including the area code. The exception is single lines in the four areas with two-digit codes, Berlin (`030`), Hamburg (`040`), Frankfurt (`069`) and Munich (`089`), which get 10 digits. Older numbers can be shorter, and subscribers may add digits for extensions; numbers of up to 13 digits are generally reachable (Federal Network Agency, length of local numbers).

<!-- country-data:DE: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 | `+49` |
| International call prefix (dialling out) | `00` |
| Trunk prefix (dialling at home) | `0` |
| Mobile: digits after +49 | 10, 11 |
| Fixed line: digits after +49 | 5–15 |
| Toll-free: digits after +49 | 10–15 |
| Premium rate: digits after +49 | 10, 11 |
| Shared cost: digits after +49 | 7–14 |
| Personal number: digits after +49 | 11 |
| Pager: digits after +49 | 4–14 |
| Universal access (UAN): digits after +49 | 8–14 |
| Voicemail access: digits after +49 | 12, 13 |
| Mobile, national format (masked) | `015XX XXXXXXX` |
| Mobile, international (masked) | `+49 15XX XXXXXXX` |
| Mobile, E.164 (masked) | `+4915XXXXXXXXX` |
| Fixed line, national format (masked) | `030 XXXXXXXX` |
| Fixed line, international (masked) | `+49 30 XXXXXXXX` |
| Fixed line, E.164 (masked) | `+4930XXXXXXXX` |
<!-- country-data:DE:format:end -->

The voicemail row is a German detail. Each mobile number has a mailbox number formed by inserting a two-digit infix, such as `13`, `50`, `55`, `99` or `33` depending on the block, which is why those numbers are one or two digits longer (plan, section 2.5). They are valid numbers but not a person's mobile, so don't accept them as a sign-up number.

Store only the E.164 form: `+49`, then the national number without its `0`, with no spaces or brackets.

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

All mobile numbers start `015`, `016` or `017`. For each two-digit block, the generator counted every 10- and 11-digit number that libphonenumber's mobile pattern for `DE` accepts:

<!-- country-data:DE: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, 11-digit numbers) | 3-digit sub-blocks that aren't fully mobile |
|---|---|---|---|
| `015` | `+49 15` | 80.2% | not mobile: 0154; partly mobile: 0153 (2.0%) |
| `016` | `+49 16` | 30.0% | not mobile: 0161, 0164–0169 |
| `017` | `+49 17` | 100% | — |
<!-- country-data:DE:prefixes:end -->

The `016` row is only 30% mobile because the plan's mobile range covers `0160`, `0162` and `0163` only; `0164`, `0168` and `0169` are reserved for paging (Funkruf) (Federal Network Agency, Mobile Dienste). In `015`, the blocks are smaller and newer. Until 19 September 2013 the Federal Network Agency gave out `015` numbers in blocks of 10 million (two-digit block code, such as `0151X`); since 20 September 2013 it allocates blocks of one million with a three-digit code, such as `01556X`. No new original allocations are made from `0160`, `0162`, `0163` or `017` (plan, sections 2.3 and 2.4).

### Block holders in the Federal Network Agency's list

The Federal Network Agency publishes the holder of every mobile block. The table below summarises the list as we downloaded it on 2026-11-02 (allocated blocks). The "network brand" column comes from libphonenumber's carrier data, which still names the networks the blocks were first used for ([libphonenumber 49.txt](https://github.com/google/libphonenumber/blob/master/resources/carrier/en/49.txt)):

| National prefix | International | Holder in the Federal Network Agency list | Network brand at allocation |
|---|---|---|---|
| `0151`, `0160`, `0170`, `0171`, `0175` | `+49 151`, `+49 160`, `+49 170`, `+49 171`, `+49 175` | Telekom Deutschland | T-Mobile (D1) |
| `0152`, `0162`, `0172`, `0173`, `0174` | `+49 152`, `+49 162`, `+49 172` to `+49 174` | Vodafone (`01521` is held by Lycamobile) | Vodafone (D2) |
| `0157`, `0163`, `0177`, `0178` | `+49 157`, `+49 163`, `+49 177`, `+49 178` | Telefónica Germany | E-Plus |
| `0159`, `0176`, `0179` | `+49 159`, `+49 176`, `+49 179` | Telefónica Germany | O2 |
| `01555X`, `01556X` | `+49 1555`, `+49 1556` | 1&1 Mobilfunk | 1&1 |
| `01551`, `01563`, `01567`, `015310`, `015333`, `015888` and others | — | Smaller providers, such as Lebara, spusu, Argon Networks, MTEL, Simsalasim and TelcoVillage | — |

E-Plus became part of Telefónica Deutschland after the European Commission cleared the takeover in 2014 ([Telefónica Deutschland, 2014](https://www.telefonica.de/news/press-releases-telefonica-germany/2014/08/green-light-telefonica-deutschland-receives-final-clearance-for-e-plus-acquisition.html)), which is why the E-Plus and O2 blocks now have one holder. 1&1 started mobile services on its own network on 8 December 2023, and on 11 November 2025 it finished moving all customers that had been served on other networks under earlier wholesale contracts ([1&1, 2025](https://unternehmen.1und1.de/_Resources/Corporate/Persistent/52c7b07e42093160750d5c1986fd685a4b4cd7e0/1-1-mobilfunknetz-erreicht-25-prozent-der-deutschen-haushalte.pdf)). Many of those customers kept numbers from Telekom, Vodafone or Telefónica blocks, so a `0176` or `0152` number can be on the 1&1 network today.

Two details matter for validation. First, libphonenumber accepts a few `015` blocks that aren't in the Federal Network Agency list, such as `0150X`, so "valid" means "possible under the plan", not "allocated". Second, the list shows block `015410` held by Telekom, but libphonenumber's metadata 9.0.39 doesn't accept `0154` as mobile (see the prefix table). If your users send `0154` numbers that libphonenumber rejects, report it upstream rather than loosening your own check.

## Why does a fixed-length regex fail for German numbers?

Most tutorials give a pattern like `^\+49\d{10,11}$` or `^\+491\d{10}$`. The first accepts numbers that are too short for their block; the second rejects valid 10-digit `0171` numbers. We tested `^\+491\d{10}$` on two drama numbers on 2026-11-02: `+4915228817386` passes, `+491713920012` fails, although both are correct mobile numbers.

Area codes cause the same trouble for landlines. A two-digit code (`030`) leaves more room for the subscriber number than a five-digit code (`03XXXX`), and the same total length can be valid in one area and not in another. Only a library that carries the numbering plan can tell. Our post on [why an E.164 regex is not enough](/blog/e164-regex-is-not-enough) shows the problem in other countries.

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

Use a libphonenumber port with full metadata and the default region `DE`, and keep only numbers typed as mobile.

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

```python
import phonenumbers
from phonenumbers import PhoneNumberType


def normalize_de(raw: str) -> str | None:
    """E.164 for a German mobile number (015x, 016x, 017x), or None."""
    try:
        n = phonenumbers.parse(raw, "DE")
    except phonenumbers.NumberParseException:
        return None
    if (not phonenumbers.is_valid_number(n) or phonenumbers.region_code_for_number(n) != "DE"
            or phonenumbers.number_type(n) != PhoneNumberType.MOBILE):
        return None
    return phonenumbers.format_number(n, phonenumbers.PhoneNumberFormat.E164)


for raw in ["0152 28817386", "+49 (0)171 3920012", "0049 176 04069012", "+49 30 23125012",
            "0152 2881738", "0153 12345678"]:
    print(f"{raw!r:24} -> {normalize_de(raw)}")
```

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

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

/** "0152 …", "+49 (0)171 …", "0049 …" → E.164 for a German mobile number, or null. */
export function normalizeDe(raw) {
  const phone = parsePhoneNumberFromString(String(raw), "DE");
  return phone?.isValid() && phone.country === "DE" && phone.getType() === "MOBILE" ? phone.number : null;
}

for (const raw of ["0152 28817386", "+49 (0)171 3920012", "0049 176 04069012", "+49 30 23125012",
                   "0152 2881738", "0153 12345678"]) {
  console.log(JSON.stringify(raw).padEnd(24), "->", normalizeDe(raw));
}
```

We ran both on 2026-11-02 (Python 3.12 with phonenumbers 9.0.40, Node.js 24 with libphonenumber-js 1.13.13). The inputs are Federal Network Agency drama numbers, so they reach nobody. Both printed the same results (Python prints `None`, JavaScript `null`):

```text
'0152 28817386'          -> +4915228817386
'+49 (0)171 3920012'     -> +491713920012
'0049 176 04069012'      -> +4917604069012
'+49 30 23125012'        -> None
'0152 2881738'           -> None
'0153 12345678'          -> None
```

The `+49 (0)` form parses correctly in both libraries. The Berlin landline is valid but not mobile, so it's dropped. `0152 2881738` has the same 10-digit length as the valid `0171` number above, yet it's rejected, because `015` numbers need 11 digits. `0153 12345678` falls in a block that isn't open for mobiles.

The generated test table runs the same idea over masked inputs. The shape regex column tests the pattern most tutorials give, after spaces, dashes and brackets are removed:

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

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

Row 6 is the German trap: a 015 number one digit short still has a valid length for `017`, so the regex passes it, while libphonenumber knows the block needs 11 digits. Our [Python](/blog/phone-number-validation-python) and [JavaScript](/blog/phone-number-validation-javascript) guides cover more languages.

### Which numbers can I use in tests and examples?

Use the Federal Network Agency's drama numbers. They can be shown, printed and spoken in films, books, brochures and teaching material without approval, and they are permanently unassigned (Federal Network Agency, drama numbers):

| Type | Range |
|---|---|
| Berlin landline | `030 23125 000` to `999` |
| Frankfurt am Main landline | `069 90009 000` to `999` |
| Hamburg landline | `040 66969 000` to `999` |
| Cologne landline | `0221 4710 000` to `999` |
| Munich landline | `089 99998 000` to `999` |
| Mobile, 100 numbers | `0171 39200 00` to `99`, `0176 040690 00` to `99` |
| Mobile, single numbers | `0152 28817386`, `0152 28895456`, `0152 54599371`, `0172 9925904`, `0172 9968532`, `0172 9973185`, `0172 9973186`, `0172 9980752`, `0174 9091317`, `0174 9464308` |

The Federal Network Agency says it doesn't plan to add more. For other area codes it suggests putting a `0` straight after the area code, because no subscriber number starts with `0`. In a unit test these numbers check your parser; they don't prove that a live lookup works, because nothing answers on them.

## Does number portability change the carrier?

Yes. Mobile number portability (MNP) has been available in Germany since 1 November 2002, and since May 2012 customers can port at any time, not only at the end of a contract ([teltarif.de, 2012](https://mobil.teltarif.de/presse/2012/pm_011112_10-jahre-portierung.pdf)). Today the rules are in § 59 of the Telecommunications Act (TKG) of 2021 ([§ 59 TKG](https://www.gesetze-im-internet.de/tkg_2021/__59.html)):

- **Any time for mobiles.** A mobile customer can ask to port the number at any time; the old contract is not affected. After ending a contract, a customer can still ask for porting for up to one month.
- **One working day.** The number must be ported and switched on the agreed day, or at the latest on the next working day, and the service may not be interrupted for more than one working day.
- **Mobile stays mobile.** Porting between fixed-location and mobile voice services is not allowed in either direction.
- **No direct charge.** End users may not be charged directly for porting.

The Germany row of our MNP atlas:

<!-- country-data:DE: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 | 2002-11-01 |
| Maximum porting time | 1 working day (max service interruption) |
| Governing rule | § 59 TKG (2021); EECC Art. 106 |
| Published porting volume | none published |
| Source | [gesetze-im-internet.de](https://www.gesetze-im-internet.de/tkg_2021/__59.html), [eur-lex.europa.eu](https://eur-lex.europa.eu/eli/dir/2018/1972/oj) |
| Checked | 2026-11-02 |
<!-- country-data:DE:mnp:end -->

Mobile porting started on 1 November 2002 (teltarif.de press release cited above). Our [MNP atlas](/blog/mobile-number-portability-atlas) compares Germany with other countries. With four network operators and many providers on their networks, the block holder is a weak guess. For routing, pricing or fraud rules, look up the current network per number; our [SMS routing with MNP and HLR](/use-cases/sms-routing-mnp-hlr) use case shows where that pays off.

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

These summarise the laws and Federal Network Agency pages as we read them on 2026-11-02. Not legal advice; ask counsel how they apply to you.

### Marketing SMS and calls need consent (UWG § 7)

The Act against Unfair Competition (UWG) treats some advertising as an unacceptable nuisance in every case ([§ 7 UWG](https://www.gesetze-im-internet.de/uwg_2004/__7.html)):

- **Calls to consumers** need their prior express consent. For calls to businesses, at least presumed consent is enough.
- **Automated calls, fax and electronic mail** need the recipient's prior express consent. The ePrivacy Directive defines electronic mail as any text, voice, sound or image message that can be stored in the network or on the recipient's device until it is collected, which covers SMS ([Directive 2002/58/EC](https://eur-lex.europa.eu/eli/dir/2002/58/oj), Art. 2(h)).
- **Every advertising message** must not hide the sender's identity and must give a valid address where the recipient can ask to stop, at no cost beyond basic transmission rates.

There is one exception, in § 7(3): a business that got a customer's electronic address in connection with a sale may advertise its own similar goods or services, if the customer hasn't objected and is told clearly, when the address is collected and in every message, that they can object at any time.

### Document consent to calls (UWG § 7a)

Since October 2021, a business that advertises to consumers by phone must document their prior express consent when it is given and keep the record for five years, counted again after each use. It must show the record to the Federal Network Agency on request ([§ 7a UWG](https://www.gesetze-im-internet.de/uwg_2004/__7a.html)). The Federal Network Agency published guidance on that documentation in a press release of 7 July 2022. Its list of fines shows steady enforcement: from February 2025 to July 2026 it lists fines against call centres, energy, insurance and solar companies, for calls without consent, incomplete consent records, ignored objections and hidden caller identities (Federal Network Agency fines).

### Double opt-in in practice

German businesses usually collect marketing consent with a double opt-in: the person signs up, then confirms through a message sent to the address or number they gave. The Federal Court of Justice (BGH) set its limits in 2011 ([BGH, I ZR 164/09](https://www.wipo.int/wipolex/en/text/597212)):

- A confirmation email in a double opt-in process does **not** prove that the person agreed to advertising calls, because it doesn't show who owns the phone number entered.
- For email advertising to an address confirmed by double opt-in, the burden shifts: a consumer who says they never consented must show it, for example that the confirmation didn't come from them.

For SMS marketing, the practical lesson is to confirm on the channel itself: send a confirmation SMS to the number and store when and how the person replied. Keep the record per number, as for calls.

### Caller ID and alphanumeric senders (TKG § 120)

Calls must carry a German number that is assigned to the caller, and special numbers such as `110` and `112` may not be sent as caller ID. A call that arrives from a foreign network showing a German number must have the number suppressed; mobile numbers in international roaming are the exception ([§ 120 TKG](https://www.gesetze-im-internet.de/tkg_2021/__120.html)). The Federal Network Agency warned that calls without a displayed number would rise from 1 December 2022 at the latest, when this took effect (Federal Network Agency, 2022). For a voice OTP sent from abroad, expect the number to show as withheld.

For text messages the same rule applies, with an exception: short codes and alphanumeric sender IDs are allowed if the recipient can clearly identify the sender from them and they don't allow two-way communication (§ 120(5)). In practice, use a sender ID that names your brand, and don't ask people to reply to it.

### Prepaid SIMs are identity-checked

Before a prepaid mobile service is switched on, the provider must check the customer's name and date of birth against an ID card, passport or another listed document or register ([§ 172 TKG](https://www.gesetze-im-internet.de/tkg_2021/__172.html)). That makes a German mobile number harder to get anonymously than in some countries, but it says nothing about who is using the number today.

### Personal data (GDPR)

A phone number linked to a person is personal data under the GDPR ([Regulation (EU) 2016/679](https://eur-lex.europa.eu/eli/reg/2016/679/oj)). Checking a customer's number, for example 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](/blog/is-a-phone-number-personal-data-gdpr) and on [consent for WhatsApp checks](/blog/whatsapp-number-checks-consent-and-law) 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 German mobile. We didn't find a published source that measures messaging-app use in Germany in a way we can verify for this guide, 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 German 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](/docs/bulk-jobs). Upload a CSV whose numbers are written nationally (`0171 XXXXXXX`, `+49 (0)152 …` also works) with `default_country=DE`:

```bash title="Bulk WhatsApp and carrier 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=DE
```

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).

## What changed recently?

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

<!-- country-data:DE: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) | 19 |
| Short numbers | 7 |
| Original-carrier prefix data | 5 |
| Alternate formatting | 4 |
| Geocoding (area names) | 3 |
| All | 38 |

Latest numbering-plan updates for `DE`: 2026-05-06 (v9.0.30), 2025-09-11 (v9.0.14), 2025-08-28 (v9.0.13), 2025-06-19 (v9.0.8), 2025-06-04 (v9.0.7).
<!-- country-data:DE:changes:end -->

Germany's numbering-plan metadata changed in 19 libphonenumber releases over the period, most recently in May 2026. The Federal Network Agency still allocates new `015` blocks of one million numbers, so keep your library current, at least monthly, or numbers from a new block may fail validation. Beyond numbering, the changes that matter are the 1&1 network (mobile services since December 2023, all customers moved by November 2025), the caller-ID rule for calls from abroad (December 2022) and the documentation duty for call consent (October 2021).

## What can MobileValidate check for German numbers?

Generated from our public catalog:

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

| Check | Accepts Germany 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 Germany 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-11-02; the live list is at [`GET /v1/services`](https://api.mobilevalidate.com/v1/services).
<!-- country-data:DE:coverage:end -->

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

For German numbers, the useful pair is an [MNP lookup](/services/mnp-lookup), which tells you whether a number has been ported and which network holds it now, and a [live network status (HLR) check](/services/hlr-lookup), which adds whether the number is currently reachable. Both answer `unknown` when there is no conclusive result, and `unknown` is free. Try them with the public sandbox key `mv_test_publicSandboxn9ZgneuhR1B9CRfKG3fulym` and our [test values](/docs/test-values). The sandbox accepts only the UK drama numbers listed there, not German ones; with a live key, pass the output of `normalize_de()`.

```bash title="Carrier and WhatsApp check in the sandbox"
curl https://api.mobilevalidate.com/v1/lookup \
  -H "Authorization: Bearer mv_test_publicSandboxn9ZgneuhR1B9CRfKG3fulym" \
  -H "Content-Type: application/json" \
  -d '{"numbers": ["+447700900001"], "checks": ["carrier", "whatsapp"], "wait": 5}'
```

For `+447700900001` the sandbox answered on 2026-11-02 with carrier `Test Carrier`, line type `mobile` and `registered: true` for WhatsApp, with `billed: false` because it's a test value.

Keep `unknown` apart from `false`: `unknown` 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) and [carrier lookup](/services/carrier-lookup) for the fields.

## What are the key takeaways?

- German mobiles are `+49` plus 10 or 11 digits, starting `15`, `16` or `17`; `015` numbers always have 11. Store the E.164 form, without the `(0)`.
- Don't validate with a fixed-length regex: mobile lengths depend on the block, and landline area codes have two to five digits.
- Mobile ranges are `015`, `0160`, `0162`, `0163` and `017`; `0164`, `0168` and `0169` are paging. The block names the holder in the Federal Network Agency list, not the current network: porting has run since 1 November 2002 and is possible at any time.
- Use the Federal Network Agency's drama numbers in examples and tests, never real numbers.
- Marketing SMS and calls to consumers need prior express consent under § 7 UWG; document call consent for five years (§ 7a), and confirm SMS consent on the number itself.

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

## Sources

1. Nummernplan Rufnummern für Mobile Dienste (consolidated version in force from 21 May 2020; Verfügung 11/2011 as amended) — Federal Network Agency (Germany), 2020
2. Mobile Dienste (0)15, (0)16, (0)17: allocated number blocks (list and CSV download) — Federal Network Agency (Germany), 2026
3. Ortsnetzrufnummern (local network numbers) — Federal Network Agency (Germany), 2026
4. Länge von Ortsnetzrufnummern (Stelligkeit) — Federal Network Agency (Germany), 2026
5. Rufnummern für Medienproduktionen ("Drama Numbers") — Federal Network Agency (Germany), 2026
6. [Telekommunikationsgesetz (TKG 2021), § 59 Anbieterwechsel und Rufnummernmitnahme](https://www.gesetze-im-internet.de/tkg_2021/__59.html) — Bundesministerium der Justiz / gesetze-im-internet.de, 2021
7. [Telekommunikationsgesetz (TKG 2021), § 120 Rufnummernübermittlung](https://www.gesetze-im-internet.de/tkg_2021/__120.html) — Bundesministerium der Justiz / gesetze-im-internet.de, 2021
8. [Telekommunikationsgesetz (TKG 2021), § 172 Daten für Auskunftsersuchen der Sicherheitsbehörden](https://www.gesetze-im-internet.de/tkg_2021/__172.html) — Bundesministerium der Justiz / gesetze-im-internet.de, 2021
9. Aktueller Hinweis: Anstieg von Anrufen ohne angezeigte Rufnummer (2022) — Federal Network Agency (Germany), 2022
10. [Gesetz gegen den unlauteren Wettbewerb (UWG), § 7 Unzumutbare Belästigungen](https://www.gesetze-im-internet.de/uwg_2004/__7.html) — Bundesministerium der Justiz / gesetze-im-internet.de, 2024
11. [Gesetz gegen den unlauteren Wettbewerb (UWG), § 7a Einwilligung in Telefonwerbung](https://www.gesetze-im-internet.de/uwg_2004/__7a.html) — Bundesministerium der Justiz / gesetze-im-internet.de, 2021
12. Auslegungshinweise zur Dokumentation von Einwilligungen in Telefonwerbung (press release, 7 July 2022) — Federal Network Agency (Germany), 2022
13. Bußgelder: unerlaubte Telefonwerbung (list of fines) — Federal Network Agency (Germany), 2026
14. [Bundesgerichtshof, judgment of 10 February 2011, I ZR 164/09 "Double-opt-in-Verfahren"](https://www.wipo.int/wipolex/en/text/597212) — WIPO Lex (World Intellectual Property Organization), 2011
15. [Directive 2002/58/EC on privacy and electronic communications (ePrivacy Directive)](https://eur-lex.europa.eu/eli/dir/2002/58/oj) — EUR-Lex, Publications Office of the European Union, 2002
16. [Regulation (EU) 2016/679 (General Data Protection Regulation)](https://eur-lex.europa.eu/eli/reg/2016/679/oj) — EUR-Lex, Publications Office of the European Union, 2016
17. [10 Jahre Rufnummern-Mitnahme (press release, 1 November 2012)](https://mobil.teltarif.de/presse/2012/pm_011112_10-jahre-portierung.pdf) — teltarif.de Onlineverlag, 2012
18. [1&1 Mobilfunknetz erreicht 25 Prozent der deutschen Haushalte (press release, 17 December 2025)](https://unternehmen.1und1.de/_Resources/Corporate/Persistent/52c7b07e42093160750d5c1986fd685a4b4cd7e0/1-1-mobilfunknetz-erreicht-25-prozent-der-deutschen-haushalte.pdf) — 1&1 AG, 2025
19. [Green light: Telefónica Deutschland receives final clearance for E-Plus acquisition (29 August 2014)](https://www.telefonica.de/news/press-releases-telefonica-germany/2014/08/green-light-telefonica-deutschland-receives-final-clearance-for-e-plus-acquisition.html) — Telefónica Deutschland, 2014
20. [libphonenumber PhoneNumberMetadata.xml (region DE) and carrier prefix data (49.txt)](https://github.com/google/libphonenumber/blob/master/resources/carrier/en/49.txt) — libphonenumber project (Apache License 2.0), 2026

## Frequently asked questions

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

Ten or eleven digits after the country code +49, so eleven or twelve when written nationally with the leading 0. Numbers starting 015 always have eleven digits after +49, for example +49 15XX XXXXXXX. Numbers starting 0160, 0162, 0163 and 017 can have ten or eleven; the operator that holds the block decides.

### What is the Germany country code for WhatsApp and international calls?

+49. Drop the leading 0 of the national number: 0171 XXXXXXX becomes +49 171 XXXXXXX. Don't keep the 0 in brackets when you store it. Germans often write +49 (0)171 …, which is fine for reading, but the E.164 form +49171XXXXXXX is the one to save and send to any platform or API.

### Which network does 015, 016 or 017 belong to?

The block shows the range holder in the Federal Network Agency's list, not the current network. Blocks such as 0151, 0160, 0170, 0171 and 0175 are held by Telekom; 0152, 0162 and 0172 to 0174 by Vodafone; 0157, 0159, 0163 and 0176 to 0179 by Telefónica (O2, including the former E-Plus blocks); and 01555x and 01556x by 1&1. Numbers have been portable since 1 November 2002, so look up the current network per number.

### Why does a regex fail on German phone numbers?

Because German numbers don't have one fixed length. Mobile numbers have ten or eleven digits after +49 depending on the block, area codes have two to five digits, and landline numbers vary because older numbers are shorter and extensions can be added. A pattern such as ^\+491\d{10}$ rejects valid ten-digit 0171 numbers. Use a numbering-plan library such as libphonenumber instead.

### Can a German mobile number keep its digits after changing operator?

Yes. Mobile number portability started on 1 November 2002. Under § 59 of the Telecommunications Act (TKG), a mobile customer can ask to port at any time, without ending the old contract early, and the switch may interrupt service for at most one working day. The end user may not be charged directly for porting.

### Are there fictional German phone numbers for films, tests and examples?

Yes. The Federal Network Agency keeps 'drama numbers' that will never be assigned: 1,000 numbers each in Berlin (030 23125 000–999), Frankfurt (069 90009 000–999), Hamburg (040 66969 000–999), Cologne (0221 4710 000–999) and Munich (089 99998 000–999), plus mobile numbers such as 0171 39200 00–99 and 0176 040690 00–99.

### Do I need consent to send marketing SMS or make sales calls in Germany?

Yes. Under § 7 UWG, advertising by SMS, email or automated call needs the recipient's prior express consent, with a narrow exception for existing customers and similar products. Marketing calls to consumers also need prior express consent, and § 7a UWG requires the caller to document that consent and keep the record for five years.

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

Yes, for numbers you hold with a lawful basis under the GDPR, 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.
