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) bashCopiarEditar
docker 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
andisort
- 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.