Bulk Phone & Postal Code Cleaner

Paste a messy list — one value per line or a whole CSV column — and get every North American phone number normalized to +1 (XXX) XXX-XXXX, every Canadian postal code checked against the real A1A 1A1 rules, and every US ZIP validated. Each row gets a status and a plain-English reason, and the whole thing exports as CSV.

Paste a list and click Clean list

You'll get a per-row table showing what was already valid, what was reformatted, and exactly why anything failed — plus a CSV you can take straight back to your CRM.

What counts as valid (and why)NANP digit rules, the 18 Canadian postal district letters, ZIP formats

Phone numbers (NANP)

A North American number is NPA-NXX-XXXX where N is 2-9 and X is 0-9. Both the area code and the exchange code must start with 2-9, and neither can be an N11 code (211, 311 … 911) because those are reserved for services. 370-379 and 960-969 are held back for future expansion, and 555-0100 to 555-0199 is the only block reserved for fictional numbers. Extensions (x, ext, poste) are kept.

Canadian postal codes

The format is A1A 1A1. Eight letters — D, F, I, O, Q, U, W, Z — are not used in any position, mostly because they are easy to confuse with digits. The first letter is a postal district, and only these 18 are assigned:

ANewfoundland and Labrador
BNova Scotia
CPrince Edward Island
ENew Brunswick
GEastern Quebec
HMetropolitan Montreal
JWestern Quebec
KEastern Ontario
LCentral Ontario
MMetropolitan Toronto
NSouthwestern Ontario
PNorthern Ontario
RManitoba
SSaskatchewan
TAlberta
VBritish Columbia
XNorthwest Territories and Nunavut
YYukon

A 0 in the second position marks a rural route, which the tool notes for you.

US ZIP codes

Five digits, or nine for ZIP+4 (normalized to 12345-6789). Leading zeros are preserved — a common failure when a list has been through a spreadsheet, which turns 01234 into 1234.

Where these rules come from

This validates format and structure, not whether a number or address is actually in service — that needs a live carrier or Canada Post lookup. Everything runs in your browser in chunks, so a 10,000-row paste stays responsive and your contact list is never uploaded anywhere.

Real validation, not just a length check

Most bulk cleaners count digits and stop there. That accepts a lot of junk that will bounce the moment you try to dial it or mail it. This one applies the actual structural rules:

  • The exchange code is checked, not just the area code. In the NANP both the 3-digit area code and the 3-digit exchange code must start with 2-9, and neither can be an N11 code (211, 311 … 911). A number like 416-055-1234 has ten perfectly good digits and is still impossible — this tool says why.
  • Reserved ranges are rejected. Area codes 370-379 and 960-969 are held back for future expansion and aren't in service, and 555-0100 to 555-0199 is the block officially reserved for fictional numbers — so a placeholder that slipped into your CRM gets caught rather than exported.
  • Postal-code letters are checked against the real alphabet. Canada uses only 18 of the 26 letters: D, F, I, O, Q, U, W and Z appear nowhere in a postal code. The first letter also has to be an assigned postal district, so D1A 1A1 is rejected with a reason rather than passing a naive [A-Z]\d[A-Z] pattern.
  • Leading zeros survive. ZIP 01234 stays five digits instead of becoming 1234 — the classic damage a spreadsheet does to an address list on the way in.

Built for big lists

Rows are processed in chunks with the main thread handed back between each one, so a paste of several thousand contacts shows a live progress bar instead of freezing the tab. Nothing is uploaded: the entire list stays in your browser, which matters when the file is your customer database. Duplicates are flagged after normalization, so 416-555-1234 and (416) 555 1234 are correctly caught as the same number.

Preguntas frecuentes

How do I bulk clean phone numbers and postal codes from a CSV for free?

Paste the list into the box above - either one value per line, or paste whole CSV rows and pick which column holds the data. Click Clean list and every row is normalized and validated: phone numbers become +1 (XXX) XXX-XXXX, Canadian postal codes become A1A 1A1, and US ZIPs become 12345 or 12345-6789. You get a per-row table showing valid, fixed or invalid with the reason, then download a CSV report or copy just the cleaned values back into your spreadsheet. It's free, needs no account, and there's no row limit.

Which letters are not used in Canadian postal codes?

Eight of them: D, F, I, O, Q, U, W and Z are not used anywhere in a Canadian postal code, largely because they're easily confused with digits or with each other when handwritten or machine-read. That leaves 18 usable letters. The first letter carries extra meaning - it identifies a postal district, running roughly east to west from A (Newfoundland and Labrador) through V (British Columbia), with X for the Northwest Territories and Nunavut and Y for Yukon. This tool checks both rules, so an unassigned district letter is reported as an error rather than quietly accepted. A zero in the second position means a rural route, which the tool notes for you.

What makes a phone number structurally invalid?

Under the North American Numbering Plan a number is NPA-NXX-XXXX, where the first digit of both the area code and the exchange code must be 2-9. So an exchange starting with 0 or 1 is impossible even though the digit count looks right - that's the check most tools skip. N11 codes (211, 311, 411, 511, 611, 711, 811, 911) are reserved for services and can't be an area code or an exchange. Area codes 370-379 and 960-969 are reserved for future expansion. And 555-0100 through 555-0199 is the range set aside for fictional numbers, so those are flagged as placeholders rather than treated as real contacts.

Can it handle a mixed list of phone numbers, postal codes and ZIPs?

Yes - that's the default. Each row is auto-detected on its own: letters plus three digits reads as a Canadian postal code, five or nine digits as a ZIP, ten or eleven digits as a phone number. If a row is ambiguous the tool tries each type in turn and uses whichever validates. If you know your column is all one type, set the 'Expect' dropdown to that type and anything that doesn't match will be reported as invalid instead of being reinterpreted - useful for catching a ZIP that ended up in your phone column.

Will a list of several thousand rows freeze my browser?

No. The list is processed in chunks of 500 rows with control handed back to the browser between chunks, so the page stays responsive and you get a live progress bar. A few thousand rows finish in well under a second. On screen the table shows the first 1,000 rows to keep rendering fast, but the CSV download always contains every row you pasted.

Does this check whether a number or address really exists?

No, and no free client-side tool can. This validates format and structure - that a number obeys the NANP's digit rules and that a postal code uses a real district letter and the correct letter/digit pattern. Confirming that a phone line is actually in service or that a postal code maps to a deliverable address needs a live carrier lookup or a Canada Post address validation service. What this catches is the large share of list problems that are structural: typos, transpositions, placeholder numbers, spreadsheet-mangled ZIPs and inconsistent formatting.

Herramientas relacionadas