How should we tag secondary address unit designators, if at all?
Background
In a typical building complex (apartment building, duplex, office building, strip mall, etc.), each building unit is assigned a unique number or letter, which is signposted and appears in the delivery address line of any incoming mail. The complex will have its own convention for referring to the number or letter with a word preceding it, such as “unit”, “suite”, or “apartment”.
The USPS calls these words secondary address identifiers or secondary address unit designators. They’ve approved 25 unit designators, and others exist informally at sites that operate their own mailstops. They require the designator and in some cases will reject mail that omits it or shortens it to something generic like “#”.
Each complex tends to use a different designator, or a mix of them, and they aren’t really interchangeable. Less commonly, a given address can have multiple secondary address numbers and multiple secondary address unit designators. For example, this insurance agent usually gives her address as “3350 Scott Blvd. Bldg. 12-01”. She shares the building with another business that goes by “Unit 1202”. The landlord signposts their addresses like “Bldg. 12, Unit 1”. Business owners tend to use the shortened form to avoid headaches when filling out forms that only accept a single unit number.
Problem
For the longest time, we’ve recommended setting addr:unit=* to just the number or letter, omitting the designator. Most address and POI imports have followed this guidance, completely dropping any information about designators. A clean number or letter conveniently allows rendered maps to label individual units without any postprocessing, as seen in OSM Carto and the map styles built into editors. After all, if every addr:unit=* in a building includes a word like “Suite”, the map would get cluttered with repetitive “Suite” labels in that spot:
Possible solutions
There’s always been a lingering question about how else to tag the unit designator. It seems unsatisfying to simply drop information that apparently does matter for real-world addressing purposes. There are currently a few different approaches in the wild, none of them predominating yet:
Freeform addr:unit=*
Some mappers have included the designator in addr:unit=* anyways, figuring that avoiding dataloss is more important than mapping for the renderer. Across the U.S., about 24,000 occurrences of addr:unit=* contain one of the seven most common unit designators:
Maybe keeping the whole secondary address together like this could theoretically facilitate geocoding, but geocoders universally ignore unit numbers at the moment, even in user input.
Single key for designator
In Augusta County and Lynchburg, Virginia, @pmfox and @OptikalCrow went with addr:unit:label=*. This keeps addr:unit=* simple for renderers but avoids dataloss, as long as the address has only one secondary address.
One key per designator
In the New York State address import, @dead10ck isolated the numbers but distinguished the designators by setting several different subkeys:
| NYS GIS SAM | OSM |
|---|---|
Building |
addr:housename=* |
Floor |
addr:floor=* |
Room |
addr:door=* |
Unit |
addr:unit=* |
The New York approach also isolates a number or letter for renderers to label while allowing for combinations of multiple secondary addresses. However, since the order can vary from site to site, these addresses would probably need addr:full=* to ensure that data consumers use the secondary addresses in the correct order.
NYS GIS was only tracking a few of the designators in the first place, not even all of the common ones. Only a few of the 25 approved unit designators correspond to subkeys that are well-documented or well-supported in software, likely because other countries’ addressing systems don’t consider components like “floor” to be unit designators at all. Another wrinkle is that some common unit designators like “Bsmt.” and “Rear” may or may not come with a number. Would we set addr:basement=yes and expect renderers to avoid labeling a literal “yes”?
Does this community have a preference for one of these approaches, or the status quo? Have I missed any other approaches? If we can align on a tagging scheme for unit designators, we can start thinking about backfilling the designators in some of the large imports that originally dropped them.





