With geolocation, WHOIS lookup, and reverse DNS wrapped in a lightweight Flask container, Gunter is quickly becoming a go-to solution for teams building IP-aware applications.

When building modern applications, IP intelligence is often critical—whether it’s for security, compliance, analytics, or user experience customization. But running reliable Geo-IP and WHOIS services can be tedious, costly, or difficult to scale.

That’s where Gunter comes in — an open-source microservice developed by Needful Apps that offers a minimal but powerful API to handle geolocation, WHOIS, and reverse DNS resolution for IP addresses and domains. It comes with automatic GeoLite2 database updates, Swagger/OpenAPI docs, and is fully Docker-ready.

A Flask-Based Microservice, Ready to Deploy

Gunter is built on Flask, one of Python’s most popular micro web frameworks, and offers a clean, RESTful API that’s both easy to deploy and easy to integrate. With just a single Docker command, developers can have Gunter running at http://localhost:6600, ready to serve requests such as:

  • /api/geo-lookup/<ip> – Geolocation by IP address or domain
  • /api/whois/<target> – WHOIS data for any IP or domain
  • /api/status – Check the GeoLite2 database freshness
  • /api/docs – Swagger UI for testing and documentation

“We wanted a tool that just works — clean API, fresh data, simple deployment. Gunter delivered on all fronts,” says Carlos Álvarez, a sysadmin at a European fintech startup.

Ideal for Edge Services, Firewalls, and Developer Tools

Thanks to its small footprint and modern design, Gunter is especially suited for:

  • Custom firewalls or edge security tools
  • Internal developer dashboards
  • Log analysis pipelines
  • Compliance and KYC systems
  • Email or form anti-fraud verifications

It automatically updates its MaxMind GeoLite2-City database, so you always have fresh city-level geolocation data without manual downloads or licensing headaches.

Built for Containers, Built for Scale

Gunter can be deployed with:

  • Docker (recommended) bashCopiarEditardocker run -d -p 6600:6600 ghcr.io/needful-apps/gunter:latest
  • Podman
  • Docker Compose for dev/prod setups
  • Local install for those who prefer traditional Python workflows

And for production-grade setups, admins can disable the /status and /docs endpoints via environment variables.

GUNTER_ENABLE_STATUS=false  
GUNTER_ENABLE_API_DOCS=false

Example: Getting Geolocation for an IP

curl http://localhost:6600/api/geo-lookup/8.8.8.8

Response:

{
"ip": "8.8.8.8",
"city": "Mountain View",
"country": "United States",
"latitude": 37.4056,
"longitude": -122.0775,
"whois": {
"org": "Google LLC",
"updated": "2025-07-15"
}
}

Full API with Swagger and Language Support

Gunter ships with full OpenAPI documentation, easily browsed through Swagger UI. It also supports response localization via a lang query parameter — useful for multilingual interfaces or region-specific dashboards.

Developer Experience: Pre-Commit, Formatting, CLI

Gunter also includes dev-friendly tooling:

  • Pre-commit hooks for code formatting with black and isort
  • Scripts to keep code clean
  • Modular design for easy extension
  • MIT license for full freedom in commercial use

Acknowledgements and Community

Gunter uses MaxMind GeoLite2, one of the most trusted open databases in the IP location industry. The project is actively maintained and open to contributions.

“The beauty of Gunter is in its simplicity. It does exactly what it says — and nothing more — making it ideal for microservice-based architectures,” notes Peter Wong, contributor and DevOps engineer.


Try It Now

🔧 Demo locally with:
docker run -d -p 6600:6600 ghcr.io/needful-apps/gunter:latest

🔗 GitHub: github.com/needful-apps/Gunter

🌍 Powered by open source, built for speed.

Scroll to Top