# Italian phone number format: +39, 3xx mobiles, porting and AGCOM rules

> Italian phone number format: +39, 3xx mobiles with 9 or 10 digits, landlines that keep the 0, tested validation code, porting, the RPO and anti-spoofing.

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

![Two +39 number rows: a landline whose kept 0 has a check mark, a mobile starting with 3 with a 9-10 length pill; a crossed-out +39 2; a shield, mast and timeline; an RPO register sheet, clock and two SIM cards.](https://mobilevalidate.com/images/blog/italy-phone-number-format.svg)

*Landlines keep the 0 after +39, mobiles start with 3, and spoofed Italian caller IDs from abroad are blocked.*


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

Italian numbers use the country code +39. A mobile number starts with 3 and has 10 digits after the code, so in E.164 it looks like +39 3XX XXX XXXX; some older mobiles have 9. Landline numbers start with 0, and that 0 stays after +39: a Milan number is +39 02 XXXX XXXX, not +39 2 XXXX XXXX. The prefix names the company that holds the block, 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. Code samples use libphonenumber's own example numbers for Italy, and every other example is masked with X. We read AGCOM's numbering plan and decisions, the Garante's guidance, the laws on Normattiva and the Gazzetta Ufficiale, and the ministry's register of assigned numbers, between 2026-11-02 and 2026-11-03; most are in Italian only. This is a summary, not legal advice.

## What does an Italian phone number look like?

Italy has no trunk prefix. The first digit of the national number tells you the service, and you dial the number the same way at home and from abroad, after `+39`. AGCOM's national numbering plan (Delibera 8/15/CIR, Annex A, Article 2) sorts numbers by that first digit:

| First digit | Used for | Example (masked) |
|---|---|---|
| `0` | Geographic (landline) numbers | `02 XXXX XXXX` (Milan), `06 XXXX XXXX` (Rome) |
| `1` | Short numbers and special services, such as `112` and customer care | `1XX` |
| `3` | Mobile and personal services | `3XX XXX XXXX` |
| `4` | Internal network services; `43X` numbers for SMS, MMS and data services | `43X XX` to `439 XXXXXXX` |
| `5` | Nomadic (VoIP) telephone services, code `55` | `55 XXXX XXXX` |
| `7` | Internet dial-up access and mobile routing codes | — |
| `8` | Toll-free (`800`, `803`), shared cost (`84X`) and premium rate (`89X`) | `800 XXX XXX` |
| `2`, `6`, `9` | Reserved for future use | — |

**Mobile numbers are 10 digits.** The plan gives each mobile operator four-digit codes of the form `3XYZ`, with X from 2 to 9, followed by six subscriber digits, so `3XYZ UUUUUU` (Article 8.3). Article 8.4 adds the exception: in blocks that were given out earlier under three-digit codes, operators may keep using 9-digit numbers, but no new number may have any length other than 10. So `3XX XXX XXX` (9 digits) and `3XX XXX XXXX` (10 digits) can both be real. Codes `37XY` are reserved for numbers of mobile virtual network operators' customers.

**Landline numbers keep their 0.** A geographic number is the district code with its `0`, then the subscriber number, with at most 11 digits in total (Article 7). The ITU's summary of the plan gives a minimum of 6 digits for geographic numbers, and a PBX with direct dial-in may add one more digit (ITU, 2012; plan, Article 7.2).

<!-- country-data:IT: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 | `+39` |
| International call prefix (dialling out) | `00` |
| Trunk prefix (dialling at home) | none |
| Mobile: digits after +39 | 9, 10 |
| Fixed line: digits after +39 | 6–12 |
| Toll-free: digits after +39 | 6, 9 |
| Premium rate: digits after +39 | 6, 8–10 |
| Shared cost: digits after +39 | 6, 9 |
| Personal number: digits after +39 | 9, 10 |
| VoIP: digits after +39 | 10 |
| Voicemail access: digits after +39 | 11, 12 |
| Mobile, national format (masked) | `31X XXX XXXX` |
| Mobile, international (masked) | `+39 31X XXX XXXX` |
| Mobile, E.164 (masked) | `+3931XXXXXXXX` |
| Fixed line, national format (masked) | `02 XXXX XXXX` |
| Fixed line, international (masked) | `+39 02 XXXX XXXX` |
| Fixed line, E.164 (masked) | `+3902XXXXXXXX` |
<!-- country-data:IT:format:end -->

The voicemail row is an Italian detail. Each mobile operator has a three-digit access code in the `3` range that is put in front of the mobile number to reach the mailbox directly, which is why those numbers have 11 or 12 digits (plan, Article 8.7). They are valid numbers, but not a person's phone, so don't accept them as a sign-up number.

Store only the E.164 form: `+39`, then the national number exactly as written at home, with no spaces. That means `+393XXXXXXXXX` for a mobile and `+3902XXXXXXXX` for a Milan landline.

## Why does the 0 stay after +39?

Because Italy made it part of the number in 1998. Under the change Italy notified to the ITU, from 19 June 1998 every national call to a fixed line had to dial the full number with its `0`, local calls included, and international calls changed from `+39 NDC SN` to `+39 0NDC SN`. The old and new formats ran in parallel until 18 December 1998; after that only the new one worked. Mobile numbers didn't change (ITU communication of 12 May 1998).

That creates two common data errors:

- **Dropping the 0.** Forms and CRMs built for other countries strip a leading `0` before adding the country code. `02 XXXX XXXX` then becomes `+39 2XXXXXXXX`, which is not a valid Italian number. In our test below, libphonenumber rejects it.
- **Adding a 0 to a mobile.** Someone who assumes every national number has a trunk `0` writes a mobile as `03XX XXX XXXX`. That isn't a mobile any more, and it can look like a valid landline: `031` is the area code of Como, so libphonenumber accepts `0312 345 6789` as a fixed line. A check for "valid" alone won't catch it; a check for "mobile" will.

The rule also runs the other way. Some people write `+39 (0)2 …` out of habit from Germany or the UK, where the bracketed `0` is dropped from abroad. In Italy it must be dialled, so remove the brackets and keep the digit.

## Which prefixes are mobile numbers, and who holds each?

All mobile numbers start with `3`. For each two-digit block, the generator counted every 9- and 10-digit number that libphonenumber's mobile pattern for `IT` accepts:

<!-- country-data:IT: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 (9, 10-digit numbers) | 3-digit sub-blocks that aren't fully mobile |
|---|---|---|---|
| `31` | `+39 31` | 100% | — |
| `32` | `+39 32` | 100% | — |
| `33` | `+39 33` | 100% | — |
| `34` | `+39 34` | 100% | — |
| `35` | `+39 35` | 100% | — |
| `36` | `+39 36` | 100% | — |
| `37` | `+39 37` | 100% | — |
| `38` | `+39 38` | 100% | — |
| `39` | `+39 39` | 100% | — |
| `43` | `+39 43` | 100% | — |
<!-- country-data:IT:prefixes:end -->

Two rows need a note, because libphonenumber's "mobile" type is wider than "a person's phone":

- **`31` is for specialised mobile services.** The plan reserves `31` numbers for services such as satellite phones and the GSM-R railway radio network, in blocks of 100,000 (Article 8.5). In the ministry's register, `313` is held by the national railway network operator and `311XX` and `319XX` blocks by satellite and business-messaging providers. `30` is reserved for future use, so libphonenumber rejects it.
- **`43` is for SMS and data services.** The plan's `43X` numbers are reserved for services run over SMS, MMS and data, not voice; the 10-digit `439` form is the one libphonenumber types as mobile (Article 19). Don't treat a `43` number as a personal mobile.

### Block holders in the ministry's register

The Ministry of Enterprises and Made in Italy (MIMIT) assigns the numbers and publishes every assigned block. The table below summarises the mobile sheet (`3XYZ`) of the file as archived on 17 September 2026:

| National prefix | Holder in the ministry's register |
|---|---|
| `330`, `331`, `333` to `339`, `360`, `362`, `363`, `366`, `368`, `381`, `3500`, `3501`, `3505` | Telecom Italia (TIM) |
| `320`, `322` to `324`, `327` to `329`, `355`, `373`, `380`, `388` to `393`, `397` | Wind Tre |
| `340` to `349`, `3710`, `377`, `3784` to `3786`, `383` | Vodafone Italia |
| `3513` to `3519`, `3520`, `3522`, `3523` | Iliad Italia |
| `3711`, `3713` to `3718` | PosteMobile |
| `3751`, `3755` to `3759` | Fastweb |
| `3508` to `3512`, `382` | Lycamobile |
| `3211` to `3215` | ENEL Global Services |
| `3532`, `3533` | Digi Italy |
| `3534`, `3535` | COOP Italia |
| `3760` to `3762`, `3791` to `3793`, `3780`, `3712` and others | Smaller providers, such as Plintron Europe, VEI, spusu and Mundio |

Since 31 December 2024, Vodafone Italia has belonged to Swisscom, which is combining it with Fastweb ([Swissinfo, 2025](https://www.swissinfo.ch/eng/multinational-companies/swisscom-completes-takeover-of-vodafone-italia/88666745)). The register still lists the two companies' blocks separately, and porting moves numbers between all networks. So a `34X` number can be on any Italian network today.

For validation, remember that libphonenumber accepts every `32` to `39` block, assigned or not. "Valid" means "possible under the plan", not "in use". The ministry adds blocks a few at a time: Iliad's `3523` and COOP Italia's `3535` are in the September 2026 file but not in the one dated 15 December 2025. Keep your library current.

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

Most tutorials give a pattern such as `^(\+39)?3\d{9}$`. It accepts only 10-digit mobiles, so it rejects every valid 9-digit `3XX XXX XXX` number from the older blocks. Loosening it to `3\d{8,9}` fixes that but lets through 9-digit numbers in blocks that must have 10, such as `31`. Neither tells you anything about landlines, whose length depends on the district code.

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

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

| # | Case | Input (masked) | Shape regex `^(?:\+39\|0039)?[34]\d{8,9}$` | libphonenumber (`IT`) |
|---|---|---|---|---|
| 1 | National (no trunk prefix) | `31X XXX XXXX` | passes | valid, `MOBILE` |
| 2 | International, with spaces | `+39 31X XXX XXXX` | passes | valid, `MOBILE` |
| 3 | International dialling prefix 00 | `0039 31X XXX XXXX` | passes | valid, `MOBILE` |
| 4 | E.164 | `+3931XXXXXXXX` | passes | valid, `MOBILE` |
| 5 | Dashes and brackets | `(31X) XXX-XXXX` | passes | valid, `MOBILE` |
| 6 | One digit short | `31XXXXXXX` | passes | invalid |
| 7 | One digit too many | `31XXXXXXXXX` | fails | invalid |
| 8 | Mobile shape, unused block 30 | `30XXXXXXXX` | passes | invalid |
| 9 | Fixed line | `02 XXXX XXXX` | fails | valid, `FIXED_LINE` |
| 10 | Toll-free range | `800 XXX XXX` | fails | valid, `TOLL_FREE` |
<!-- country-data:IT:tests:end -->

Row 6 is the Italian trap: a `31` number one digit short has a valid length for a `33` or `34` block, so the regex passes it, while libphonenumber knows that `31` numbers need 10 digits. Row 9 is the other one: the landline is a valid Italian number, and the mobile regex rightly rejects it, but a regex that adds a trunk `0` to mobiles would pass mistyped mobiles as landlines.

## How do I validate an Italian number in code?

Use a libphonenumber port with full metadata and the default region `IT`. Keep the type, because a valid Italian number can be a mobile, a landline or a service number, and check the country calling code rather than the region, because the Vatican's `06 698` block shares `+39`.

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

```python title="normalize_it.py"
import phonenumbers
from phonenumbers import PhoneNumberFormat, PhoneNumberType


def normalize_it(raw: str) -> tuple[str, str] | None:
    """(E.164, line type) for a valid Italian number, or None. Keeps the leading 0 of landlines."""
    try:
        n = phonenumbers.parse(raw, "IT")
    except phonenumbers.NumberParseException:
        return None
    if not phonenumbers.is_valid_number(n) or n.country_code != 39:
        return None
    kind = {PhoneNumberType.MOBILE: "mobile", PhoneNumberType.FIXED_LINE: "fixed"}.get(
        phonenumbers.number_type(n), "other")
    region = phonenumbers.region_code_for_number(n)  # "IT", or "VA" for the Vatican's 06 698 block
    return phonenumbers.format_number(n, PhoneNumberFormat.E164), f"{kind} ({region})"


for raw in ["312 345 6789", "+39 312 345 6789", "0039 312 345 6789", "02 1234 5678",
            "+39 02 1234 5678", "+39 2 1234 5678", "0312 345 6789", "06 698 12345", "800 123 456", "312 345 678"]:
    print(f"{raw!r:22} -> {normalize_it(raw)}")
```

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

```js title="normalize-it.mjs"
import { parsePhoneNumberFromString } from "libphonenumber-js/max";

/** "312 …", "+39 …", "0039 …", "02 …" → [E.164, line type] for a valid Italian number, or null. */
export function normalizeIt(raw) {
  const phone = parsePhoneNumberFromString(String(raw), "IT");
  if (!phone?.isValid() || phone.countryCallingCode !== "39") return null;
  const kind = { MOBILE: "mobile", FIXED_LINE: "fixed" }[phone.getType()] ?? "other";
  return [phone.number, `${kind} (${phone.country})`]; // country is "IT", or "VA" for the Vatican's 06 698 block
}

for (const raw of ["312 345 6789", "+39 312 345 6789", "0039 312 345 6789", "02 1234 5678",
  "+39 02 1234 5678", "+39 2 1234 5678", "0312 345 6789", "06 698 12345", "800 123 456", "312 345 678"]) {
  console.log(JSON.stringify(raw).padEnd(22), "->", JSON.stringify(normalizeIt(raw)));
}
```

The inputs are libphonenumber's own example numbers for Italy and the Vatican (mobile `312 345 6789`, fixed line `02 1234 5678`, toll-free `800 123 456`, Vatican `06 698 12345`), plus broken variants of them, not real subscribers. We ran both on 2026-11-03 (Python 3.12 with phonenumbers 9.0.42, Node.js 24 with libphonenumber-js 1.13.13). Python printed:

```text
'312 345 6789'         -> ('+393123456789', 'mobile (IT)')
'+39 312 345 6789'     -> ('+393123456789', 'mobile (IT)')
'0039 312 345 6789'    -> ('+393123456789', 'mobile (IT)')
'02 1234 5678'         -> ('+390212345678', 'fixed (IT)')
'+39 02 1234 5678'     -> ('+390212345678', 'fixed (IT)')
'+39 2 1234 5678'      -> None
'0312 345 6789'        -> ('+3903123456789', 'fixed (IT)')
'06 698 12345'         -> ('+390669812345', 'fixed (VA)')
'800 123 456'          -> ('+39800123456', 'other (IT)')
'312 345 678'          -> None
```

The JavaScript version gave the same answers, written as JSON arrays (`["+393123456789","mobile (IT)"]`) and `null` instead of `None`. What the output shows:

- The landline keeps its `0` in E.164 (`+3902…`), and the same number without the `0` is rejected.
- A mobile written with an extra `0` comes back as a valid **landline** in Como. If you need a mobile, check the type, not only validity.
- The Vatican number is valid with calling code `39` but region `VA`. Code that checks `region == "IT"` would reject it.
- `312 345 678` is rejected because `31` blocks need 10 digits, although 9 digits are fine in some `32` to `39` blocks.

Our [Python](/blog/phone-number-validation-python) and [JavaScript](/blog/phone-number-validation-javascript) guides cover more languages, and our [E.164 guide](/blog/e164-phone-number-format-guide-for-developers) explains the storage format.

## Does number portability change the carrier?

Yes. AGCOM ordered mobile number portability in June 2001 and required it to be working by 30 April 2002, after an initial phase that began in late 2001 (Delibera 12/01/CIR). A network that didn't open all its codes to porting by 1 May 2002 could not take in ported customers until it did, by 1 July 2002 at the latest (Delibera 7/02/CIR). Today the rules are in AGCOM's mobile portability regulation, Delibera 147/11/CIR, Annex 1:

- **Second working day.** Requests the new operator enters by 17:00 go to the old operator the same day, and the cut-over happens on the second working day after the request was entered (Article 2.17).
- **Early morning.** Network databases are updated in windows of at most two hours that end by 08:30, to keep the interruption short (Article 4.5).
- **Compensation for delay.** If porting is late by more than two working days, the customer can ask the new operator for at least EUR 2.50 per working day of delay, counting from the first day, up to EUR 50 (Article 14).
- **Any number of times.** A number can be ported again and again (Article 2.5).

EU law sets the outer limit: porting must be done within one working day of the agreed date, and the service may not be lost for more than one working day ([Directive (EU) 2018/1972, Art. 106](https://eur-lex.europa.eu/eli/dir/2018/1972/oj)).

The Italy row of our MNP atlas:

<!-- country-data:IT: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 |
| Maximum porting time | 1 working day (activation after agreed date) |
| Governing rule | EECC Directive (EU) 2018/1972, Art. 106 |
| Published porting volume | none published |
| Source | [eur-lex.europa.eu](https://eur-lex.europa.eu/eli/dir/2018/1972/oj), [btk.gov.tr](https://www.btk.gov.tr/uploads/pages/slug/mobil-numara-tasinabilirligi-rekabete-ve-tuketicilere-etkileri-ardil-duzenleyici-etki-analizi.pdf) |
| Checked | 2026-09-25 |
<!-- country-data:IT:mnp:end -->

Our [MNP atlas](/blog/mobile-number-portability-atlas) compares Italy with other countries. With four network operators, many virtual operators and the Fastweb and Vodafone merger, the block holder is a weak guess. For routing, pricing or fraud rules, look up the current network per number; our post on [how to check if a number is ported](/blog/how-to-check-if-a-phone-number-is-ported) shows the options.

### Inactive prepaid numbers are recycled

The numbering plan lets operators withdraw a prepaid number after at least 24 months without any commercial contact, with 30 days' notice to the customer. A withdrawn mobile number waits three months before it can go to someone else (plan, Articles 8.9 and 8.10). For a customer list, that means a number that has been silent for two years may already belong to another person. A live network status check before a campaign or a reactivation e-mail catches most of these.

## What are the rules for SMS, calls and caller ID?

These summarise the laws, AGCOM decisions and Garante guidance as we read them on 2026-11-03. Not legal advice; ask counsel how they apply to you.

### Marketing by SMS, WhatsApp and e-mail needs consent (privacy code, Art. 130)

Article 130 of the Italian privacy code (Legislative Decree 196/2003) requires the prior consent of the recipient for marketing by automated calls, and extends that rule to e-mail, fax, MMS, SMS "or other" electronic messages ([Art. 130](https://www.normattiva.it/uri-res/N2Ls?urn:nir:stato:decreto.legislativo:2003-06-30;196~art130)). The Garante's 2013 guidelines on promotional activity and spam spell out what that means in practice ([Garante, 2013](https://garanteprivacy.it/garante/doc.jsp?ID=2542348)):

- **SMS and MMS are treated like e-mail and automated calls:** prior consent is needed (section 2.5).
- **WhatsApp and other messaging apps follow the same rules** for promotional messages; the guidelines name Skype, WhatsApp and Viber (section 6.1).
- **The existing-customer exception covers e-mail only.** A business may e-mail its own customers about similar products without new consent, if they were told and didn't object, but the guidelines limit this to e-mail and exclude SMS (section 2.7; Art. 130(4)).
- **Passing numbers to third parties for their marketing needs its own specific consent,** not a general one, and the notice must name the recipients or their categories (section 2.6.3).
- **Public numbers are not free to use.** Finding a number online or in a public list doesn't replace consent (Garante press release, 2013).

The ePrivacy Directive is the EU basis for these rules ([Directive 2002/58/EC](https://eur-lex.europa.eu/eli/dir/2002/58/oj), Art. 13).

### Calls by a person: the opposition register (RPO)

For telephone marketing by a live agent, Italy uses an opt-out register, the Registro pubblico delle opposizioni (RPO). Law 5/2018 lets people register all their fixed and mobile numbers, and registration revokes every earlier marketing consent, except consents given within a contract that is running or ended less than 30 days ago ([Law 5/2018](https://www.normattiva.it/uri-res/N2Ls?urn:nir:stato:legge:2018-01-11;5), Art. 1(2) and 1(5)). Operators must check their lists against the register every month and in any case before each campaign (Art. 1(12)).

The implementing regulation, Presidential Decree 26/2022, was published in the Gazzetta Ufficiale no. 74 on 29 March 2022 ([DPR 26/2022](https://www.gazzettaufficiale.it/eli/id/2022/03/29/22G00034/sg)). The extended register, open for the first time to mobile numbers and to numbers not in public directories, went live on 27 July 2022 ([TuttoAndroid, 2022](https://www.tuttoandroid.net/news/2022/07/27/registro-pubblico-opposizioni-cellulari-attivo-come-funziona-956776/)). The Fondazione Ugo Bordoni runs it for MIMIT ([RPO](https://registrodelleopposizioni.it/)).

The RPO covers calls by a person and paper mail. It doesn't make SMS or automated calls lawful: those still need consent under Article 130.

### The telemarketing code of conduct

The Garante approved a code of conduct for telemarketing and teleselling on 9 March 2023, on condition that a monitoring body was accredited first ([Garante, provvedimento 70/2023](https://garanteprivacy.it/garante/doc.jsp?ID=9868813)). It approved the final text and accredited the body on 7 March 2024; the code took full effect after publication in the Gazzetta Ufficiale no. 73 of 27 March 2024 ([Garante, provvedimento 148/2024](https://garanteprivacy.it/garante/doc.jsp?ID=9993808)). Joining is voluntary, but the Garante can weigh membership when it sets fines. Among other things, members agree to ([code text](https://registrodelleopposizioni.it/wp-content/uploads/2025/06/Codice-di-condotta-in-materia-dei-telemarketing-e-teleselling-1.pdf)):

- **Check lists against the RPO before every campaign,** keep a record of the result, and check bought lists against their own block list (Article 5).
- **Call only within set hours:** not before 9:00 or after 20:00 on weekdays, not before 10:00 or after 19:00 on Saturdays and days before holidays, and never on Sundays or holidays, unless the person asked to be called (Article 7).
- **Forward objections within 24 hours** and report opt-outs to the client within 15 days of the campaign's end (Article 7).
- **Use caller IDs that can't be cloned easily,** such as a brand alias or a number used only for the client's outbound calls (Article 8.2).

### Calls from abroad with an Italian caller ID are blocked

AGCOM's Delibera 106/25/CONS of 30 April 2025 made the carriers that bring international voice calls into Italy block calls that look spoofed ([technical specification, Annex A](https://www.agcom.it/sites/default/files/media/allegato/2025/Allegato%20A%20alla%20delibera%20106-25-CONS.pdf)):

- **Italian landline caller ID from abroad:** blocked, from 19 August 2025.
- **Italian mobile caller ID (`+393…`) from abroad:** blocked unless the mobile user is roaming abroad. The carrier asks the user's mobile operator, which answers only "block" or "no block". This phase started on 19 November 2025.
- **Numbers that don't follow the ITU numbering rules** are blocked too.

AGCOM confirmed the 19 November date and widened the rule to specialised mobile and machine-to-machine numbers in Delibera 271/25/CONS of 6 November 2025 ([AGCOM, 2025](https://www.agcom.it/sites/default/files/provvedimenti/delibera/2025/Delibera%20271-25-CONS.pdf)); the mobile phase did start that day ([MondoMobileWeb, 2025](https://www.mondomobileweb.it/309421-telemarketing-in-vigore-anche-il-blocco-delle-chiamate-dallestero-con-numeri-mobili-falsi/)).

In April 2026 AGCOM went further, for calls and messages that start in Italy. Delibera 21/26/CIR makes the provider that serves the caller responsible for the caller ID: when a customer sets its own caller ID, the provider must check that the number belongs to that line and customer, and block the call or message if it doesn't. It also lists the only number types that may be shown as caller ID, including registered SMS aliases ([AGCOM, 2026](https://www.agcom.it/sites/default/files/provvedimenti/delibera/2026/Delibera%2021-26-CIR.pdf)).

For a business, the practical result: a voice OTP or callback placed from a platform abroad with an Italian number as caller ID will not arrive. Use a caller ID that the platform really holds, and offer SMS or another channel as a fallback.

### Alphanumeric sender IDs (SMS alias)

Italian business SMS often show a brand name instead of a number. AGCOM's regulation on these "SMS alias" senders, Delibera 12/23/CIR of 3 May 2023, replaced a trial that had run since 2013 ([AGCOM, 2023](https://www.agcom.it/sites/default/files/migration/delibera/Delibera%2012-23-CIR.pdf)). According to AGCOM's registration guide, only authorised electronic communications providers listed in the operators' register can register aliases in the Alias Register, and only registered providers may send with them; a business that wants a brand sender goes through such a provider ([AGCOM alias guide](https://alias.agcom.it/docs/guida_registrazione_alias.pdf)). Ask your SMS provider to confirm that your alias is registered for you.

### 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 Italian mobile. We didn't find a primary source that measures messaging-app use in Italy 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 an Italian 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, and in Italy marketing on WhatsApp needs consent either way:

| 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 the Italian way (`3XX XXX XXXX`, `02 XXXX XXXX` or `+39 …`) with `default_country=IT`:

```bash title="Bulk WhatsApp and live network 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,hlr -F default_country=IT
```

Send the same body to `POST /v1/jobs/estimate` first: it is free and shows the maximum cost before anything runs.

## What changed recently?

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

<!-- country-data:IT: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) | 6 |
| Original-carrier prefix data | 4 |
| Short numbers | 2 |
| Alternate formatting | 1 |
| Geocoding (area names) | 1 |
| All | 14 |

Latest numbering-plan updates for `IT`: 2025-09-11 (v9.0.14), 2024-01-10 (v8.13.28), 2022-06-09 (v8.12.50), 2021-11-11 (v8.12.37), 2019-07-15 (v8.10.15).
<!-- country-data:IT:changes:end -->

Italy's numbering-plan metadata changes rarely: six releases since 2019, the latest in September 2025. The plan itself is stable, and the ministry adds mobile blocks a few at a time, such as Iliad's `3523` in 2026. The bigger changes are in the rules:

- **19 August 2025:** foreign calls with an Italian landline caller ID blocked (Delibera 106/25/CONS).
- **19 November 2025:** foreign calls with an Italian mobile caller ID blocked unless the user is roaming (Delibera 106/25/CONS, confirmed by 271/25/CONS).
- **31 December 2024:** Swisscom completed its takeover of Vodafone Italia, to be combined with Fastweb.
- **14 April 2026:** Delibera 21/26/CIR on caller-ID checks for calls and messages that start in Italy. It also creates a new free customer-care range starting with `2` (`2XY` and `2WZK`) for companies that are not telecom providers.
- **27 March 2024:** the telemarketing code of conduct published in the Gazzetta Ufficiale, with an accredited monitoring body.

## What can MobileValidate check for Italian numbers?

Generated from our public catalog:

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

Catalog data as of 2026-11-03.

| Check | Accepts Italy 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 Italy 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`](https://api.mobilevalidate.com/v1/services).
<!-- country-data:IT:coverage:end -->

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

For Italian numbers, the useful pair is a [live network status (HLR) check](/services/hlr-lookup), which tells you whether a mobile is reachable now, whether it has been ported and which network serves it, and an [MNP lookup](/services/mnp-lookup), which answers ported or not ported with the current network code. Because inactive prepaid numbers are withdrawn and reassigned after a quarantine, a reachability check before a campaign also flags numbers that may have changed hands. Both answer `unknown` when there is no conclusive result, and `unknown` is free.

How to start without paying:

- **Free test key.** [Get a test key](/get-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](/docs/test-mode)).
- **Five real checks.** Every live account can run 5 phone numbers and 5 e-mail addresses through the real-time checks for free on the dashboard's **Try it** page.
- **Free estimate.** `POST /v1/jobs/estimate` shows the maximum cost of a bulk file before anything runs.

To get a live account, [request access](/request-access). Viber and Zalo checks are bulk-only for now, as the asterisks in the table show. Prices are on the [pricing](/pricing) page, which also lists the top-up bonuses on larger balances.

Here is a small flow for a customer list. One real-time lookup returns live network status, porting 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 test numbers, so the example uses them; with a live key, pass the output of `normalize_it()`.

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

import requests  # pip install requests

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


def reach(numbers: list[str]) -> dict[str, dict]:
    """Live network status, porting 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": ["hlr", "whatsapp"], "wait": 5})
    r.raise_for_status()
    out = {}
    for row in r.json()["results"]:
        hlr, wa = row["checks"]["number.hlr"], row["checks"]["whatsapp.registered"]
        attrs = (hlr["attributes"] or {}) if hlr["status"] == "completed" else {}
        out[row["e164"]] = {
            "status": attrs.get("status"),
            "ported": attrs.get("ported"),
            "network": attrs.get("network"),
            "whatsapp": wa["registered"] if wa["status"] == "completed" else None,
        }
    return out


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

What it printed with the sandbox key on 2026-11-03:

```text
+447700900001 {'status': 'reachable', 'ported': False, 'network': 'Test Mobile', 'whatsapp': True}
+447700900002 {'status': 'unreachable', 'ported': False, 'network': 'Test Mobile', 'whatsapp': False}
+447700900005 {'status': None, 'ported': None, 'network': None, 'whatsapp': 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) and [carrier lookup](/services/carrier-lookup) for the fields.

## What are the key takeaways?

- Italian mobiles are `+39` plus 10 digits starting with `3`; some older ones have 9. Landlines start with `0`, and the `0` stays after `+39`. Store the E.164 form.
- Don't validate with a fixed-length regex: mobile length depends on the block, `31` and `43` numbers are special services, and a mobile with an extra `0` can pass as a landline.
- The ministry's register names the block holder (mainly TIM, Wind Tre, Vodafone Italia and Iliad), not the current network: porting has run since 2002 and the cut-over takes two working days.
- Marketing SMS, automated calls and WhatsApp messages need prior consent; calls by a person need an RPO check, monthly and before each campaign.
- Since November 2025, calls from abroad that show an Italian number are blocked unless the mobile user is roaming. Use a caller ID you really hold.

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

## Sources

1. [Delibera n. 8/15/CIR, Allegato A: Piano di numerazione nel settore delle telecomunicazioni e disciplina attuativa (national numbering plan)](https://www.agcom.it/sites/default/files/migration/attachment/Allegato%2020-2-2015.pdf) — AGCOM (Autorità per le Garanzie nelle Comunicazioni), 2015
2. [Delibera n. 21/26/CIR: update of the numbering plan on the identification of the originator of a communication (14 April 2026)](https://www.agcom.it/sites/default/files/provvedimenti/delibera/2026/Delibera%2021-26-CIR.pdf) — AGCOM, 2026
3. [Italy (country code +39): communication of 12 May 1998, new numbering plan from 19 June 1998](https://www.itu.int/itudoc/itu-t/number/i/ita/76484_ww9.doc) — ITU-T (International Telecommunication Union), 1998
4. [Italy (country code +39): national E.164 numbering plan, communication of 25 June 2012](https://www.itu.int/dms_pub/itu-t/oth/02/02/T020200006B0001MSWE.docx) — ITU-T (International Telecommunication Union), 2012
5. [Risorse di numerazione: File assegnati (assigned numbering resources, sheet 3XYZ), archived copy of 17 September 2026; compared with the file dated 15 December 2025](https://web.archive.org/web/20260917232911/https://www.mimit.gov.it/images/stories/digitale/numerazione/File_assegnati_2.xlsx) — Ministero delle Imprese e del Made in Italy (MIMIT), via Internet Archive, 2026
6. [Delibera n. 147/11/CIR, Allegato 1: Regolamento riguardante la portabilità dei numeri per i servizi di comunicazioni mobili e personali](https://www.agcom.it/sites/default/files/migration/attachment/Allegato%2030-11-2011.pdf) — AGCOM, 2011
7. [Delibera n. 7/02/CIR: mobile number portability, initial phase and deadlines (28 March 2002)](https://www.agcom.it/sites/default/files/migration/delibera/Delibera%207-02-CIR.pdf) — AGCOM, 2002
8. [Delibera n. 12/01/CIR: provisions on number portability between mobile networks (June 2001)](https://www.agcom.it/sites/default/files/migration/delibera/Delibera%2012-01-CIR.pdf) — AGCOM, 2001
9. [Allegato A alla delibera n. 106/25/CONS: technical specifications for blocking spoofed calls](https://www.agcom.it/sites/default/files/media/allegato/2025/Allegato%20A%20alla%20delibera%20106-25-CONS.pdf) — AGCOM, 2025
10. [Delibera n. 271/25/CONS: implementing rules for the caller-ID measures of delibera 106/25/CONS (6 November 2025)](https://www.agcom.it/sites/default/files/provvedimenti/delibera/2025/Delibera%20271-25-CONS.pdf) — AGCOM, 2025
11. [Telemarketing, in vigore anche il blocco delle chiamate dall'estero con numeri mobili falsi (19 November 2025)](https://www.mondomobileweb.it/309421-telemarketing-in-vigore-anche-il-blocco-delle-chiamate-dallestero-con-numeri-mobili-falsi/) — MondoMobileWeb, 2025
12. [Delibera n. 12/23/CIR: Regolamento sull'utilizzo dei caratteri alfanumerici che identificano il soggetto mittente (SMS Alias)](https://www.agcom.it/sites/default/files/migration/delibera/Delibera%2012-23-CIR.pdf) — AGCOM, 2023
13. [Guida alla registrazione al Registro degli Alias (version 2.0)](https://alias.agcom.it/docs/guida_registrazione_alias.pdf) — AGCOM, 2024
14. [Legge 11 gennaio 2018, n. 5: registration of mobile numbers in the opposition register and consent rules](https://www.normattiva.it/uri-res/N2Ls?urn:nir:stato:legge:2018-01-11;5) — Normattiva (Istituto Poligrafico e Zecca dello Stato), 2018
15. [D.P.R. 27 gennaio 2022, n. 26: regolamento del Registro pubblico delle opposizioni (Gazzetta Ufficiale n. 74, 29 March 2022)](https://www.gazzettaufficiale.it/eli/id/2022/03/29/22G00034/sg) — Gazzetta Ufficiale della Repubblica Italiana, 2022
16. [Registro pubblico delle opposizioni (official site)](https://registrodelleopposizioni.it/) — Fondazione Ugo Bordoni for MIMIT, 2026
17. [Registro pubblico delle opposizioni per cellulari attivo: come funziona (27 July 2022)](https://www.tuttoandroid.net/news/2022/07/27/registro-pubblico-opposizioni-cellulari-attivo-come-funziona-956776/) — TuttoAndroid, 2022
18. [Decreto legislativo 30 giugno 2003, n. 196 (Codice in materia di protezione dei dati personali), art. 130 Comunicazioni indesiderate](https://www.normattiva.it/uri-res/N2Ls?urn:nir:stato:decreto.legislativo:2003-06-30;196~art130) — Normattiva (Istituto Poligrafico e Zecca dello Stato), 2018
19. [Linee guida in materia di attività promozionale e contrasto allo spam (4 July 2013, doc. web 2542348)](https://garanteprivacy.it/garante/doc.jsp?ID=2542348) — Garante per la protezione dei dati personali, 2013
20. [NO to Spam, YES to Consumer-Friendly Marketing (press release, July 2013)](https://garanteprivacy.it/garante/doc.jsp?ID=2554512) — Garante per la protezione dei dati personali, 2013
21. [Provvedimento n. 70 del 9 marzo 2023: approval of the code of conduct for telemarketing and teleselling](https://garanteprivacy.it/garante/doc.jsp?ID=9868813) — Garante per la protezione dei dati personali, 2023
22. [Provvedimento n. 148 del 7 marzo 2024: final approval of the telemarketing code of conduct and accreditation of the monitoring body](https://garanteprivacy.it/garante/doc.jsp?ID=9993808) — Garante per la protezione dei dati personali, 2024
23. [Codice di condotta per le attività di telemarketing e teleselling (text)](https://registrodelleopposizioni.it/wp-content/uploads/2025/06/Codice-di-condotta-in-materia-dei-telemarketing-e-teleselling-1.pdf) — Registro pubblico delle opposizioni (Fondazione Ugo Bordoni), 2025
24. [Directive (EU) 2018/1972 establishing the European Electronic Communications Code, Art. 106 (number portability)](https://eur-lex.europa.eu/eli/dir/2018/1972/oj) — EUR-Lex, Publications Office of the European Union, 2018
25. [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
26. [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
27. [Swisscom completes takeover of Vodafone Italia (2 January 2025)](https://www.swissinfo.ch/eng/multinational-companies/swisscom-completes-takeover-of-vodafone-italia/88666745) — Swissinfo (SWI swissinfo.ch), 2025
28. [libphonenumber PhoneNumberMetadata.xml (region IT) and carrier prefix data (39.txt)](https://github.com/google/libphonenumber/blob/master/resources/carrier/en/39.txt) — libphonenumber project (Apache License 2.0), 2026

## Frequently asked questions

### How many digits is an Italian phone number?

Mobile numbers have 10 digits after +39 and start with 3, for example +39 3XX XXX XXXX. Some older mobile numbers have 9 digits, because AGCOM's numbering plan lets operators keep using them in blocks first given out under three-digit codes; every new mobile number has 10. Landline numbers start with 0 and have 6 to 11 digits, and the 0 is part of the number.

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

+39. For a mobile, write +39 and then the number as Italians write it: 3XX XXX XXXX becomes +39 3XX XXX XXXX. For a landline, keep the leading 0: Milan's 02 XXXX XXXX becomes +39 02 XXXX XXXX, not +39 2 XXXX XXXX. Store the E.164 form, such as +393XXXXXXXXX or +3902XXXXXXXX, with no spaces.

### Do you drop the 0 when calling an Italian landline from abroad?

No. Since 19 June 1998, international calls to Italian fixed lines dial +39 followed by the full number with its 0, so +39 06 … for Rome and +39 02 … for Milan. The old format without the 0 stopped working after a parallel-running period that ended on 18 December 1998. Italy is one of the few countries where the 0 stays after the country code.

### Which network does a 3xx prefix belong to?

The prefix names the company that holds the block in the ministry's register, not the current network. As of the September 2026 file, 33x blocks are held by TIM, 34x by Vodafone Italia, 32x and 38x to 39x mostly by Wind Tre, and 351x to 352x mostly by Iliad. Numbers have been portable since 2002, so look up the current network per number.

### How long does it take to port a mobile number in Italy?

Under AGCOM's mobile number portability rules (Delibera 147/11/CIR), the switch happens in the early morning of the second working day after the new operator enters the request, in a window of at most two hours ending by 08:30. If it is late by more than two working days, the customer can claim at least EUR 2.50 per working day of delay, up to EUR 50.

### Do I need consent to send marketing SMS or WhatsApp messages in Italy?

Yes. Article 130 of the Italian privacy code requires prior consent for marketing by SMS, MMS, e-mail, fax and automated calls, and the data protection authority (Garante) applies the same rule to WhatsApp and other messaging apps. The exception for existing customers covers e-mail only, not SMS. Marketing calls by a person need a check of the opposition register (RPO), monthly and before every campaign.

### Why are calls with an Italian number from abroad blocked?

Since 19 August 2025, carriers that bring international calls into Italy must block calls that show an Italian landline number as caller ID, and since 19 November 2025 calls that show an Italian mobile number unless that mobile user is roaming abroad. AGCOM ordered this in Delibera 106/25/CONS to stop caller-ID spoofing by foreign call centres.

### Can I check whether Italian 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.
