On this page
- What a synthetic address actually contains
- Why format correctness matters even for disposable data
- Where synthetic addresses are the right tool
- Coverage: 38 countries with five city fixtures each
- Field order and postal patterns you can check
- Seeding: making the same fake address come back twice
- Structural validation versus an existence check
- Fields this generator deliberately does not produce
- Questions
A fake address generator produces addresses that look structurally correct but describe no real household, business, or mailbox. That distinction is the whole product. The output is a fixture for form testing, database seeding, screenshot mockups, and demo environments. It is not a way to reach a person, and it is not a replacement for an address verification service. Every address this site returns is assembled from synthetic fixtures.
The useful part of a generated address is its shape: the line order, the postal code pattern, the state or province code, the character set. Those are exactly the things that break forms in production. A generated address that ignores them is worse than no fixture at all, because it will pass your form and then fail on live data, or fail your form for a reason that cannot occur. This guide covers what a generator must get right, how to seed it, and how synthetic data leaks into places it should never reach.
What a synthetic address actually contains
Each result is assembled from a country definition, one of that country's five city fixtures, a street-name list, a building number, and a postal-code pattern. The generator picks a country, picks a city fixture inside it, builds a street line in the local order, and fills the postal code from the pattern. Nothing is sampled from a delivery database and nothing is copied from a real mailbox.
That gives two guarantees and two non-guarantees. Guaranteed: the format follows the country conventions, and the same seed returns the same address. Not guaranteed: that the street exists at that number, or that a non-US postal code maps to a real delivery area. For US ZIPs there is a separate existence check against a 40,979-row dataset on the postal-code checker. Outside the United States the check is structural only, and the site says so rather than implying more.
- Format: correct for the selected country, every time
- Reproducibility: deterministic for a given seed
- Existence: US ZIP lookup only, against 40,979 rows
- Deliverability: never claimed, and never implied by a green checkmark
- Personal data: none, because no real person is represented
Why format correctness matters even for disposable data
Address forms rarely test the address. They test the validation layer, the masking, the length limits, the country-to-region dependency, and the serializer that writes the row to the database. A fixture that is already malformed hides all of that. If your Canadian fixture is "123 Main St, Toronto, ON 12345", the form accepts a pattern that a real Canadian postal code can never match, and the bug ships.
The reverse failure is equally common. Teams hand-write a fixture that is real-looking but wrong for the country, then add a workaround in the validator to accept it. Six months later the workaround is load-bearing and nobody remembers why the German postal field allows letters. Generated data that follows the published patterns eliminates both directions of drift, as long as the generator itself is honest about what it knows.
Where synthetic addresses are the right tool
Synthetic addresses belong in every layer below production: unit tests for parsers and validators, integration tests that write and read address rows, end-to-end tests that fill a checkout form, load tests that need volume without touching a real customer, and localized screenshot runs for a marketing page. They are also useful for fuzzing, because you can deliberately generate values at the boundary of a length limit or a character set.
They are the wrong tool for anything that depends on a real delivery point. Do not use them for fraud checks, identity verification, ban evasion, account farming, review manipulation, or testing a shipping integration end to end. A synthetic address has no mailbox, so any step that requires an actual carrier scan will fail, and using generated identities to obtain goods or services is fraud regardless of how the data was produced.
- Good: validator unit tests, staging seeds, e2e form fills, load volume
- Good: localization QA where each locale needs a plausible local address
- Good: screenshot and demo environments that must never show a customer
- Bad: KYC, fraud scoring, sanctions screening, or anything expecting delivery
- Bad: production analytics, because generated rows poison conversion math
Coverage: 38 countries with five city fixtures each
The generator covers 38 countries. Each country carries five city fixtures, so there are 190 city definitions in total, and every city knows its region code, its postal pattern, and the local street conventions. Coverage is weighted toward markets where address forms are actually built: North America, Western and Northern Europe, and the larger Asia-Pacific and Latin American markets.
Two countries in the set have no postal code at all: Hong Kong and the United Arab Emirates. The generator leaves the field empty for both rather than inventing a number. That is the correct behaviour. A form that marks postal code as required in those countries is broken, and a fixture that supplies a fake code will hide the defect until a real user hits it.
| Region | Countries in the fixture set | Count | Postal code |
|---|---|---|---|
| North America | United States, Canada, Mexico | 3 | Yes, all three |
| Western Europe | United Kingdom, Ireland, France, Germany, Netherlands, Belgium, Switzerland, Austria | 8 | Yes, all eight |
| Northern Europe | Sweden, Norway, Denmark, Finland | 4 | Yes, all four |
| Southern and Eastern Europe | Spain, Portugal, Italy, Poland, Czechia, Greece, Romania, Hungary | 8 | Yes, all eight |
| Asia-Pacific | Japan, South Korea, Singapore, Australia, New Zealand, India, China, Hong Kong | 8 | No for Hong Kong |
| Latin America | Brazil, Argentina, Chile, Colombia, Peru | 5 | Yes, all five |
| Middle East and Africa | United Arab Emirates, South Africa | 2 | No for the UAE |
| Total | 38 countries, five city fixtures each | 38 | Two without a code |
Field order and postal patterns you can check
A generator is only as good as its country table. The patterns below are the ones that most often get flattened into a single US-shaped template. Notice that Japan reverses the order entirely, that the Netherlands puts letters after the digits, and that Brazil and Japan both use a hyphen that is conventional rather than structural.
Postal codes must be stored as strings. Germany, France, Spain, Italy, and Poland all issue codes with leading zeros, and an integer column silently turns 01067 into 1067. The same applies to Australian and Brazilian codes. If your schema has a numeric postal column, the fixture will expose it the moment you seed a German address.
| Country | Line order | Postal pattern | Storage note |
|---|---|---|---|
| United States | Street, city, ST ZIP | 5 digits or 12345-6789 | Keep the hyphen in ZIP+4 |
| Canada | Street, city, ST A1A 1A1 | Letter digit letter, space, digit letter digit | Disallow D, F, I, O, Q, U as first letter |
| United Kingdom | Street, city, A9A 9AA | 2-4 char outward, space, 3 char inward | One space only; uppercase |
| Germany | Street, 5-digit city | 5 digits | Leading zeros are significant |
| Netherlands | Street, 4-digit AB city | 4 digits, space, 2 uppercase letters | The letters are part of the code |
| Japan | Postal, prefecture, city, street | 3 digits, hyphen, 4 digits | Largest unit first |
| Brazil | Street, city - ST, 12345-678 | 8 digits, hyphen after the fifth | Hyphen is conventional |
| Hong Kong | Street, district, Hong Kong | None | Never require a code |
| United Arab Emirates | Street, city, emirate | None | P.O. Box is the common convention |
Seeding: making the same fake address come back twice
A generator that returns a different address on every call is not a fixture, it is noise. Seeded generation fixes an input so the output sequence is stable across machines and across runs. Pass the seed explicitly in tests, log it with any generated dataset, and treat a change of seed as a change of fixture that needs review.
The practical pattern is to derive per-entity seeds from one parent seed, for example a hash of the seed and the record index. That keeps the dataset stable while still producing different values per row. It also makes failures reproducible: when CI reports a bad address, the seed plus the index is enough to regenerate exactly that row. Never derive the seed from the clock or from a random call, because that is how a flaky test becomes a permanent mystery.
- Store the seed next to the generated dataset, not in a comment
- Derive record seeds as hash(seed, index) so order changes stay visible
- Never seed from Date.now() or from the process random source in tests
- Snapshot the first and last record of every dataset, not all of them
- Regenerate rather than commit large JSON blobs of fake addresses
Structural validation versus an existence check
These are two different claims and conflating them is the most common way a test suite lies to its owners. A structural check answers "does this string match the country pattern". An existence check answers "does this code appear in a reference dataset". The postal-code checker on this site does the first for every country and the second only for US ZIPs, where it consults 40,979 rows.
A structural pass tells you the form will not reject a well-formed value. It tells you nothing about whether a carrier can deliver to it, whether the street number is in range for that street, or whether the city matches the ZIP. Those require postal reference data that this site does not ship. Write your assertions to match the check you actually perform, or the test names will overpromise for years.
| Check | What a pass proves | What it does not prove |
|---|---|---|
| Country pattern match | The value is well formed for that country | That the code is assigned |
| US ZIP existence (40,979 rows) | The 5-digit ZIP appears in the dataset | That the street or city matches |
| Required-field check | The form will submit | That the address is coherent |
| Parser round trip | The string can be split and rebuilt | That the split is semantically right |
| Address generator output | The fixture has the right shape | Anything about the real world |
Fields this generator deliberately does not produce
The site does not generate Social Security numbers, payment card numbers, IMEI or IMSI values, Bluetooth addresses, or device serial numbers. That is a deliberate boundary, not a missing feature. Those identifiers carry checksums, allocation registries, or legal restrictions, and a plausible-looking generated value is far more dangerous than an obviously fake one because it can pass a naive validator and end up in a screenshot, a ticket, or a commit.
The same boundary applies to contact data. Generated email addresses always use the reserved example.test domain, which can never resolve to a real mailbox. Generated phone numbers are limited to the NANP 555-0100 through 555-0199 block in the US and Canada, the range reserved for fictional use. If a workflow needs a card number or a tax identifier, use the official test values published by the processor or the tax authority, and never a value scraped from a generator.
- Not generated: SSN, ITIN, EIN, or any national ID
- Not generated: credit or debit card numbers, including Luhn-valid ones
- Not generated: IMEI, IMSI, MEID, or Bluetooth device addresses
- Not generated: serial numbers, licence plates, or passport numbers
- Generated emails: example.test only, a reserved non-resolving domain
- Generated phones: US and Canada NANP 555-0100 to 555-0199 only
Questions
- No. Every address is assembled from synthetic fixtures and describes no real delivery point. The site does not claim deliverability, and only US ZIPs get an existence check against a 40,979-row dataset.
- 38 countries, each with five city fixtures. Hong Kong and the United Arab Emirates are included but return an empty postal code, because neither country uses postal codes.
- Yes. Generation is seeded, so the same seed and index return the same address on any machine. Store the seed with the dataset so failures stay reproducible.
- No. They are test fixtures. Generated rows in production analytics or customer tables corrupt reporting and can mislead anyone who later treats them as real records.
- Those identifiers are regulated, checksummed, or both, and a plausible fake can slip past naive validation into screenshots and tickets. Use official test values from the processor or authority instead.
Are the addresses real?+
How many countries does the generator cover?+
Can I get the same address twice?+
Can I use generated addresses in production?+
Why does the tool refuse to generate SSNs or card numbers?+
Examples are synthetic. Do not use a generated address for identity checks, account registration, or delivery.