What is this?

A free and super fast GeoIP service.

Why is this?

Because it's a faster and cheaper way to get GeoIP data without paying a fortune on subscriptions.

How does it work?

dig -t txt 188.12.23.34.geo.ipns.cc
=> 188.12.23.34.geo.ipns.cc. 86400 IN	TXT	"|44.1307|10.0218|Fosdinovo|54035||Tuscany|Tuscany|IT|Italy|Europe"

What is all that?

ASN Long Lat City Postcode State County Region Country code Country Continent
44.1307 10.0218 Fosdinovo 54035 Tuscany Tuscany IT Italy Europe

Notes

dig -t txt 145.12.23.34.geo.ipns.cc
=> "|52.3824|4.8995|Unknown|0||Unknown|Unknown|NL|The Netherlands|Europe"
dig -t txt 66.249.64.100.geo.ipns.cc
=> "|37.43|-78.65|GoogleBot||||VA|US|United States|"
dig -t txt 136.124.11.10.geo.ipns.cc
=> "|37.43|-78.65|Google||||VA|US|United States|"
dig -t txt 148.251.54.44.geo.ipns.cc
=> "|0|0|BadBot||||Unknown|XX|International|"

AI bots that send tens of thousands of requests to your servers eating up your resources so that some rich corporations can make tens of billions of dollars will show up as AIBot

dig -t txt 13.65.138.96.geo.ipns.cc
=> "|0|0|AIBot||||Unknown|XX|International|"

But why?

Almost any application uses a GeoIP service in some way: enhancing UX by pre-filling a signup/purchase/shipping form, logging traffic, geofencing, account security, fighting payment fraud, KYC, recommendation engines... to name just a few.

At some point we all end up integrating some 3rd party GeoIP service that may end up quite expensive as traffic builds up.

Sure, you could add local caching, even local IP databases to lower the bills but at the end of the day you're spending something much more valuable: time.

This service aims to solve all that.

Cheaper

Stop paying two or three figures for commercial services. This service is free.

Faster

REST API calls to 3rd party providers can take some good 50-100ms. This service typically replies in under 10ms, your application will become noticeably faster.

How much faster is it?

First time queries take some 100ms. Cached queries however take under 10ms. Yes, that is correct, less than 10 milliseconds.

More reliable

Once a query is resolved your DNS resolver keeps it cached for 1 or more days. And if yours won't, other resolvers downstream will. This renders short outages irrelevant.

How?

You send your request as a DNS query. Your resolver and other resolvers upstream either reply to your query in milliseconds or forward the query to our GeoIP service, which is a clever combination of a custom DNS resolver and a set of microservices that search different IP databases in order to return your data.

Is it easy to work with?

It's a lot easier than integrating a 3rd party GeoIP service. These come with dependencies to install and you must spend some time putting together code and tests so that it works properly.

Most languages have native support for DNS resolution, in most (civilized) cases without additional dependencies, see code samples.

Roadmap

If this gains positive feedback/traction I will work on scaling for capacity and contract a commercial, higher accuracy GeoIP database.

IPv6 support is also high priority.

Can I help?

Not really, there's not much code to write and the architecture is quite simple, but here are a few ways you can help

Code samples

You're welcome to send a PR with code samples in your preferred language.

Suggestions

Please open an issue if you have feedback or ideas.

IP lists

If you have up to date lists of IP addresses please let us know.

Bug reports

If something isn't working properly please let us know

Credits

Website classless CSS theme something-something

Markdown to HTML converter

License

Code samples license: WTFPL