Automate Your Data Updates
Download our monthly-updated databases automatically with FTP, SFTP or FTPS. Set it once and your systems stay current with USPS and Canada Post licensed data — no manual downloads required.
Connection at a glance
- FTP address
ftp.zip-codes.com- Static IP
216.250.119.190- Ports
2122222990- Username
- Your account username
- Password
- Your account password
Connection options
Choose the protocol that suits your environment. Any of these ports may need a firewall allowance.
| Port | Protocol | Key type | Notes |
|---|---|---|---|
21 | FTP | - | Standard unencrypted connection |
22 | SFTP | ssh-dss | Legacy SSH key for broad compatibility |
222 | SFTP | ECDSA | Modern SSH key for strict security policies |
990 | FTPS | - | Implicit SSL/TLS encryption |
ssh-dss key for broad
compatibility with legacy systems. Port 222 uses a modern ECDSA key for
organizations whose security policies or technology prohibit ssh-dss. We maintain both ports
separately to accommodate varying customer security requirements, and both will likely
require firewall allowance. We can also configure your own public SSH key for
authentication — contact us to set that up.
990 with an Implicit
connection. Most firewalls block data transfer with Explicit connections, so if your client
connects but then times out retrieving a directory listing, switching to Implicit will
resolve it.
216.250.119.190.
Sample scripts
Copy one and go. Replace the placeholders with your own credentials and your folder or file names.
curl - List Directory Contents Linux / macOS / Windows
View the files available in your folder:
curl -u USERNAME:PASSWORD ftp://ftp.zip-codes.com/FOLDER/
Example: curl -u jsmith:mypassword ftp://ftp.zip-codes.com/ZIP-DELUXE/
curl - Download a File Linux / macOS / Windows
Download a specific file to your current directory:
curl -u USERNAME:PASSWORD -o FILENAME.zip ftp://ftp.zip-codes.com/FOLDER/FILENAME.zip
Example: curl -u jsmith:mypassword -o zip-codes-database-DELUXE-csv.zip ftp://ftp.zip-codes.com/ZIP-DELUXE/zip-codes-database-DELUXE-csv.zip
wget - Automated Download Linux / macOS
Ideal for cron jobs and automated scripts:
wget --ftp-user=USERNAME --ftp-password=PASSWORD ftp://ftp.zip-codes.com/FOLDER/FILENAME.zip -O /path/to/save/FILENAME.zip
Sample Crontab Entry (runs on the 5th of each month at 2 AM):
0 2 5 * * wget --ftp-user=USERNAME --ftp-password=PASSWORD ftp://ftp.zip-codes.com/ZIP-DELUXE/zip-codes-database-DELUXE-csv.zip -O /data/zipcode-update.zip
PowerShell - Windows Download Script Windows
For Windows servers and enterprise environments:
# FTP Download Script for Windows
$ftpUrl = "ftp://ftp.zip-codes.com/FOLDER/FILENAME.zip"
$username = "USERNAME"
$password = "PASSWORD"
$localPath = "C:\Data\FILENAME.zip"
$webClient = New-Object System.Net.WebClient
$webClient.Credentials = New-Object System.Net.NetworkCredential($username, $password)
$webClient.DownloadFile($ftpUrl, $localPath)
Write-Host "Download complete: $localPath"
SFTP - Secure Command Line Secure
For secure connections using SSH. Use Port 222 for modern ECDSA key:
# Connect via SFTP (Port 222 for ECDSA)
sftp -P 222 USERNAME@ftp.zip-codes.com
# Once connected, navigate and download:
cd FOLDER
get FILENAME.zip
exit
Note: Use -P 22 for legacy ssh-dss key if Port 222 is unavailable in your environment.
Automation best practice
Set your scripts up once and let them run reliably month after month.
When to run
Do not run on publish day — leave a buffer, because publishing occasionally slips.
| Database | Published | Run your script |
|---|---|---|
| US ZIP Code | 1st | 5th |
| US ZIP+4 | 1st | 5th |
| Canadian | ~10th | 15th |
| Area Code | 1st | 5th |
Avoid needless downloads
- Check the file’s last modified date before downloading.
- Compare file timestamps against your last successful import.
- If there is no update, reschedule the job for a day or two later.
- Log download timestamps so you have an audit trail.
Full file names are consistent every month, so you can hardcode them in your scripts.
Cron job with a date check
#!/bin/bash
# Download ZIP Code database only if updated
FTP_USER="USERNAME"
FTP_PASS="PASSWORD"
REMOTE_FILE="ftp://ftp.zip-codes.com/ZIP-DELUXE/zip-codes-database-DELUXE-csv.zip"
LOCAL_FILE="/data/zipcode-current.zip"
LAST_DOWNLOAD="/data/.last-download-timestamp"
# Get remote file timestamp
REMOTE_DATE=$(curl -s -I -u $FTP_USER:$FTP_PASS $REMOTE_FILE | grep -i "Last-Modified" | cut -d' ' -f2-)
# Compare with last download
if [ -f "$LAST_DOWNLOAD" ]; then
LAST_DATE=$(cat $LAST_DOWNLOAD)
if [ "$REMOTE_DATE" == "$LAST_DATE" ]; then
echo "No update available. Skipping download."
exit 0
fi
fi
# Download new file
curl -u $FTP_USER:$FTP_PASS -o $LOCAL_FILE $REMOTE_FILE
echo $REMOTE_DATE > $LAST_DOWNLOAD
echo "Downloaded updated file: $REMOTE_DATE"
Reads the remote file’s timestamp first and exits without downloading when nothing has changed.
Files and naming
File names do not change from month to month, so a script can rely on them.
File naming. Every month we publish the full data set under the same name:
zip-codes-database-DELUXE-csv.zip
zip-codes-database-STANDARD-csv.zip
canadian-postal-codes-DELUXE-csv.zip
Check the last modified date to confirm you have the newest one.
Folder names. Each product sits in its own folder:
| ZIP Code: | ZIP-STANDARD, ZIP-DELUXE, ZIP-BUSINESS |
| ZIP+4: | ZIP4-STANDARD, ZIP4-DELUXE |
| Canadian: | CAN-STANDARD, CAN-DELUXE, CAN-BUSINESS |
| Area Code: | NPANXX-STANDARD, NPANXX-DELUXE |
Your own folder access is listed in your FTP welcome email.
File sizes, compressed CSV
| Product | Edition | Size |
|---|---|---|
| US ZIP Code | Standard | ~3.5 MB |
| Deluxe | ~5 MB | |
| Business | ~50 MB | |
| US ZIP+4 | Standard | ~1.25 GB |
| Premium | ~1.30 GB | |
| Deluxe | ~1.60 GB | |
| Canadian Postal Code | Standard | ~9 MB |
| Deluxe | ~10 MB | |
| Business | ~25 MB | |
| Area Code (NPANXX) | Standard | ~3 MB |
| Deluxe | ~10 MB |
Frequently asked questions
The ones we are actually asked.
Getting Started
- How do I request FTP access?
- If you are a current subscriber, email us at info@zip-codes.com and include your account username. We'll activate FTP access within minutes and send you a confirmation email with all the connection details.
- Where do I find my FTP credentials?
- Your FTP credentials are the same as your account login. You can manage your FTP password and view your assigned folders from your account dashboard.
- Can I upload, edit, or delete files?
- No. All FTP accounts have read-only access. You can download files from your subscribed folders, but you cannot upload, modify, or delete any files. This is for security purposes.
- What FTP clients do you recommend?
- We recommend using a dedicated FTP client to browse folder structures and test connections. Popular options include FileZilla, WinSCP, Cyberduck, and SmartFTP. All support FTP, SFTP, and FTPS protocols.
Connection & Security
- Do you support secure connections (SFTP/FTPS)?
- Absolutely. We support SFTP on Ports 22 and 222, and FTPS (Implicit SSL/TLS) on Port 990. This allows us to comply with HIPAA, corporate security policies, and other requirements for secure data transfer.
- What's the difference between Port 22 and Port 222?
- Port 22 uses an older
ssh-dsskey for compatibility with legacy systems. Port 222 uses a modernECDSAkey for organizations whose security policies prohibit ssh-dss. Both are maintained separately, and both may require firewall allowance. - Can I use my own SSH public key?
- Yes. We can configure your public SSH key for password-less authentication. Contact us to set this up.
- Is the IP address static?
- Yes. Our FTP server IP address (
216.250.119.190) is static and will not change. You can safely use it to configure firewall rules. - Can you push data to my server instead?
- Unfortunately, we cannot push data to your server. Our FTP service is pull-only - you'll need to set up scripts to download from our server on your schedule.
Files & Data
- When do you publish new data?
- US databases (ZIP Code, ZIP+4, Area Code) are published on the 1st of each month. Canadian databases are published around the 10th, though this can vary. We recommend scheduling scripts for the 5th (US) and 15th (Canadian) to ensure you capture the latest data even if there's a delay.
- Do file names change each month?
- No. Full data set file names remain consistent each month (e.g.,
zip-codes-database-DELUXE-csv.zip). You can hardcode these in your automation scripts. Check the file's last modified date to confirm the latest version.
URL Construction
- Can I use an FTP URL string?
Yes! You can construct a URL for direct FTP access. Use this template:
ftp://USERNAME:PASSWORD@ftp.zip-codes.com:21/FOLDER/FILENAME.zipExample:
ftp://jsmith:mypassword@ftp.zip-codes.com:21/ZIP-DELUXE/zip-codes-database-DELUXE-csv.zipSecurity note: Credentials in URLs may appear in browser history, shell history, and system logs. For production use, consider more secure methods.
When it will not connect
Four things account for nearly every support call about FTP.
For FTPS connections, switch to Implicit mode on Port 990. Explicit connections are often blocked by firewalls.
Verify your firewall allows outbound connections to 216.250.119.190 on your chosen port (21, 22, 222, or 990).
Try Port 222 instead. It uses a modern ECDSA key if your system blocks the older ssh-dss algorithm.
Check the file's last modified date. US data publishes on the 1st; Canadian around the 10th. Occasional delays may occur.
Ready to get started?
Request FTP access for your account and start automating your data updates today.
Already have FTP access? Your folders and password are in your account.
Request FTP access Manage your FTP settings