A correct Dutch mailing address uses this order: Recipient Name > Street Name + House Number > Postal Code + City > Country. The postal code format is NNNN AA, meaning exactly 4 digits, 1 space, and 2 capital letters, and Dutch addresses use the street-name-first pattern rather than house-number-first.
If you're cleaning imported CRM records, formatting labels for cross-border shipping, or normalizing address fields before geocoding, Dutch addresses are one of the formats that punish sloppy parsing. A missing space in the postcode, a flipped street/number order, or an ISO country code on the last line can turn a valid record into a returned item or a low-confidence match.
What matters most:
- Canonical structure: recipient, street line, locality line, then country for international mail
- Street order: street name first, then house number
- Postcode rule: exactly 4 digits + single space + 2 capital letters
- Machine readability: spacing and line layout matter, not just the words
- Validation approach: separate structural checks from true deliverability checks
- Database hygiene: preserve house number additions as structured data, not free text
Most generic guides stop at a postal example. That isn't enough if you're building import logic, label generation, deduplication rules, or international verification pipelines.
Introduction
A Dutch address can look deceptively simple until one bad formatting rule breaks an entire mail batch. The failure usually doesn't start in the mailroom. It starts upstream in a form field, a CSV import, or a parser that assumes all countries put the house number before the street.
For the Netherlands mailing address format, the safe baseline is straightforward:
- Recipient name
- Street name + house number
- Postal code + city
- Country for international mail
That baseline solves the obvious problem. The actual work starts after that.
Teams handling global address data usually need more than a sample label. They need rules that survive contact with messy input. That means deciding which fields to store separately, which spacing rules to enforce, how to normalize house number suffixes, and when to reject a record instead of “fixing” it.
This guide focuses on the parts that usually corrupt data:
- Component parsing: what belongs in street, number, suffix, locality, and country fields
- Typographic compliance: line count, alignment, spacing, and country-line rules
- Domestic versus international output: when the country line is required and how it must appear
- Validation logic: regex, normalization, and schema-level constraints
- Operational edge cases: PO boxes, business recipients, and apartment-style additions
If you're designing a global address model, the Dutch format is one of the places where precision pays off immediately.
What Is the Correct Netherlands Mailing Address Format
The correct format is recipient first, then street name plus house number, then postcode plus city, and finally NETHERLANDS for international mail.
The Netherlands uses a highly specific postcode structure. According to Melissa's Netherlands address formatting reference, the postal code is a 6-character alphanumeric format such as 1030 BD, where the 4-digit prefix identifies a district and the 2-letter suffix narrows the address to a specific street or a small group of no more than 100 houses. The same reference notes that a single space must separate digits and letters, and two spaces should separate the postal code from the city for machine readability.

Canonical layout
| Line | Component | Example |
|---|---|---|
| 1 | Recipient | Ms. A. de Vries |
| 2 | Street and house number | Keizersgracht 101 |
| 3 | Postal code and city | 1015 CH Amsterdam |
| 4 | Country for international mail | NETHERLANDS |
Netherlands Address Format Breakdown
| Line | Component | Example |
|---|---|---|
| 1 | Recipient name or company name | Ms. A. de Vries |
| 2 | Street name followed by house number and any addition | Keizersgracht 101 |
| 3 | Postcode followed by city | 1015 CH Amsterdam |
| 4 | Country line for cross-border mail | NETHERLANDS |
A few implementation details matter immediately.
- Recipient line: Use the individual or company name exactly as needed for delivery context.
- Street line: Keep the street and number on the same line when possible.
- Locality line: Write the postcode before the city.
- Country line: Use it for international mail. Write NETHERLANDS in capitals.
Practical rule: If your system stores a single
address_line_1, don't let user interfaces train people into entering101 Keizersgracht. For Dutch addresses, that creates avoidable parsing errors later.
What works and what doesn't
| Pattern | Works | Fails |
|---|---|---|
Keizersgracht 101 | Yes | |
101 Keizersgracht | Yes | |
1015 CH Amsterdam | Yes | |
1015CH Amsterdam | Yes | |
NETHERLANDS on last line for international mail | Yes | |
NL or NLD on last line | Yes |
For developers, the key point is that the display format and the storage model shouldn't be the same thing. Render a clean mailing label, but store at least these separate fields:
- recipient
- street_name
- house_number
- house_number_suffix
- postal_code
- city
- country
That separation makes deduplication, validation, and downstream shipping integrations much less fragile.
How Are Dutch Address Components Broken Down
A Dutch address is built from a few tightly defined components, and the sequence is not negotiable if you want reliable parsing.
According to GeoPostcodes' Netherlands address guide, the Netherlands uses a street-name-first structure such as Schoonoordstraat 48, and that order is tied to the Dutch national address system. The same reference states that the postcode and house number combination is often sufficient for domestic delivery across 27+ million address points.
Street name and house number
The first structural rule is simple: street first, number second.
That sounds minor until you process international imports. Many address parsers are trained on English-speaking patterns and try to interpret the leading number as the house number automatically. For Dutch data, that assumption is wrong often enough to create silent corruption.
Use this model:
- Street name: the named road or thoroughfare
- House number: the primary numeric identifier
- House number addition: letter, unit indicator, or other extension
Examples of clean storage:
| Field | Value |
|---|---|
| street_name | Schoonoordstraat |
| house_number | 48 |
| house_number_suffix |
| Field | Value |
|---|---|
| street_name | Schoonoordstraat |
| house_number | 48 |
| house_number_suffix | A |
Don't flatten suffixes into the number field if you can avoid it. That breaks sorting, matching, and range logic.
Postcode and locality
The postcode is the most powerful part of the Dutch address. It isn't just a broad routing code. It's granular enough that, in domestic contexts, postcode plus house number often resolves the location unambiguously.
That has practical implications:
- Don't strip the internal space in the postcode.
- Don't lowercase the letters if you're producing mail output.
- Don't treat the city as optional in storage, even if domestic routing can work without it.
The city still matters for human review, exception handling, and auditability. A machine may resolve the delivery point, but your operations team still needs readable records.
Recipient and business context
Recipient formatting is less exotic, but it still matters in business datasets. Dutch addresses often include personal titles such as Dhr. or Mevr. in formal usage. In databases, keep those as optional structured fields if your workflows care about correspondence quality.
For B2B records, separate these elements when possible:
- organization_name
- department
- attention_line
- recipient_name
That separation helps when you need to render either a consumer-facing label or a compliance-grade business mailing record.
The minimum safe mental model
If you only keep one rule in your head, keep this one: the Dutch delivery point is effectively anchored by postcode plus house number, but your database should still preserve every address component as its own field.
That's the difference between storing addresses and managing them.
What Are Key Formatting and Typographic Rules
The formatting rules are strict because postal automation depends on them. Close enough isn't good enough when you're generating bulk mail.
According to PostNL addressing requirements summarized by Pingen, a Dutch address must be left-aligned, use 3 to 6 lines, contain no blank lines, and use a font size between 7pt and 17pt. The same standard requires a space before a letter suffix such as 123 A, a hyphen for numeric suffixes such as 123-1, and the final line for international mail must be NETHERLANDS in all caps with no ISO country codes.

Rules that break automation when ignored
| Rule | Correct | Incorrect |
|---|---|---|
| Alignment | Left-aligned | Centered block |
| Letter suffix | 123 A | 123A |
| Numeric suffix | 123-1 | 123 1 |
| Country line | NETHERLANDS | NL |
For system output, these are the rules I'd enforce first:
- Preserve line integrity: no blank spacer lines between recipient, street, locality, and country.
- Normalize suffix formatting: letter additions need a separating space; numeric additions need a hyphen.
- Control rendered output: don't let templates underline or stylize the postcode and city line.
Many teams treat address formatting as presentational only. That's a mistake. Once a PDF generator, label template, or CRM print view starts mutating spaces and punctuation, you can lose machine readability even when the underlying record is valid.
If you're documenting cross-country label rules for operations staff, a broader guide to correct mailing address format is useful. For Dutch records specifically, PostNL-style spacing and suffix handling deserve explicit QA checks.
Clean data can still fail in print. Rendering rules matter as much as field validation when you're generating physical mail.
How Do Domestic and International Formats Differ
The domestic and international formats are almost the same. The critical difference is the country line.
For domestic mail inside the Netherlands, the country line is usually omitted. For international mail sent to the Netherlands, the last line must be NETHERLANDS in capital letters so the item reaches the correct national postal system before domestic routing takes over.

Side-by-side comparison
| Format type | Lines | Country line |
|---|---|---|
| Domestic | Recipient, street, postcode plus city | Omit |
| International | Recipient, street, postcode plus city, country | Add NETHERLANDS |
| Cross-border system output | Same core structure | Must be final line in capitals |
Practical trade-offs
Domestic systems can sometimes get away with less display information because Dutch routing is highly precise. International systems can't. Carriers, sorting centers, export documents, and mailing software need the address rendered in a way that works before local Dutch logic is ever applied.
That means:
- Domestic output: optimize for local readability and correctness
- International output: optimize for country recognition first, then local precision
- Global databases: store once, render differently based on destination context
A common failure mode is reusing a domestic template for international labels. Another is appending country metadata in the wrong place, such as a side field or shipping note instead of the final address line.
Use a country-aware rendering layer. Don't make your operators remember the difference manually.
Can You Provide Specific Address Examples
Yes. The safest way to understand the format is to look at complete address blocks that match real operational scenarios.
Residential address
A standard residential mailing block looks like this:
Ms. A. de Vries
Keizersgracht 101
1015 CH Amsterdam
NETHERLANDS
This is the clean baseline. Nothing extra. No commas. No reversed street order.
Business address with attention line
Business mail often needs one extra line for routing inside the organization:
Example BV
T.a.v. Mevr. A. de Vries
Keizersgracht 101
1015 CH Amsterdam
NETHERLANDS
Use the company on its own line if the mail is addressed to the business first. Keep the attention line separate rather than merging it into the street line.
PO box example
Dutch PO boxes use Postbus:
Example BV
Postbus 101
1015 CH Amsterdam
NETHERLANDS
For data models, don't store Postbus 101 inside a generic street field if your schema can avoid it. A dedicated delivery type or address class is cleaner because PO box logic differs from street delivery logic.
Complex house number suffix
Suffixes are where many imports go bad:
Ms. A. de Vries
Keizersgracht 100 A
1015 CH Amsterdam
NETHERLANDS
If the addition is numeric, render it with a hyphen in line with the earlier typographic rule:
Ms. A. de Vries
Keizersgracht 100-1
1015 CH Amsterdam
NETHERLANDS
What these examples teach
- Residential records should stay minimal.
- Business records need separate recipient-routing context.
- PO box records shouldn't be forced into a street-address parser.
- Suffix-heavy addresses need structured storage, not freeform cleanup.
If your parser can only emit one street_address field, preserve the original string and also create parsed subfields. That gives your verification layer something reliable to inspect without losing the source text.
What Are Common Pitfalls and Validation Strategies
Most Dutch address failures are predictable. They aren't edge cases. They're the result of weak validation rules and overconfident normalization.
According to Smarty's Netherlands address format reference, the Dutch postcode is a mandatory six-character alphanumeric format with exactly four digits followed by two capital letters, and it requires a single space between the numeric and alphabetic parts for machine readability.

Common corruption patterns
| Error | Why it happens | Safer handling |
|---|---|---|
1015CH | Users omit the required space | Reformat to 1015 CH if structure is otherwise valid |
101 Keizersgracht | Parser assumes number-first format | Flag for Dutch-specific reorder review |
NL on final line | System uses ISO code template | Replace with NETHERLANDS for international mail |
123A suffix style | UI compresses number and suffix | Normalize to 123 A when suffix is alphabetic |
Validation logic that actually helps
Start with structural validation, not expensive external verification.
- Input mask: enforce
NNNN AAin forms as the user types. - Case normalization: uppercase postcode letters at write time.
- Field separation: split street, number, and suffix before trying to verify deliverability.
- Render validation: test final label output, not just stored values.
Then add business rules:
- Reject records where the Dutch postcode lacks the required internal space.
- Flag records where a leading numeric token suggests street/number reversal.
- Block
NLandNLDon mailing labels intended for international delivery. - Preserve the raw imported address for audit and parser fallback.
Bad normalization is worse than a flagged error. Once your system rewrites a valid-but-unusual address incorrectly, recovery gets expensive.
For shipping workflows, address checks often need to sit beside sanctions, carrier, and destination-rule checks. If your stack already includes shipping controls, a practical companion resource is automated shipping compliance with Experian, especially when address validation is only one part of release logic.
If you need a broader workflow for detecting malformed address records before enrichment or dispatch, a dedicated mailing address validator guide is worth using as a process reference.
Normalization rules I would enforce
- Trim outer whitespace, but never remove the internal postcode space.
- Uppercase country output for international rendering.
- Preserve original diacritics and casing in street and recipient data unless your downstream system can't handle them.
- Store parsing confidence, even if it's just high, medium, or low in your internal workflow.
That last one matters. Not every Dutch address should pass through the same automated correction path.
How Do You Programmatically Handle Dutch Addresses
Programmatic handling starts with a narrow goal: validate structure first, then parse, then verify against authoritative data if needed.
Regex for the postcode
A practical regex for the Dutch postcode is:
^[0-9]{4}s[A-Z]{2}$
That does three useful things:
- requires exactly four digits
- requires exactly one space
- requires exactly two uppercase letters
If you want to be slightly more forgiving at input time, accept lowercase letters temporarily and uppercase them before storage. But your persisted canonical form should still be NNNN AA.
Parsing strategy
Don't try to solve all Dutch address parsing with one regex. Use staged parsing instead:
- Identify postcode token
- Assign trailing locality token group to city
- Parse remaining street line into street, number, suffix
- Compare parsed output against the original raw string
That approach is more stable than writing one giant pattern for every possible variant.
Minimal data model
| Field | Recommendation |
|---|---|
| postal_code | Store as canonical NNNN AA |
| street_name | Separate from number |
| house_number | Numeric field if possible |
| house_number_suffix | Separate text field |
| city | Preserve official spelling |
| country | Render NETHERLANDS for international labels |
For international product teams, a broader international address validation reference helps when Dutch records need to fit into a single global validation layer.
API handling rules
When you call an address verification API, look for component-level results rather than a single pass/fail flag. You want to know whether the postcode matched, whether the house number matched, and whether the street was normalized.
If the API returns a corrected street order, don't overwrite your source record blindly. Write the corrected version to a normalized field set, keep the original input, and log the transformation. That's how you prevent silent data loss in large imports.
Frequently Asked Questions About Dutch Addresses
Do I really need the city name if the postcode is so precise
Yes. Even when postcode plus house number can identify the destination, the city should still be present in the mailing address for compliance, readability, and manual exception handling. Human operators need it, and so do downstream systems that don't rely on Dutch postcode logic alone.
How should I format an apartment or unit number
Use it as a house number suffix when it is part of the official address representation. Letter additions should follow the number with a space, and numeric additions should use a hyphen. If your workflow needs extra occupant detail beyond the official suffix, keep that in a separate secondary line rather than forcing it into the postcode or city fields.
Why must I use NETHERLANDS instead of Holland
Because Holland is not the official country name for mailing purposes. For international mail, use NETHERLANDS on the final line in capitals. That's the unambiguous country designation carriers and postal systems expect.
What's the simplest safe rule for developers
Treat Dutch addresses as structured data, not formatted text. If you preserve street_name, house_number, house_number_suffix, postal_code, city, and country separately, most downstream formatting problems get much easier to solve.
If your team works with large property, customer, or mailing datasets, BatchData is worth a look. It gives developers and data teams a cleaner way to work with high-volume records, enrichment pipelines, and validation-heavy workflows without building every normalization layer from scratch.