All 40 data fields documented with descriptions, data types, examples, and edition availability.
The fundamental postal identification and street address components for ZIP+4 records.
| Field Name | Description & Example | Data Type | Standard | Premium & Deluxe |
|---|---|---|---|---|
| ZipCode |
5-digit ZIP Code Example: 12533
|
CHAR(5) | ||
| Plus4Low |
ZIP+4 low number in the address range Example: 1001 or 14ND for non-deliverableNon-deliverable addresses indicated by 'ND' suffix (e.g., 14ND) |
CHAR(4) | ||
| Plus4High |
ZIP+4 high number in the address range Example: 1099 or 14ND for non-deliverableWhen Plus4Low = Plus4High, represents a single delivery point |
CHAR(4) | ||
| StPreDirAbbr |
Street pre-directional abbreviation Example: N in "123 N MAIN ST"
|
CHAR(2) | ||
| StName |
Official street name (USPS format, uppercase) Example: MAIN
|
VARCHAR(28) | ||
| StSuffixAbbr |
USPS standard street suffix abbreviation Example: ST, AVE, BLVD
|
VARCHAR(4) | ||
| StPostDirAbbr |
Street post-directional abbreviation Example: N in "123 MAIN ST N"
|
CHAR(2) | ||
| AddressPrimaryLowNumber |
Low number in the street address range Example: 100 in range "100-198"
|
VARCHAR(10) | ||
| AddressPrimaryHighNumber |
High number in the street address range Example: 198 in range "100-198"
|
VARCHAR(10) | ||
| AddressPrimaryOddEven |
Indicates which side of the street Values: O = Odd, E = Even, B = Both
|
CHAR(1) | ||
| BuildingFirmName |
Company, building, or apartment complex name Example: ACME CORPORATION, RIVERSIDE APARTMENTS
|
VARCHAR(40) | ||
| State |
2-character state abbreviation Example: NY, CA, TXIncludes U.S. territories and APO/FPO/DPO |
CHAR(2) |
Record identifiers, secondary addressing for multi-unit buildings, and record management fields.
| Field Name | Description & Example | Data Type | Standard | Premium & Deluxe |
|---|---|---|---|---|
| UpdateKey |
Unique key identifying this record for updates Example: NY12533001Used to track record changes in monthly transaction files |
VARCHAR(10) | ||
| Action |
Record action indicator Values: A = Add, D = DeleteAlways "A" in base files; "D" appears in transaction files |
CHAR(1) | ||
| RecordType |
Type of address record Values: S = Street, H = High-Rise, F = Firm, P = PO Box, R = Rural Route, G = General Delivery
|
CHAR(1) | ||
| AddressSecondaryAbbr |
Secondary address abbreviation Example: APT, STE, UNITOnly applicable to Record Types F (Firm) and H (High-Rise) |
VARCHAR(4) | ||
| AddressSecondaryLowNumber |
Low-end secondary address number in range Example: 101 for "APT 101-125"Only applicable to Record Types F and H |
VARCHAR(10) | ||
| AddressSecondaryHighNumber |
High-end secondary address number in range Example: 125 for "APT 101-125"Only applicable to Record Types F and H |
VARCHAR(10) | ||
| AddressSecondaryOddEven |
Secondary address odd/even indicator Values: O = Odd, E = Even, B = BothOnly applicable to Record Types F and H |
CHAR(1) | ||
| BaseAlternateCode |
Specifies if record is base or alternate Values: B = Base (preferred), A = AlternateUse base records for address validation; alternates for flexibility |
CHAR(1) | ||
| LACSStatus |
Locatable Address Conversion System status Values: L = LACS Converted, Blank = Not ApplicableIndicates rural addresses converted to city-style addresses |
CHAR(1) |
USPS delivery routing and postal facility identification codes.
| Field Name | Description & Example | Data Type | Standard | Premium & Deluxe |
|---|---|---|---|---|
| CarrierRoute |
USPS carrier route identifier Example: C001, R002, B003Format: Type + 3-digit number (C=City, R=Rural, H=Highway Contract, B=PO Box, G=General Delivery) |
CHAR(4) | ||
| GovernmentBuilding |
Government building type indicator Example: A, B, C, etc.Identifies federal, state, or local government facilities |
CHAR(1) | ||
| FinanceNumber |
USPS facility finance code Example: 125487Primarily for post offices; used for cost/revenue tracking |
VARCHAR(6) |
Geographic coordinates marking the beginning and end points of address ranges.
| Field Name | Description & Example | Data Type | Standard | Premium & Deluxe |
|---|---|---|---|---|
| FromLatitude |
Starting point latitude for address range Example: 41.61234567Represents the beginning of the address range geographically |
DECIMAL(11,8) | ||
| FromLongitude |
Starting point longitude for address range Example: -73.87654321Represents the beginning of the address range geographically |
DECIMAL(11,8) | ||
| ToLatitude |
Ending point latitude for address range Example: 41.61456789Represents the end of the address range geographically |
DECIMAL(10,8) | ||
| ToLongitude |
Ending point longitude for address range Example: -73.87432109Represents the end of the address range geographically |
DECIMAL(10,8) |
This is the primary difference between Premium and Deluxe editions. Both include the same fields (CenLat, CenLon, CensusBlockGroup), but the centroid coordinates are derived from different sources:
Centroid coordinates and census block group data - the key differentiators for Premium and Deluxe editions.
| Field Name | Description & Example | Data Type | Standard | Premium & Deluxe |
|---|---|---|---|---|
| CenLat |
Centroid latitude for the ZIP+4 code Example: 41.61345678Premium: Street-level (80% complete) Deluxe: Building-level (95% complete, higher accuracy) |
DECIMAL(11,8) | ||
| CenLon |
Centroid longitude for the ZIP+4 code Example: -73.87543210Premium: Street-level (80% complete) Deluxe: Building-level (95% complete, higher accuracy) |
DECIMAL(11,8) | ||
| CensusBlockGroup |
Census block group code (state, county, tract, and block group) Example: 36027950100112-character code combining all census geographic levels |
VARCHAR(12) | ||
| LatLonMultiMatch |
Indicates if ZIP+4 has multiple lat/lon matches Values: Y = Yes (multiple matches), Blank = No (single match)Helps identify ZIP+4 codes spanning multiple locations |
CHAR(1) |
Government identifiers, census geography codes, and reference keys.
| Field Name | Description & Example | Data Type | Standard | Premium & Deluxe |
|---|---|---|---|---|
| CountyFIPS |
3-digit FIPS code for county Example: 027 for Dutchess County, NYMatch with County supplemental file for county names and details |
CHAR(3) | ||
| CongressionalDistrict |
Congressional district number Example: 18 for NY's 18th DistrictBased on current congressional district boundaries |
CHAR(2) | ||
| CensusTract |
Census tract code Example: 950100Small statistical areas within counties with relatively stable boundaries |
CHAR(6) | ||
| CensusBlock |
Census block number Example: 10014-character number uniquely identifying blocks within census tracts |
CHAR(4) | ||
| TLID |
Tiger Line Identification number Example: 1234567890Universal number associated with Census Bureau TIGER products |
CHAR(10) | ||
| MunicipalityKey |
Municipality reference key Example: 123456Reserved for future use |
VARCHAR(6) | ||
| PreferredLastLineKey |
Reference key to ZIP Code Database Example: 012533Match to Standard or Deluxe ZIP Code Database for city name, city aliases, area code, time zone, and more |
VARCHAR(6) | ||
| UrbanizationKey |
Urbanization name reference key Example: 987654Index to ZIP Code Database for urbanization name (primarily for Puerto Rico addresses) |
VARCHAR(6) |
Choose the edition that fits your needs
Detailed technical specifications for seamless integration with your systems.
| File Format: | .csv (Comma-Separated Values) |
| Delimiter: | , (comma) |
| Text Qualifier: | " (double quote) - used when fields contain commas or special characters |
| Character Encoding: | UTF-8 (Unicode) without BOM |
| Line Endings: | CRLF (Windows-style: \r\n) |
| Header Row: | Yes - First row contains field names |
| BOM: | No byte order mark (UTF-8 without BOM) |
| Null Values: | Empty string (no characters between delimiters) |
| Primary Key: | UpdateKey - Unique identifier for each record |
| Compression: | .zip format - Both individual state files and master archive |
ZipCode,UpdateKey,Action,RecordType,CarrierRoute,StPreDirAbbr,StName,...
12533,NY12533001,A,S,C001,,MAIN,ST,,100,198,E,,,,,,...
12533,NY12533002,A,S,C001,,OAK,AVE,,200,298,E,,,,,,...
12533,NY12533003,A,H,C002,,RIVERSIDE,APT,,300,,,APT,101,125,O,...
Note: Actual files contain all 31-40 fields depending on edition. Truncated for display.
62 Individual State Files
Files organized by state/territory with standardized naming:
ZIP4-NY.zip → ZIP4-NY.csvZIP4-NY-PREMIUM.zipZIP4-NY-DELUXE.zip
Coverage:
Monthly Changes-Only Files
Track additions, deletions, and updates:
2025-10-ZIP4-Update-Standard.zip2025-10-ZIP4-Update-Premium.zip2025-10-ZIP4-Update-Deluxe.zip
Action Field Values:
D = Delete recordA = Add new recordD followed by AContains only records that changed since previous month.
Three Access Methods:
1. Master Archive
Single ZIP containing all 62 state files (already compressed individually)
2. Individual State Downloads
Download only the states you need from account portal
3. FTP/SFTP Automation
Free automated transfer setup for monthly updates
Compression: .zip format for maximum compatibility
StName, CarrierRoute, CountyFIPS)UpdateKey field uniquely identifies each recordUpdateKey values within the dataset12533,NY12533001,A,S,,MAIN,ST (empty StPreDirAbbr)Evaluate the data quality and format before purchasing. All samples contain real data from our database.
Complete address range and carrier route data with 31 fields for address validation and delivery routing.
Enhanced location precision with street-level centroid coordinates (80% complete) ideal for mapping and proximity analysis.
Highest accuracy centroids with building-level precision (95% complete) for precision delivery routing and enterprise geocoding applications.
Use our interactive data explorer to search, filter, and preview actual ZIP+4 records in your browser. No download required.
Launch Data ExplorerStill working on this section. Stay tuned!
Real technical questions from real developers in the trenches. We've been doing this since 2003, so we've seen every edge case imaginable. This FAQ covers everything from centroid accuracy to transaction files to why the USPS does things that make you scratch your head. Whether you're integrating at 2 PM or 2 AM, this FAQ will save you time and headaches.
This is the primary difference between Premium and Deluxe editions. Both include the same 40 fields (CenLat, CenLon, CensusBlockGroup), but the centroid coordinates come from very different data sources.
Premium Edition:
Deluxe Edition:
Completion rates by state: Mainland U.S. averages 97-99% completion for both editions. Military addresses (AA/AE/AP) are 99%+. Territories vary: Puerto Rico (88.66%), Guam (57%), Virgin Islands (8%), American Samoa and others below 1%.
Bottom line: If you need "good enough" coordinates for most mapping applications, Premium delivers excellent value. If you need the highest possible accuracy for logistics, routing, or precision applications - Deluxe is worth the investment.
Transaction files contain only the records that changed since the previous month. They're much smaller than the full database files and allow you to efficiently maintain current data.
File naming convention:
2025-10-ZIP4-Update-Standard.zip → 2025-10-ZIP4-Update-Standard.csv
2025-10-ZIP4-Update-Premium.zip → 2025-10-ZIP4-Update-Premium.csv
2025-10-ZIP4-Update-Deluxe.zip → 2025-10-ZIP4-Update-Deluxe.csv
Format: YYYY-MM-ZIP4-Update-[Edition].zip
How updates work - The D/A pattern:
The USPS doesn't have an "Update" action code. Instead, they use a Delete-then-Add pattern:
It's annoying and antiquated, but it's how the USPS does it. Welcome to government data!
Processing logic:
1. Read transaction file
2. For each record:
IF Action = 'D':
DELETE FROM zip4_table WHERE UpdateKey = record.UpdateKey
ELSE IF Action = 'A':
INSERT INTO zip4_table VALUES (record data)
3. Commit changes
Typical change volume:
Pro tip: If you're using FTP automation, schedule downloads for the 5th of each month. We've never missed publishing on the 1st in many years, but occasionally there are republications to correct edge cases.
Every ZIP+4 purchase includes the corresponding ZIP Code Database to provide city names, area codes, time zones, and other data not included in the ZIP+4 files.
Edition pairings:
Note: You can upgrade to ZIP Code Database Business separately if needed.
What data comes from the ZIP Code Database?
Join relationships - three ways to connect:
| ZIP+4 Field | Joins To | ZIP Code DB Field | Use Case |
|---|---|---|---|
PreferredLastLineKey |
→ | PreferredLastLineKey |
Primary join method |
PreferredLastLineKey |
→ | CityStateKey |
Alternate join (same data) |
UrbanizationKey |
→ | PreferredLastLineKey |
For Puerto Rico urbanization names |
SQL Example:
-- Primary join method
SELECT
z4.ZipCode,
z4.Plus4Low,
z4.StName,
zc.City,
zc.AreaCode,
zc.TimeZone
FROM zip4_database z4
LEFT JOIN zipcode_database zc
ON z4.PreferredLastLineKey = zc.PreferredLastLineKey
WHERE z4.ZipCode = '10001';
Why the complexity? The USPS uses different key structures for different purposes. We keep all the keys in the data so you can join however makes sense for your use case. For most applications, stick with PreferredLastLineKey → PreferredLastLineKey.
Non-Deliverable (ND) ZIP+4 codes represent addresses where the USPS does not deliver mail. They account for approximately 1.35% of all records (~653,000 out of 48.5 million).
What makes a ZIP+4 non-deliverable?
How to identify ND codes:
ND codes are marked by "ND" in the Plus4Low and Plus4High fields:
ZipCode: 12345
Plus4Low: 14ND
Plus4High: 14ND
Are they temporary or permanent?
ND codes are generally permanent until an area gains delivery service or structures are built. They're not "under construction" placeholders - they represent areas that currently have no mail delivery capability.
How should developers handle ND codes?
USPS Guidance: The USPS explicitly states that mailers should not match addresses to non-delivery areas. CASS-certified software treats ND codes as invalid for delivery, so your validation logic should too.
The RecordType field indicates what kind of address record you're dealing with. Each type has different field characteristics and usage patterns.
Distribution across 48.5 million records:
| Code | Type | Count | Percentage | Description |
|---|---|---|---|---|
| S | Street | 32.7M | 67.44% | Standard street addresses with address ranges |
| H | High-Rise | 14.4M | 29.61% | Multi-unit buildings (apartments, condos) |
| P | PO Box | 732K | 1.51% | Post Office Box addresses |
| F | Firm | 509K | 1.05% | Unique business/organization addresses |
| R | Rural Route | 164K | 0.34% | Rural Route / Highway Contract addresses |
| G | General Delivery | 27K | 0.06% | General Delivery service addresses |
Field characteristics by RecordType:
S (Street) - 67.44%: Standard street addressing. All street name fields populated, address ranges in Primary Low/High, coordinates available for most records. This is your typical "123 Main St" address.
H (High-Rise) - 29.61%: Multi-unit buildings. Uses Secondary Address fields (AddressSecondaryAbbr, AddressSecondaryLowNumber, AddressSecondaryHighNumber) for apartment/unit ranges. Example: "100 Park Ave, APT 101-125". Primary Low usually equals Primary High (single building).
P (PO Box) - 1.51%: Street name is literally "PO BOX". Box number range appears in AddressPrimaryLowNumber/HighNumber fields. No coordinates - PO Boxes don't have street locations. Filter these out if you're doing geocoding.
F (Firm) - 1.05%: Similar to High-Rise but for businesses receiving large mail volumes. The firm gets its own unique ZIP+4. May use secondary address fields for internal mail sorting (departments, floors). Example: Large corporate headquarters.
R (Rural Route) - 0.34%: Rural addressing. Street name shows "RR #" (Rural Route) or "HC #" (Highway Contract). Box numbers appear in Primary address range fields. Example: "RR 2 Box 123". Coordinates available at same rates as other types.
G (General Delivery) - 0.06%: USPS service for people without fixed addresses. Street name is always "GENERAL DELIVERY", no Primary address range, Plus4Low/High always "9999", OddEven always "B". Rare but used in remote areas.
Developer tip: When building address validation, filter by RecordType first. Street (S) and High-Rise (H) cover 97% of records and use standard validation logic. The other types need special handling.
All coordinate fields use the WGS84 geodetic datum with 6 decimal places of precision.
Coordinate precision:
DECIMAL(11,8) for latitude, DECIMAL(11,8) for longitude40.748817, -73.985428 (Empire State Building)Coordinate fields available:
| Field | Edition | Purpose | Recommendation |
|---|---|---|---|
CenLat / CenLon |
Premium/Deluxe | Centroid of ZIP+4 address range | RECOMMENDED |
FromLat / FromLon |
All editions | Address range start point | DO NOT USE |
ToLat / ToLon |
All editions | Address range end point | DO NOT USE |
IMPORTANT: Do NOT use FromLatitude/FromLongitude or ToLatitude/ToLongitude
These fields are legacy data from a USPS/Census collaborative project that was supposed to be updated annually but was abandoned around 2010. We kept them in the database for backward compatibility, but they are not maintained and should not be relied upon for any application.
What to use instead:
CenLat and CenLon - these are actively maintained and highly accurateMilitary ZIP+4 coordinates:
Military addresses (AA/AE/AP) do have coordinate data, but these should NOT be used for proximity analysis or mapping. The coordinates are administrative placeholders (often pointing to mail processing centers) rather than actual overseas base locations.
Bottom line: For any geocoding, mapping, or distance calculations - use CenLat/CenLon from Premium or Deluxe editions only. The From/To coordinates are reference-only at best.
All files use UTF-8 encoding without BOM (byte order mark).
Why UTF-8? It handles international characters and special symbols that appear in U.S. place names (yes, even domestically we have diacritics and special characters).
Database-specific recommendations:
utf8mb4 character set and utf8mb4_unicode_ci collationENCODING 'UTF8' when creating the databaseNVARCHAR data types for full Unicode supportCSV Import:
-- MySQL LOAD DATA example
LOAD DATA LOCAL INFILE 'ZIP4-NY.csv'
INTO TABLE zip4_database
CHARACTER SET utf8mb4
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 ROWS;
The files don't have a BOM (byte order mark), which is good - BOMs can cause parsing issues in many tools. Just specify UTF-8 and you're set.
UpdateKey is a unique identifier assigned to each ZIP+4 record by the USPS. It's the only field guaranteed to be unique across the entire dataset.
Why not use ZIP+Plus4Low+Plus4High?
Multiple records can share the same ZIP+4 combination if they represent different address ranges or record types. The UpdateKey ensures you can uniquely identify each record.
UpdateKey characteristics:
Database schema recommendation:
CREATE TABLE zip4_database (
UpdateKey VARCHAR(10) PRIMARY KEY,
ZipCode CHAR(5) NOT NULL,
Plus4Low CHAR(4),
Plus4High CHAR(4),
-- ... other fields
INDEX idx_zipcode (ZipCode),
INDEX idx_carrier_route (CarrierRoute)
);
Pro tip: Always create an index on ZipCode for query performance, even though UpdateKey is the primary key. Most applications query by ZIP code, not UpdateKey.
We use empty strings ("") rather than NULL values.
Why? Years ago, we made a decision to use empty strings because they're easier to understand for non-technical users. Looking back, we probably should have used NULL, but we've maintained this approach for consistency and backward compatibility. You can convert them to NULL in your database if you prefer.
Key patterns:
Query patterns:
-- Find records with no building/firm name
SELECT * FROM zip4_database
WHERE BuildingFirmName = '';
-- In application code
if (record.StPreDirAbbr === '' || record.StPreDirAbbr === null) {
// No pre-directional
}
Philosophy: We only include data we can confirm with reasonable certainty. If we don't know something, we leave it empty rather than guessing. It irritates some customers, but it's the right thing to do.
These fields are legacy data that should NOT be used for any application.
The backstory: Around 2008-2010, the USPS partnered with the Census Bureau to provide address range endpoint coordinates. The plan was to update these annually. We waited years being told updates would resume, but they never did. The data became stale around 2010 and has not been maintained since.
What's affected:
FromLatitude / FromLongitude - Start point of address rangeToLatitude / ToLongitude - End point of address rangeCensusTract - Also from this same abandoned projectCensusBlock - Also from this same abandoned projectWhy we kept them: Legacy compatibility. Some customers have applications built around these fields, and we try not to remove columns once we've added them. But for new implementations - don't use them.
What to use instead:
CenLat and CenLon (Premium/Deluxe only) - these are actively maintained and accurateCensusBlockGroup (Premium/Deluxe only) - this is current and reliableBottom line: Treat FromLatitude, FromLongitude, ToLatitude, ToLongitude, CensusTract, and CensusBlock as reference-only at best, unusable at worst. Do not build applications around this data. Upgrade to Premium or Deluxe for reliable geographic coordinates.
Address ranges define which house numbers on a street segment share the same ZIP+4 code.
The three key fields:
AddressPrimaryLowNumber - Start of the rangeAddressPrimaryHighNumber - End of the rangeAddressPrimaryOddEven - Which numbers in the range are includedOddEven values:
| Code | Meaning | Example |
|---|---|---|
O |
Odd numbers only | Range 100-198, Odd = 101, 103, 105... |
E |
Even numbers only | Range 100-198, Even = 100, 102, 104... |
B |
Both odd and even | Range 100-198, Both = 100, 101, 102, 103... |
Validation logic example:
function validateAddress(houseNumber, record) {
// Check if number is in range
if (houseNumber < record.AddressPrimaryLowNumber ||
houseNumber > record.AddressPrimaryHighNumber) {
return false;
}
// Check odd/even match
const isOdd = houseNumber % 2 === 1;
const isEven = houseNumber % 2 === 0;
if (record.AddressPrimaryOddEven === 'O' && !isOdd) {
return false;
}
if (record.AddressPrimaryOddEven === 'E' && !isEven) {
return false;
}
// 'B' matches both, so no check needed
return true; // Valid!
}
Special cases:
Pro tip: When building address validation, always check both the range AND the odd/even indicator. A house number can be numerically within the range but still invalid if it doesn't match the parity requirement.
It varies significantly, but most months see 1-5% of records change.
Typical patterns:
What causes changes:
No meaningful monthly pattern beyond the Congressional District cycle. Some months are quiet, some are busier - it depends on what's happening across the country. The USPS updates reflect real-world changes in the addressing system.
Planning tip: Budget for processing 1-5% of your records each month. The transaction files make this efficient - you're not reloading the entire 48.5M record dataset.
Yes, all military ZIP+4 codes are included in every edition.
Military "state" codes:
Record counts:
What's included:
Coordinate warning:
Military records DO have coordinate data (latitude/longitude), but these coordinates should NOT be used for proximity analysis or mapping. The coordinates are administrative placeholders - often pointing to mail processing centers or collection points (like Miami for some AA codes) rather than actual overseas base locations.
How to identify military records:
SELECT * FROM zip4_database
WHERE State IN ('AA', 'AE', 'AP');
Delivery notes:
Military addresses use the standard ZIP+4 format but are delivered differently. The USPS collects mail domestically and transports it to military transit hubs, where the military handles final delivery to bases, ships, and deployed units worldwide.
P.S. We are a veteran-owned business! 🇺🇸
PO Box records (RecordType = P) have a different structure than street addresses. They represent Post Office Box ranges, not physical street locations.
PO Box record characteristics:
PExample PO Box record:
RecordType: P
StName: PO BOX
AddressPrimaryLowNumber: 1
AddressPrimaryHighNumber: 120
Plus4Low: 0001
Plus4High: 0120
CarrierRoute: P001
Query to find PO Box records:
SELECT * FROM zip4_database
WHERE RecordType = 'P';
Validation differences:
Common mistake: Trying to geocode PO Box addresses. Filter these out (RecordType = 'P') before any coordinate-based operations to avoid errors or nonsense results.
Rural Route (RR) and Highway Contract (HC) addresses are used in less densely populated areas where traditional street addressing isn't practical.
Rural Route record characteristics:
RExample Rural Route record:
RecordType: R
StName: RR 2
AddressPrimaryLowNumber: 100
AddressPrimaryHighNumber: 199
Plus4Low: 9501
Plus4High: 9599
CarrierRoute: R002
RR vs HC:
Validation logic:
Match the box number (not a house number) against the address range. Example: "HC 73 Box 125" would match a record with StName = "HC 73", AddressPrimaryLowNumber = 100, AddressPrimaryHighNumber = 150.
Rural addressing represents only 0.34% of records (164K), but it's essential for serving remote communities. Many of these addresses have since converted to city-style addressing through the LACS program.
Our data is USPS-licensed ZIP+4 data, but our database product is NOT CASS-certified.
What is CASS?
CASS (Coding Accuracy Support System) is a USPS certification program that evaluates address-matching software for accuracy in assigning ZIP+4 codes, delivery points, and carrier routes. Software must pass annual tests to maintain certification.
Can you use this data for address validation?
Yes - you can build address validation systems using this data. The data itself is from the USPS and is the same data used by CASS-certified tools. With proper implementation, you can achieve 95%+ validation accuracy.
What's the catch?
Standard validation workflow:
When you NEED CASS certification:
When our data works fine:
Bottom line: Use our data for internal validation, standardization, and analysis. If you need USPS postage discounts or official CASS certification, you'll need CASS-certified software (which uses this same USPS data under the hood).
USPS Publication 28 defines official addressing standards. Our data follows these standards, and your validation/standardization should too.
Case requirements:
Street suffix abbreviations:
| Full Name | USPS Abbr | Full Name | USPS Abbr |
|---|---|---|---|
| Street | ST | Avenue | AVE |
| Road | RD | Lane | LN |
| Drive | DR | Court | CT |
| Boulevard | BLVD | Circle | CIR |
| Parkway | PKWY | Highway | HWY |
See USPS Publication 28 Appendix C for the complete list of 100+ suffix abbreviations.
Directional abbreviations:
| Direction | USPS Abbr | Direction | USPS Abbr |
|---|---|---|---|
| North | N | South | S |
| East | E | West | W |
| Northeast | NE | Northwest | NW |
| Southeast | SE | Southwest | SW |
Secondary unit designators:
Punctuation and spacing:
Example standardization:
Input: "123 North Main Street, Apartment 5B"
Output: "123 N MAIN ST APT 5B"
Our database uses these standards throughout. Match your input addresses to these standards before querying for best results.
General Delivery is a USPS service for people without fixed addresses. Mail is addressed to "General Delivery" and held at a post office for pickup.
General Delivery record characteristics:
GB (both)9999When is it used?
How rare is it?
Only 0.06% of records (27,300 out of 48.5 million) are General Delivery. It's a niche service but important for serving transient populations and remote communities.
General Delivery mail is addressed: "John Doe, General Delivery, CITY, STATE ZIP". No street address needed.
Mainland U.S. states average 97-99% centroid completion. U.S. territories struggle with significantly lower completion rates.
Territory completion rates (Premium & Deluxe):
| Territory | Records with Centroids | Completion % |
|---|---|---|
| Puerto Rico (PR) | 215,978 / 243,589 | 88.66% |
| Guam (GU) | 5,401 / 9,430 | 57.27% |
| U.S. Virgin Islands (VI) | 737 / 8,979 | 8.21% |
| American Samoa (AS) | 1 / 170 | 0.59% |
| Northern Mariana Islands (MP) | 3 / 1,050 | 0.29% |
| Micronesia (FM) | 0 / 314 | 0.00% |
| Palau (PW) | 0 / 186 | 0.00% |
| Marshall Islands (MH) | 0 / 139 | 0.00% |
Why the difference?
Data collection and geocoding infrastructure in U.S. territories lags behind the mainland. Factors include:
What this means for your application:
Pro tip: If your application serves U.S. territories, consider falling back to ZIP Code-level coordinates (from the included ZIP Code Database) when CenLat/CenLon are empty in the ZIP+4 data.
Yes, we maintain historical ZIP+4 data with the same field structure as current data.
Historical data availability by edition:
Why different start dates?
We began offering Standard in 2007. Deluxe was introduced in 2010. Premium was created in 2018 as a mid-tier option after licensing changes made Deluxe significantly more expensive - giving cost-conscious customers a street-level centroid option.
What's included:
Common use cases:
Yes, absolutely. This is a downloadable database product, not a cloud API service. Once you download the data, it's yours to use locally.
What you can do:
Updates:
Your purchase includes 12 months of monthly updates. After your subscription period:
Perfect for:
License: Fully licensed for your organization's internal use. No external API dependencies. Your data, your infrastructure, your control.
LACS (Locatable Address Conversion System) identifies rural addresses that have been converted to city-style addressing.
What is LACS?
The USPS program that converts rural route addresses (e.g., "RR 2 Box 123") into standard street addresses (e.g., "456 County Road 789"). This improves mail delivery efficiency and emergency services response.
LACSStatus values:
| Value | Meaning | Action |
|---|---|---|
L |
LACS record - rural address converted to city-style | Use the street address in this record |
(empty) |
Not a LACS conversion | Standard processing |
Why it matters:
Query example:
-- Find all LACS-converted addresses in a ZIP
SELECT * FROM zip4_database
WHERE ZipCode = '12345'
AND LACSStatus = 'L';
Most developers can ignore this field unless you're specifically dealing with rural address conversion or address cleansing projects.
Multi-unit buildings use secondary address fields to represent apartment/suite/unit ranges.
Which records have secondary addresses?
Street (S), PO Box (P), Rural (R), and General Delivery (G) records do NOT use secondary address fields.
Secondary address fields:
AddressSecondaryAbbr - Unit designator (APT, STE, FL, UNIT, etc.)AddressSecondaryLowNumber - Start of unit rangeAddressSecondaryHighNumber - End of unit rangeAddressSecondaryOddEven - O/E/B indicator for unit numbersExample High-Rise record:
RecordType: H
StName: PARK AVE
AddressPrimaryLowNumber: 100
AddressPrimaryHighNumber: 100 (single building)
AddressSecondaryAbbr: APT
AddressSecondaryLowNumber: 101
AddressSecondaryHighNumber: 125
AddressSecondaryOddEven: O (odd apartments only)
Plus4Low: 5401
Plus4High: 5413
This represents: "100 Park Ave, APT 101-125 (odd numbers)"
Validation logic:
1. Match primary address: "100 Park Ave"
2. Check if AddressSecondaryAbbr is populated
3. If yes, validate unit number against:
- AddressSecondaryLowNumber/HighNumber range
- AddressSecondaryOddEven indicator
4. Return appropriate Plus4 code
Common issue: Missing apartment numbers in multi-unit buildings will fail validation or return incomplete ZIP+4 codes. Always collect and validate secondary address information for H and F record types.
The BaseAlternateCode distinguishes between preferred (Base) and alternate address formats.
Values:
| Code | Meaning | Usage |
|---|---|---|
B |
Base (preferred address format) | Use this for validation and standardization |
A |
Alternate (acceptable but not preferred) | Secondary format, use Base if available |
(empty) |
Not applicable | Most records - no alternate format exists |
When does this occur?
Some addresses can be written multiple ways, and the USPS designates one as "preferred":
Best practice:
-- Prioritize Base records in validation
SELECT * FROM zip4_database
WHERE ZipCode = '12345'
AND StName = 'MAIN'
AND (BaseAlternateCode = 'B' OR BaseAlternateCode = '')
ORDER BY BaseAlternateCode DESC;
In practice, most records have an empty BaseAlternateCode field - this only appears when multiple formats exist for the same deliverable address. When in doubt, prefer 'B' over 'A'.
Extremely rare, but yes - a few edge cases exist, primarily in the Connecticut/Massachusetts border area.
How rare is this?
Out of 48.5 million ZIP+4 records, only a handful of ZIP codes span state boundaries. When they do, individual ZIP+4 codes typically stay within one state - the 5-digit ZIP crosses, but the +4 segments divide along state lines.
Why does this happen?
Connecticut planning regions:
Connecticut replaced counties with planning regions in 2022, which creates additional complexity when working with historical data or cross-state analysis. See our Connecticut planning regions guide for details.
For developers:
This is such a rare edge case that most applications can safely ignore it. But if you're building compliance systems or need perfect accuracy - be aware it exists.
FinanceNumber is the USPS facility finance code for the post office serving that ZIP+4 code.
What it represents:
Format:
012345Common use cases:
For most developers:
You can safely ignore this field. It's specialized data that matters primarily to bulk mailers with USPS facility-level contracts or organizations analyzing USPS operational data.
We include it because it's in the USPS data, but 95% of our customers never use it.
The GovernmentBuilding field identifies federal, state, and local government facilities.
Values:
| Code | Meaning |
|---|---|
A | Federal government building |
B | State government building |
C | Local/municipal government building |
(empty) | Not a government facility |
Use cases:
Query example:
-- Find all federal government addresses in DC
SELECT * FROM zip4_database
WHERE State = 'DC'
AND GovernmentBuilding = 'A';
Most records have an empty GovernmentBuilding field - this is specialized metadata that matters primarily for government contractors and specific compliance scenarios.
With 48.5 million records, proper indexing is critical for query performance.
Essential indexes:
-- Primary key (already indexed)
PRIMARY KEY (UpdateKey)
-- ZIP code lookups (most common query)
CREATE INDEX idx_zipcode ON zip4_database(ZipCode);
-- Carrier route queries
CREATE INDEX idx_carrier_route ON zip4_database(CarrierRoute);
-- State-based filtering
CREATE INDEX idx_state ON zip4_database(State);
-- Composite index for street name lookups
CREATE INDEX idx_zip_street ON zip4_database(ZipCode, StName);
-- RecordType filtering
CREATE INDEX idx_recordtype ON zip4_database(RecordType);
Query optimization tips:
LIKE '%Main%')Hardware recommendations:
Fast query example:
-- Good: Uses index on ZipCode
SELECT * FROM zip4_database
WHERE ZipCode = '10001'
AND StName = 'BROADWAY'
AND AddressPrimaryLowNumber <= 123
AND AddressPrimaryHighNumber >= 123;
-- Slow: No ZipCode filter, full table scan
SELECT * FROM zip4_database
WHERE StName = 'MAIN ST';
Pro tip: Most address validation queries complete in under 10ms with proper indexes. If your queries are slow, you're probably missing the ZipCode index.
No, the license is for your organization's internal use only.
What you CAN do:
What you CANNOT do:
Common scenarios:
ALLOWED: You're a SaaS company building an address validation feature into your application. Customers use YOUR tool, which uses OUR data internally. The customers never see or download the raw ZIP+4 database.
NOT ALLOWED: You're a consultant who wants to provide the ZIP+4 database files to your clients as part of a project deliverable. Each client needs their own license.
Need to provide data to clients?
We offer volume licensing and reseller programs. Contact us at info@zip-codes.com to discuss options.
License enforcement: We take license compliance seriously. Violations can result in license termination and legal action. When in doubt, contact us - we're happy to clarify.
UrbanizationKey is used exclusively for Puerto Rico addresses to identify urbanization names (neighborhoods/districts).
What is an Urbanization?
In Puerto Rico, an "urbanización" is a community or neighborhood name that appears in mailing addresses. It's similar to a subdivision name but more formal and required by USPS for proper mail delivery.
Address format example:
JUAN GARCIA
URB LAS LOMAS 123 CALLE PRINCIPAL
SAN JUAN PR 00926-1234
"URB LAS LOMAS" is the urbanization name
How to use UrbanizationKey:
The UrbanizationKey in the ZIP+4 Database joins to the PreferredLastLineKey in the ZIP Code Database to retrieve the actual urbanization name.
-- Get urbanization name for Puerto Rico addresses
SELECT
z4.ZipCode,
z4.StName,
zc.City AS UrbanizationName
FROM zip4_database z4
LEFT JOIN zipcode_database zc
ON z4.UrbanizationKey = zc.PreferredLastLineKey
WHERE z4.State = 'PR'
AND z4.UrbanizationKey != '';
When is it populated?
Why it matters:
Unless you're specifically working with Puerto Rico addresses, you can ignore this field. For PR addresses, it's essential for proper USPS formatting.
We provide free technical support to all customers.
Email: info@zip-codes.com | Phone: 1-800-425-1169