
Show HN: ZipLocate, a free API for zip code geolocation - nathancahill
http://ziplocate.us/
======
couchand
This reminded me of a little suggestion by Bret Victor
([http://worrydream.com/MagicInk/#reducing_interaction](http://worrydream.com/MagicInk/#reducing_interaction)).

 _Imagine honing in on familiar areas simply by typing the first few digits of
a zip code—type “9” to immediately zoom into the US west coast, followed by
“4” to zoom into the SF bay area and then “5” for the east bay. Because of the
immediate feedback, the user can stop typing when she gets close enough, and
use relative navigation from there._

I coded up an example a little while ago ([http://andrewcou.ch/zip-to-
it/](http://andrewcou.ch/zip-to-it/)).

~~~
ericfrederich
Are you keeping stats on your request? I'm curious how high 90210 stands out.

~~~
couchand
That's a great idea. (Un)fortunately it's all client-side.

~~~
syntern
A Google Analytics tracking of the events would be just fine for this goal.

~~~
couchand
Oh, great idea! I've never dived (dove??) into event tracking. Is something
like this what I want?

    
    
        ga('send', 'event', 'input', 'search', 'zip', zipCode);

~~~
timboslice
That will do the trick!

------
chrismeller
You should probably mention the caveats when using ZCTA's to get a list of
zips... Namely that they don't include all zip codes, don't get updated as
quickly, and may not actually represent the same thing as a zip code:

[http://catalog.data.gov/dataset/tiger-line-
shapefile-2013-20...](http://catalog.data.gov/dataset/tiger-line-
shapefile-2013-2010-nation-u-s-2010-census-5-digit-zip-code-tabulation-)

~~~
nathancahill
Yes, you're right. Added to the page.

------
jgalt212
This is a pretty small and mostly importantly, relatively static database. Why
not cache it locally rather than access as a web service.

That being said, zip+4 is a bigger DB. Although, I have heard those last four
digits are meaningless.

[http://en.wikipedia.org/wiki/Newman_%28Seinfeld%29](http://en.wikipedia.org/wiki/Newman_%28Seinfeld%29)

------
gkoberger
Do you have any plans to do the other way around? That's important for
converting the browser's geolocation data into something usable.

~~~
nostromo
We have a free API that includes IP to approximate area code, but not zip
code, if that's of use to you.

[https://www.dailycred.com/api/info.json](https://www.dailycred.com/api/info.json)

A few of our clients needed this, so we just made it open to everyone.

It's based on GeoIP and ua-parser.

[http://dev.maxmind.com/geoip/](http://dev.maxmind.com/geoip/)

[https://github.com/tobie/ua-parser](https://github.com/tobie/ua-parser)

------
dsernst
Does what it says. Simple, free, & open source. What could be better?

------
mikkom
This might sound silly but you should actually have a "plus" plan or something
that you charge for - free services have a problem of suddenly disappearing
without any notice. Paid customers ensure that service will be available in
the future too.

~~~
bluthru
Or a donate/flattr button.

~~~
nathancahill
Fair enough, added.

------
bajsejohannes
Very nice. Small enough that I can read and understand every line of code, and
it still does something useful.

One thing I don't get, is why you're not using the zip code as the primary key
(or have any other sort of index on it). The id isn't even used as far as I
can tell. Is it just blazingly fast enough as it is?

~~~
nathancahill
The database is mostly an abstraction layer for other people to get up and
running with the API. On ZipLocate.us everything is cached in memory using
Varnish, so API calls never even hit the database. When data is updated,
updated zip codes are just refreshed in the cache.

Like disdev, I always use an auto-incrementing id, but you're right that the
index should be on the zip code instead of the id.

------
johnnylambada
Thanks nathancahill!

Here's a 44 line node script to exercise it with:

$ wget
[https://raw.githubusercontent.com/johnnylambada/commandline-...](https://raw.githubusercontent.com/johnnylambada/commandline-
api/v0.0.1/ziplocate)

$ chmod a+x ziplocate

$ ./ziplocate ll -z 90210

latitude : 34.0908301410233

longitude: -118.409045888318

------
danmanstx
Ziptastic is another option that seems to work well.
[http://getziptastic.com](http://getziptastic.com) also plays nice with
javascript and has a ruby gem.

~~~
nathancahill
Ziptastic is awesome. Part of the inspiration to build ZipLocate.

------
shekhar101
Nice and free. Thanks a lot. Will suggest you to add Gittip. Might help you in
releasing some more similar projects for free.

~~~
nathancahill
Thanks, added.

------
riquito
This made me remember a cool analogous project

[http://api.zippopotam.us/](http://api.zippopotam.us/)

------
cel1ne
Why not use Geonames: [http://www.geonames.org/](http://www.geonames.org/) ?

~~~
cel1ne
You can also download all the zip-codes for many countries from them:
[http://download.geonames.org/export/zip/](http://download.geonames.org/export/zip/)

------
ins0
really nice thanks! i made a small php class to get work done.
[https://github.com/ins0/php-simple-ziplocate](https://github.com/ins0/php-
simple-ziplocate)

------
cjlm
Anything similar to this available for Canada?

------
jdimov
Is there something similar for UK postcodes?

~~~
mseebach
Unfortunately, while the data definitely exists (and UK postal codes are much
smaller), it's copyrighted by the Royal Mail.

~~~
petepete
CodePoint Open has been freely available for a number of years. It doesn't
include delivery endpoints but for geolocating English, Scottish and Welsh
(but, alas, not Northern Irish) postcodes it's fine.

[http://www.ordnancesurvey.co.uk/business-and-
government/prod...](http://www.ordnancesurvey.co.uk/business-and-
government/products/code-point-open.html)

~~~
nly
Unfortunately we lost the postcode database as a public asset in 2013 when the
UK government sold off Royal Mail[0], despite the database being compiled at
huge cost to the tax payer.

This is a real shame as people had to campaign for years before the data was
made freely available to begin with.[1]

Hopefully though, as long as the government still holds a large stake, we'll
at least have Code Point. The Royal Mail also offer some developer options[2]

[0]
[http://www.bbc.co.uk/news/business-26605375](http://www.bbc.co.uk/news/business-26605375)

[1] [http://www.theguardian.com/technology/2009/jul/22/free-
our-d...](http://www.theguardian.com/technology/2009/jul/22/free-our-data)

[2]
[http://www.poweredbypaf.com/developer/](http://www.poweredbypaf.com/developer/)

------
moontear
Looks nice, kudos for offering it for free - 5$/month is still not nothing. It
would be grand if you included "US" somewhere besides the domain, because the
service geolocates US zipcodes, not international zip codes.

~~~
dragonwriter
ZIP codes are the name for US-specific postal codes. International postal
codes are not zip codes.

~~~
DoubleMalt
Very often ZIP code is used as alias for postal code even in international
context. I see "zip code" more often than "postal code" on international
address forms.

~~~
jnbiche
Can you show me an example of an address form for non-US-based organization
that exclusively uses the term "zip code"?

I'm not saying they don't exist, but I'm not sure I've ever seen one.

The US-based organizations using the term "zip code" for non-US addresses are
doing so either out of ignorance or expediency, since fitting "zip/postal
code" into a space is sometimes not possible.

~~~
mseebach
I've seen it quite a bit in especially older e-commerce software, presumably
developed for US use, then "internationalized" as a bit of an afterthought. I
also think that many non-native-english-speakers assume zip code is the
appropriate translation of postal code since it features rather prominently in
(exported) US pop culture.

That doesn't make it correct, and I don't believe that some peoples
unequivocally wrong usage of a term should oblige other people to qualify
their correct and unambiguous usage of it.

