The Truly Free Postal Code API: 1,000 Queries, No Credit Card, No Catch
Most postal code APIs require a credit card before you can make a single request. Google Maps API, HERE, TomTom -- they all gate access behind billing setup, even for a quick prototype.
PostalDataPI doesn't. Sign up, get your key, start making requests. No credit card. No trial period. No expiration.
Here's what the free tier actually includes and whether it's enough for your project.
What You Get
Every new account starts with 1,000 free queries. That covers:
- A lookup endpoint (city, state, coordinates for any postal code)
- A validation endpoint (does this code actually exist?)
- A city search endpoint (all codes for a given city)
- 70+ countries -- US, UK, Germany, Japan, Canada, and more
The free queries don't expire. They sit in your balance until you use them.
How It Compares
For a broader look at why postal code API pricing is often frustrating, see Why Postal Code APIs Cost Too Much.
| Provider | Free Tier | Credit Card Required | Notes |
|----------|-----------|---------------------|-------|
| PostalDataPI | 1,000 queries | No | Permanent, no expiration |
| Google Maps Geocoding | $200/month credit | Yes | Card required to activate |
| HERE Geocoding | 1,000/month | Yes | Resets monthly |
| OpenCage | 2,500/day | No | Testing only; account deleted after 3 months inactivity |
| Zipcodebase | 5,000/month | No | Resets monthly |
The credit card question is the biggest differentiator for prototyping. Google and HERE both require billing setup before you can make a single request -- even if you'll never exceed the free allowance.
OpenCage and Zipcodebase also skip the credit card, but their free tiers reset (or expire).
PostalDataPI's 1,000 queries are permanent.
For a side project that makes occasional lookups over months, permanent beats monthly reset.
Is 1,000 Queries Enough?
Depends entirely on your use case. Some examples:
Almost certainly enough:- Validating addresses in a signup form for a side project
- Enriching a one-time dataset (1,000 rows of addresses)
- Prototyping a feature before committing to a paid plan
- An internal tool used by a small team
- An e-commerce checkout form (scales with orders)
- A SaaS app with many users submitting addresses
- A high-volume batch job
Trying It in 90 Seconds
Sign up at postaldatapi.com/register -- just OAuth, no form to fill out. Need a full walkthrough? See the getting started guide. Your API key is on the account page immediately.
First lookup:
curl -s -X POST https://postaldatapi.com/api/lookup \
-H "Content-Type: application/json" \
-d '{"zipcode": "90210", "country": "US", "apiKey": "YOUR_KEY"}'
{"city": "Beverly Hills", "state": "California", "ST": "CA", "latitude": 34.1031, "longitude": -118.4163}
Works the same for any country -- just change the country field:
# Germany
curl -s -X POST https://postaldatapi.com/api/lookup \
-H "Content-Type: application/json" \
-d '{"zipcode": "10115", "country": "DE", "apiKey": "YOUR_KEY"}'
# {"city": "Berlin", ...}
# UK
curl -s -X POST https://postaldatapi.com/api/lookup \
-H "Content-Type: application/json" \
-d '{"zipcode": "SW1A", "country": "GB", "apiKey": "YOUR_KEY"}'
# {"city": "Westminster Abbey", ...}
To check whether a code actually exists (not just format validation):
curl -s -X POST https://postaldatapi.com/api/validate \
-H "Content-Type: application/json" \
-d '{"zipcode": "99999", "country": "US", "apiKey": "YOUR_KEY"}'
# {"valid": false}
curl -s -X POST https://postaldatapi.com/api/validate \
-H "Content-Type: application/json" \
-d '{"zipcode": "90210", "country": "US", "apiKey": "YOUR_KEY"}'
# {"valid": true}
With the Python SDK
If you'd rather skip the HTTP boilerplate:
pip install postaldatapi
from postaldatapi import PostalDataPI
client = PostalDataPI(api_key="YOUR_KEY")
result = client.lookup("90210")
print(result.city) # Beverly Hills
print(result.latitude) # 34.0901
# Any country
de = client.lookup("10115", country="DE")
print(de.city) # Berlin
# Validate
print(client.validate("99999").valid) # False
print(client.validate("90210").valid) # True
The Node.js SDK works the same way (npm install postaldatapi). Full docs at docs.postaldatapi.com.
The Bottom Line
If you need a postal code API without the credit card friction:
- Sign up takes 30 seconds
- 1,000 free queries, no expiration
- Works for US and 70+ other countries
- If you outgrow the free tier, it's $0.000028/query -- no surprises
Sign up free -- 1,000 queries, no credit card required.