Guides

Polish phone number format: +48, mobile prefixes, validation and messaging rules

Polish phone number format: +48 plus 9 digits, no trunk 0, 13 mobile prefixes, tested validation code, 1-day porting, anti-spoofing law and SMS consent.

By Published 19 min readHow we research and fact-check

On this page

Polish phone numbers use the country code +48 and always have nine digits, with no trunk 0. A mobile number starts with one of 13 two-digit prefixes (45, 50, 51, 53, 57, 60, 66, 69, 72, 73, 78, 79 or 88), so 512 XXX XXX in Poland is +48 512 XXX XXX from abroad (E.164: +48512XXXXXX). Landlines start with a two-digit area code such as 22 for Warsaw, written 22 XXX XX XX. The prefix shows which operator received the block, but numbers are portable, so it doesn't prove the current network.

This guide is part of our phone numbers by country series. The tables come from libphonenumber's metadata, the national numbering plan of December 2024, the allocation tables published by UKE (Urząd Komunikacji Elektronicznej, the Office of Electronic Communications), our MNP atlas and our public catalog. Example numbers are masked with X or are libphonenumber's own example numbers; the Polish plan reserves no range for fiction. We read the laws in the Sejm's legal database, UKE's tables and the guidance of CERT Polska and UODO on 2026-11-07; most are in Polish only. This is a summary, not legal advice.

What does a Polish phone number look like?

Every ordinary Polish number has nine digits, and you dial all nine everywhere in the country. The plan sets the country code 48 and the international prefix 00, with + allowed from mobiles, and it defines no trunk prefix (numbering plan, Dz.U. 2024 poz. 1862, annex § 3). Mobiles are usually written in three groups of three (512 345 678), landlines as area code plus seven digits (22 123 45 67). The first two digits tell you the kind of number:

First digitsInternationalType
12 … 95 (two-digit area codes)+48 12 … +48 95Landline, for example 12 Kraków, 22 Warsaw, 32 Katowice, 42 Łódź, 58 Gdańsk, 61 Poznań, 71 Wrocław, 81 Lublin, 91 Szczecin
45, 50, 51, 53, 57, 60, 66, 69, 72, 73, 78, 79, 88+48 45 … +48 88Mobile
39+48 39Services using Internet Protocol (VoIP)
64+48 64Radio paging
21+48 21Machine-to-machine (M2M)
70, 80+48 70, +48 80Intelligent-network services: freephone, shared cost, premium rate
26, 47+48 26, +48 47Networks of the defence and interior ministries

From abroad, put +48 or 0048 in front of the nine digits and change nothing else.

ItemValue
Country calling code+48
International call prefix (dialling out)00
Trunk prefix (dialling at home)none
Mobile: digits after +489
Fixed line: digits after +487, 9
Toll-free: digits after +489, 10
Premium rate: digits after +489
Shared cost: digits after +489
VoIP: digits after +489
Pager: digits after +486–9
Universal access (UAN): digits after +489
Mobile, national format (masked)51X XXX XXX
Mobile, international (masked)+48 51X XXX XXX
Mobile, E.164 (masked)+4851XXXXXXX
Fixed line, national format (masked)12 XXX XX XX
Fixed line, international (masked)+48 12 XXX XX XX
Fixed line, E.164 (masked)+4812XXXXXXX

"Trunk prefix: none" is the key fact. Many forms ask people to "drop the leading 0", and some users add one out of habit from other countries. In Poland a 0 in front makes the number ten digits long, and validation must fail. The other lengths in the table are special cases in libphonenumber: some short fixed-line and paging numbers and ten-digit freephone numbers. Every mobile has exactly nine digits.

A round hub shows +48, nine digit dots in three groups and a crossed-out 0, linked to four cards: a grid of lit mobile blocks, a CLI shield, an 8080 SMS report and a 1 DAY porting swap.A round hub shows +48, nine digit dots in three groups and a crossed-out 0, linked to four cards: a grid of lit mobile blocks, a CLI shield, an 8080 SMS report and a 1 DAY porting swap.
Polish numbers are nine digits with no trunk 0; 13 mobile blocks, anti-spoofing rules, 8080 smishing reports and 1-day porting.

Which prefixes are mobile numbers?

The numbering plan lists 13 mobile ranges under "sieci ruchome" (mobile networks): 45, 50, 51, 53, 57, 60, 66, 69, 72, 73, 78, 79 and 88. UKE's mobile allocation table confirms that 45 and 57 are in use too, with blocks held by Orange, Play (P4), Canal+ and several virtual operators (UKE numbering tables). For each two-digit block, the generator counted every nine-digit number that libphonenumber's mobile pattern for PL accepts:

National prefixInternationalShare of the block that is mobile (9-digit numbers)3-digit sub-blocks that aren't fully mobile
21+48 2124.0%not mobile: 210, 214–219; partly mobile: 211 (50.0%), 213 (90.0%)
45+48 45100%—
50+48 50100%—
51+48 51100%—
53+48 53100%—
57+48 57100%—
60+48 60100%—
66+48 66100%—
69+48 69100%—
72+48 72100%—
73+48 73100%—
78+48 78100%—
79+48 79100%—
88+48 88100%—

The 21 row is a library quirk, not a new mobile range. The plan defines 21 as the range for M2M communication (§ 10), and UKE's M2M table shows 210 to 219 allocated as M2M blocks to the mobile operators and, since March 2026, also to a gas distribution company and a power utility's IT arm (blocks in 211 and 216). That is around the time libphonenumber typed parts of 21 as mobile (versions 9.0.24 and 9.0.26). Those are meters and devices, not people, so the code below drops them.

Which operator holds a mobile block?

Poland has four mobile networks: Orange Polska, Play (P4), Plus (Polkomtel) and T-Mobile Polska, plus virtual operators on their networks. UKE allocates blocks of numbers to each one and publishes the allocation tables with a CSV export (UKE numbering tables). The tables answer the question "who received this block", but they don't follow porting and there is no per-number lookup.

What are 70x and 80x numbers?

They are intelligent-network numbers. UKE's table of these ranges gives the details:

RangeUse
800Freephone
801Shared cost (split charge)
804Universal number (UAN)
806Virtual private networks
808Virtual calling cards
700, 701, 703, 708Premium rate
704Pay-per-call
707Televoting

Short numbers sit outside the nine-digit plan: 112 for emergencies, 997, 998 and 999 for police, fire and ambulance, 116xxx harmonised European services, 118xyz directory enquiries and five-digit 19xyz numbers such as 19115. None of them should be accepted as a personal sign-up number.

How do I validate a Polish number in code?

Use a libphonenumber port with full metadata and the default region PL, keep only numbers typed as mobile, and drop the 21 M2M range.

Python (pip install phonenumbers):

Python
import phonenumbers
from phonenumbers import PhoneNumberType


def normalize_pl(raw: str) -> str | None:
    """E.164 for a Polish mobile number, or None. Poland has no trunk 0; M2M range 21 is dropped."""
    try:
        n = phonenumbers.parse(raw, "PL")
    except phonenumbers.NumberParseException:
        return None
    if (not phonenumbers.is_valid_number(n) or phonenumbers.region_code_for_number(n) != "PL"
            or phonenumbers.number_type(n) != PhoneNumberType.MOBILE
            or phonenumbers.national_significant_number(n).startswith("21")):
        return None
    return phonenumbers.format_number(n, phonenumbers.PhoneNumberFormat.E164)


for raw in ["512 345 678", "512-345-678", "+48 512 345 678", "0048 512 345 678",
            "0512 345 678", "641 234 567", "12 345 67 89", "391 234 567"]:
    print(f"{raw!r:22} -> {normalize_pl(raw)}")

JavaScript (npm install libphonenumber-js):

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

/** "512 …", "+48 …", "0048 …" → E.164 for a Polish mobile number, or null.
 *  Numbers in the M2M range 21 are dropped. */
export function normalizePl(raw) {
  const phone = parsePhoneNumberFromString(String(raw), "PL");
  return phone?.isValid() && phone.country === "PL" && phone.getType() === "MOBILE"
    && !phone.nationalNumber.startsWith("21") ? phone.number : null;
}

for (const raw of ["512 345 678", "512-345-678", "+48 512 345 678", "0048 512 345 678",
                   "0512 345 678", "641 234 567", "12 345 67 89", "391 234 567"]) {
  console.log(JSON.stringify(raw).padEnd(22), "->", normalizePl(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 PL (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:

Text
'512 345 678'          -> +48512345678
'512-345-678'          -> +48512345678
'+48 512 345 678'      -> +48512345678
'0048 512 345 678'     -> +48512345678
'0512 345 678'         -> None
'641 234 567'          -> None
'12 345 67 89'         -> None
'391 234 567'          -> None

The fifth input is the Polish trap: the same mobile with a habitual 0 in front is ten digits and rejected, which is correct, because Poland has no trunk prefix. If many of your users type it, strip a single leading 0 from ten-digit inputs before parsing, and log how often you do it. The pager (64), the Kraków landline and the VoIP number (39) are valid but not mobile, so they are dropped.

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:

#CaseInput (masked)Shape regex ^(?:\+48|0048)?[24-8]\d{8}$libphonenumber (PL)
1National (no trunk prefix)51X XXX XXXpassesvalid, MOBILE
2International, with spaces+48 51X XXX XXXpassesvalid, MOBILE
3International dialling prefix 000048 51X XXX XXXpassesvalid, MOBILE
4E.164+4851XXXXXXXpassesvalid, MOBILE
5Dashes and brackets(51X) XXX-XXXpassesvalid, MOBILE
6One digit short51XXXXXXfailsinvalid
7One digit too many51XXXXXXXXfailsinvalid
8Mobile shape, unused block 2020XXXXXXXpassesinvalid
9Fixed line12 XXX XX XXfailsvalid, FIXED_LINE
10Pager range64X XXX XXXpassesvalid, PAGER

The regex accepts any nine digits starting 2 or 4 to 8, so it passes the unused 20 range (row 8) and the 64 paging range (row 10), and it also passes landlines such as 22 and 58 numbers. A list of the 13 mobile prefixes is better, ^(?:\+48|0048)?(?:45|5[0137]|6[069]|7[2389]|88)\d{7}$, but it goes stale whenever UKE opens a range; 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 Polish numbering plan has no block reserved for films or examples. Use libphonenumber's example numbers (512 345 678 for a mobile, 12 345 67 89 for a landline) in parser unit tests, mask the rest with X, and never use a real customer's number. For lookups, a sandbox or test key is the safe way to test.

Does number portability change the carrier?

Yes. Polish subscribers keep their number when they change operator. The rules are in the Electronic Communications Law (Prawo komunikacji elektronicznej, PKE) of 12 July 2024, in force since 10 November 2024 (PKE, Dz.U. 2024 poz. 1221):

  • One working day. The number must be ported no later than one working day after the start date agreed with the new provider (art. 325(6)).
  • Within the same kind of network. A geographic number can be ported within its area, a non-geographic number anywhere in Poland, but not between fixed and mobile networks (art. 325(1) and (3)).
  • After the contract ends. The subscriber keeps the right for one month after the contract ends (art. 325(2)).
  • Compensation. For each day of delay, the subscriber is owed a quarter of the average monthly charges, or of the average prepaid top-ups (art. 326).
  • Central database. The President of UKE runs the system used for porting and for locating emergency callers, PLI CBD (art. 337(3)). UKE announced a central database of ported numbers in January 2007 (UKE archive).

Porting is common. In the third quarter of 2026, 425,608 mobile numbers and 55,364 fixed numbers were ported. T-Mobile (+26,541) and Orange (+8,637) gained the most numbers on balance, while Plus (−50,935) and Play (−10,782) lost numbers (UKE, 7 October 2026). The Poland row of our MNP atlas:

ItemValue
Mobile number portabilityYes
Mobile porting since2006
Maximum porting time1 working day (activation after agreed date)
Governing rulePrawo komunikacji elektronicznej art. 325(6), Dz.U. 2024 poz. 1221
Published porting volumequarterly (Q3 2026): 425,608 mobile numbers ported (2026)
Sourceeur-lex.europa.eu, uke.gov.pl
Checked2026-11-07

The atlas cites the European Electronic Communications Code (Art. 106), which the PKE implements; the Polish rule is article 325 PKE. It gives 2006 as the launch year; we didn't find a primary source with the exact date. Our MNP atlas compares Poland with other countries. With more than 1.5 million mobile ports a year at the current rate, a prefix-to-operator table is a poor guess for SMS routing, pricing or fraud rules: look up the current network per number.

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

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

The Act on combating abuse in electronic communications (2023)

The Act of 28 July 2023 on combating abuse in electronic communications (ustawa o zwalczaniu nadużyć w komunikacji elektronicznej) came into force on 25 September 2023 (Dz.U. 2023 poz. 1703; consolidated text Dz.U. 2024 poz. 1803). It defines smishing (an SMS in which the sender pretends to be someone else to get the recipient to share data, pay, open a website, call or install software) and CLI spoofing (using another person's or organisation's number as caller ID without the right to do so) in article 3, and gives operators duties against both:

  • Report suspicious SMS to 8080. CSIRT NASK, the national security incident team, receives reports at the short number 8080, and operators must make it free (art. 5).
  • Pattern-based SMS blocking. CSIRT NASK sends operators patterns of smishing messages, and operators must block matching SMS promptly (arts. 4 and 6). The information-exchange system started in January 2024, and operators had to block matching messages from 25 March 2024 (Ministry of Digital Affairs, 16 January 2024). A sender whose messages are blocked can object to the President of UKE (arts. 7 and 8).
  • Spoofed calls are blocked. To prevent CLI spoofing, an operator blocks the voice call or hides the caller's number from the person called (art. 16).
  • Receive-only numbers. The President of UKE keeps a public list of numbers used only to receive calls, on application by banks, credit unions, insurers, public bodies and others (art. 17). A call that shows one of those numbers as caller ID is a sign of spoofing.
  • Warning list of websites. CSIRT NASK keeps a list of misleading domains used for fraud (arts. 20 to 22). CERT Polska has run this warning list with the mobile operators since March 2020 (CERT Polska).

Protected SMS sender names (public bodies)

An alphanumeric SMS sender name is a "nadpis" in the Act. CSIRT NASK keeps a list of sender names reserved for public bodies (wykaz nadpisów podmiotów publicznych), including variants that could mislead recipients (art. 10). Operators block an SMS that uses a listed name but wasn't sent by an SMS integrator on UKE's list of integrators for public bodies, and any SMS using a listed variant (arts. 13 and 14). Only public bodies may use sender names ending in #RP (art. 12). A business whose own name or trademark clashes with a listed name can ask the President of UKE to remove it (art. 11). Public bodies reserve their names through CERT Polska's form.

The list covers public bodies only. There is no general register of company sender names in the Act, so a bank or shop protects its sender name through its SMS provider. If your alphanumeric sender resembles an authority's name, expect it to be blocked.

Article 398(1) of the PKE bans the use of automated calling systems and telecom terminal equipment, "in particular" through interpersonal communication services such as messaging apps, to send commercial information, including direct marketing, to a subscriber or end user who has not consented beforehand (PKE):

  • Calls, SMS and apps alike. A sales call from a person on a phone uses terminal equipment, so it needs prior consent too, like an SMS or a WhatsApp message.
  • No business exception. The rule protects every subscriber and end user, not only consumers, so B2B campaigns need consent as well.
  • Not at the recipient's cost (art. 398(3)), and a breach is an act of unfair competition (art. 398(4)).
  • GDPR-style consent. Consent follows the data-protection rules: freely given, specific, informed and unambiguous (art. 400; GDPR Art. 4(11)).

The PKE replaced the older rule for e-mail: the act that introduced it repealed article 10 of the Act on providing services by electronic means (Dz.U. 2024 poz. 1222, art. 26), so marketing e-mail now falls under article 398 as well. UODO, the Polish data protection authority, reminds businesses that telephone marketing, unlike direct marketing in general, needs prior consent under telecoms law, whatever GDPR basis they rely on for the data (UODO, 6 July 2026).

Prepaid SIM cards are registered

Since the anti-terrorism act of 10 June 2016, prepaid users must give their identity data, and existing prepaid cards that were not registered by 1 February 2017 stopped working (Dz.U. 2016 poz. 904). The PKE keeps the rule (art. 296): a provider records the user's name and PESEL or ID document (company registration numbers for businesses) and may start the service only after verifying them, in person or electronically. Before it issues a duplicate SIM or eSIM, the provider must check the PESEL reservation register and refuse if the number is reserved (art. 297), a guard against SIM-swap fraud.

Personal data (GDPR)

A phone number linked to a person is personal data under the GDPR. 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 Polish mobile. We didn't find a primary source that measures messaging-app use in Poland 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 Polish 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:

AnswerWhat it meansWhat to do
registered: trueThe number has a WhatsApp account at checked_atOffer WhatsApp to customers who opted in to it
registered: falseNo account at checked_atUse SMS or another channel
unknownNo conclusive answer (not billed)Keep the current channel; retry later
invalid_numberFailed format validation (not billed)Fix the data at the source

For lists, use a bulk job. Upload a CSV with numbers written the Polish way (512 345 678, 512-345-678 and +48 … all work) and default_country=PL:

Bulk WhatsApp and line-type 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=PL

Send the same body to POST /v1/jobs/estimate first: it is free and shows the maximum cost before anything runs. Rows with a leading 0 fail validation as invalid_number and are not billed; clean them at the source.

What changed recently?

The rows for PL and +48 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 data13
Numbering-plan metadata (validation, lengths, types)12
Geocoding (area names)1
All26

Latest numbering-plan updates for PL: 2026-03-12 (v9.0.26), 2026-02-12 (v9.0.24), 2025-01-29 (v8.13.54), 2024-11-13 (v8.13.50), 2024-02-07 (v8.13.30).

Poland's metadata changes often, mostly as UKE allocates new blocks; the February and March 2026 releases are the ones that typed parts of the 21 M2M range as mobile. The rule changes:

DateChange
2 July 2016Anti-terrorism act: prepaid SIM registration (unregistered cards cut off after 1 February 2017)
25 September 2023Act on combating abuse in electronic communications in force: smishing, CLI spoofing, 8080
25 March 2024Operators must block SMS that match CSIRT NASK's smishing patterns
10 November 2024Electronic Communications Law (PKE) in force: porting (art. 325), marketing consent (art. 398), SIM identification (art. 296)
1 January 2025New national numbering plan (Dz.U. 2024 poz. 1862); some M2M provisions apply from 2029
March 2026New M2M blocks in 21 assigned; libphonenumber types parts of 21 as mobile

What can MobileValidate check for Polish numbers?

Generated from our public catalog:

Catalog data as of 2026-11-07.

CheckAccepts Poland numbersNotes
Format and country (every lookup)YesEach number is parsed first; an invalid number returns invalid_number and is never billed.
Carrier lookup (beta)YesLine 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)YesLive reachability, porting, roaming (true or false) and current network; unknown is free. Real time and bulk.
Number portability (MNP)YesPorted or not ported, and the current network code; unknown is free. Real time and bulk.
Spam reputationLimited accessAll countries except sanctioned ones; report coverage is strongest in North America and Europe.
Messaging appsYes: WhatsApp, Telegram, Viber*, Signal*, iMessage*, RCS*, LINE*, Zalo*, Botim*, Facebook Messenger*Registered, not registered or unknown; unknown is free.
Social networksYes: Facebook, Instagram, Threads, X (Twitter), TikTok*, Snapchat*Not for Poland numbers: LinkedIn (US, IN only).
Online accounts (Apple, Amazon, Microsoft, Netflix)Yes: Apple, Amazon, Microsoft, NetflixRegistered, 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, PESEL 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/estimate shows 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.

A common use is choosing the channel for a one-time code: an SMS to a landline or an M2M SIM is wasted. A carrier lookup gives the line type and current network; an MNP lookup gives ported or not ported. Here is a small flow that picks SMS for mobiles and voice for other lines. 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_pl().

pl_otp.py
import os

import requests  # pip install requests

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


def otp_channel(numbers: list[str]) -> dict[str, str]:
    """Pick an OTP channel per number: SMS to mobiles, voice otherwise, 'review' when we don't know."""
    r = requests.post(API, headers={"Authorization": f"Bearer {KEY}"}, timeout=15,
                      json={"numbers": numbers, "checks": ["carrier"], "wait": 5})
    r.raise_for_status()
    out = {}
    for row in r.json()["results"]:
        carrier = row["checks"]["network.carrier"]
        if carrier["status"] != "completed":
            out[row["e164"]] = f"review ({carrier['status']}, {carrier['reason']})"
            continue
        line = carrier["attributes"]["line_type"]
        out[row["e164"]] = "sms" if line == "mobile" else "voice"
    return out


for number, channel in otp_channel(["+447700900001", "+447700900002", "+447700900005"]).items():
    print(number, channel)

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

Text
+447700900001 sms
+447700900002 review (unknown, NO_DATA)
+447700900005 review (unsupported_country, UNSUPPORTED_COUNTRY)

The second and third test values have no conclusive answer, so the flow sends them for review instead of guessing; neither is billed. Keep "unknown" apart from "not mobile". 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. Our post on checks before sending a code covers the wider OTP flow, and WhatsApp number check the WhatsApp fields.

What are the key takeaways?

  • Polish numbers always have nine digits, at home and after +48, with no trunk 0. Store +48 plus the nine digits; a 0 in front makes the number invalid.
  • The 13 mobile prefixes are 45, 50, 51, 53, 57, 60, 66, 69, 72, 73, 78, 79 and 88. Landlines start with a two-digit area code, 39 is VoIP, 64 paging, 70/80 special-rate.
  • 21 is the M2M range. libphonenumber types parts of it as mobile since early 2026, so filter it yourself.
  • The prefix names the block holder in UKE's tables, not the current network: porting takes at most one working day after the agreed date, and 425,608 mobile numbers moved in the third quarter of 2026.
  • The 2023 anti-abuse act makes operators block spoofed calls and smishing SMS, runs the 8080 reporting number and protects public bodies' SMS sender names.
  • Sales calls, marketing SMS and messaging-app marketing need prior consent under article 398 of the 2024 Electronic Communications Law, for consumers and businesses alike.
  • Use libphonenumber's example numbers in tests; Poland has no fiction range.

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

Sources

  1. Rozporządzenie Ministra Cyfryzacji z dnia 4 grudnia 2024 r. w sprawie planu numeracji krajowej dla publicznych sieci telekomunikacyjnych (Dz.U. 2024 poz. 1862) — Sejm of the Republic of Poland (ISAP / ELI), 2024
  2. Plan numeracji krajowej (Dz.U. 2024 poz. 1862), act details — Internetowy System Aktów Prawnych (ISAP), 2024
  3. Numeracja: tabele zakresów numeracji (mobile, M2M, intelligent-network and VoIP allocation tables; read 2026-11-07) — UKE (Urząd Komunikacji Elektronicznej), 2026
  4. Ustawa z dnia 12 lipca 2024 r. Prawo komunikacji elektronicznej (Dz.U. 2024 poz. 1221): articles 296, 297, 325, 326, 337 and 398 — Sejm of the Republic of Poland (ISAP / ELI), 2024
  5. Prawo komunikacji elektronicznej (Dz.U. 2024 poz. 1221), act details — Internetowy System Aktów Prawnych (ISAP), 2024
  6. Ustawa z dnia 12 lipca 2024 r. Przepisy wprowadzające ustawę – Prawo komunikacji elektronicznej (Dz.U. 2024 poz. 1222) — Sejm of the Republic of Poland (ISAP / ELI), 2024
  7. Ustawa z dnia 28 lipca 2023 r. o zwalczaniu nadużyć w komunikacji elektronicznej (Dz.U. 2023 poz. 1703), act details — Internetowy System Aktów Prawnych (ISAP), 2023
  8. Obwieszczenie w sprawie ogłoszenia jednolitego tekstu ustawy o zwalczaniu nadużyć w komunikacji elektronicznej (Dz.U. 2024 poz. 1803, consolidated text) — Sejm of the Republic of Poland (ISAP / ELI), 2024
  9. Wystartował system wymiany informacji o smishingu (16 January 2024) — Ministry of Digital Affairs (gov.pl), 2024
  10. Lista ostrzeżeń przed niebezpiecznymi stronami — CERT Polska (NASK), 2026
  11. Zastrzeganie nadpisu SMS (public-body sender ID reservation form) — CERT Polska (NASK), 2026
  12. Statystyki przenoszenia numerów w III kwartale 2026 roku (7 October 2026) — UKE (Urząd Komunikacji Elektronicznej), 2026
  13. Baza danych przeniesionych numerów (31 January 2007) — UKE (archive), 2007
  14. UKE od 2006 roku (history) — UKE (Urząd Komunikacji Elektronicznej), 2026
  15. Ustawa z dnia 10 czerwca 2016 r. o działaniach antyterrorystycznych (Dz.U. 2016 poz. 904) — Sejm of the Republic of Poland (ISAP / ELI), 2016
  16. Zgoda nie zawsze jest podstawą przetwarzania danych (6 July 2026) — UODO (Urząd Ochrony Danych Osobowych), 2026
  17. Directive 2002/58/EC on privacy and electronic communications (ePrivacy Directive) — EUR-Lex, Publications Office of the European Union, 2002
  18. Directive (EU) 2018/1972 establishing the European Electronic Communications Code — EUR-Lex, Publications Office of the European Union, 2018
  19. Regulation (EU) 2016/679 (General Data Protection Regulation) — EUR-Lex, Publications Office of the European Union, 2016
  20. libphonenumber PhoneNumberMetadata.xml (region PL) — libphonenumber project (Apache License 2.0), 2026

Frequently asked questions

How many digits is a Polish phone number?

Nine. Poland has a closed numbering plan, so every ordinary number has nine digits, at home and after the country code +48. A mobile is written 512 345 678 in Poland and +48 512 345 678 from abroad. There is no trunk 0: a number written with a leading 0 has ten digits and is invalid.

What is the Poland country code for WhatsApp and international calls?

+48. Put +48 in front of the nine-digit number without removing anything: 512 345 678 becomes +48 512 345 678, and the E.164 form is +48512345678. Don't add a 0 after +48. From a Polish phone you dial the nine digits only; from abroad you dial 00 48 or +48 first.

Which prefixes are mobile numbers in Poland?

The national numbering plan of December 2024 lists 13 two-digit mobile ranges: 45, 50, 51, 53, 57, 60, 66, 69, 72, 73, 78, 79 and 88. Landlines start with a two-digit area code such as 22 for Warsaw or 12 for Kraków, 39 is for IP-based (VoIP) services, 64 for paging and 21 for machine-to-machine services.

Can I tell the operator from a Polish mobile prefix?

No. UKE, the Polish telecoms regulator, allocates number blocks to operators, but every block mixes holders and any number can be ported. A port takes effect no later than one working day after the agreed start date. In the third quarter of 2026 alone, 425,608 mobile numbers changed operator, so look up each number to know its current network.

What is 8080 in Poland?

8080 is the free short number for reporting suspicious SMS. Under the 2023 Act on combating abuse in electronic communications, you forward a suspected smishing message to 8080, and CSIRT NASK, Poland's national computer security team, analyses it. Operators then block messages that match the patterns it publishes.

Is caller ID spoofing illegal in Poland?

Yes. The Act on combating abuse in electronic communications, in force since 25 September 2023, defines CLI spoofing and requires operators to block a spoofed voice call or hide the caller's number. UKE also keeps a public list of numbers that only receive calls, such as bank helplines; calls showing those numbers can be stopped.

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

Yes. Article 398 of the Electronic Communications Law of 2024 bans using automated calling systems or telecom terminal equipment, including messaging services, to send commercial information or direct marketing to a subscriber or end user who has not consented beforehand. It covers sales calls, SMS and messaging apps, for consumers and businesses alike, and a breach is also unfair competition.

Do I need to register a prepaid SIM card in Poland?

Yes. Since 2016, prepaid users must give their identity data, and unregistered prepaid cards were cut off after 1 February 2017. Under the 2024 Electronic Communications Law, a provider may start service only after checking the user's name and PESEL or ID document, and before issuing a duplicate SIM it must check the PESEL reservation register.

All articles

Know before you send.

Create a free account: approved automatically, usually within 10–15 minutes.

Free to start: check 20 phone numbers and 10 e-mail addresses for real on your account, plus an unlimited test mode. You pay only for conclusive answers, from $20.