Skip to main content

Self-hosted IP geolocation library and API with currency support that works completely offline!

Project description

GeoIP API

GeoIP API

PyPI Package FastAPI Docker

✨ A self-hosted IP geolocation API and Python package that works completely offline! 🚀

- Deploy your own private GeoIP service with complete control over your data and infrastructure -
Powered by MaxMind's GeoLite2 databases ツ

✨ Features

  • 🌍 Fast and reliable IP geolocation lookups
  • 🔒 Self-hosted solution with no external API dependencies
  • 🛠️ Dual functionality: Python package and REST API
  • 🐳 Easy deployment with Docker and cloud platforms
  • 📊 Get country, city, coordinates, timezone, ISP, and ASN data
  • 🎨 Beautiful, interactive demo UI for testing
  • 🚀 Built with FastAPI for high performance
  • 📦 Automatic GeoLite2 database downloads and updates

🛠️ Usage

Python Package

Installation

pip install geoip-py

Basic Usage

from geoip_api import GeoIPLookup

# Initialize the lookup service (downloads DB files if needed)
lookup = GeoIPLookup(download_if_missing=True)

# Look up an IP address
result = lookup.lookup('8.8.8.8')
print(result)

# Output:
# {
#   "code": "US",
#   "country": "United States",
#   "city": "Mountain View",
#   "lat": 37.4056,
#   "lon": -122.0775,
#   "tz": "America/Los_Angeles",
#   "isp": "Google LLC",
#   "asn": 15169
# }

REST API

✅ Demo : https://geoip-api.malith.dev/

Simple Endpoints

# Simple path parameter
https://your-domain.com/8.8.8.8

# Query parameter
https://your-domain.com/?ip=8.8.8.8

Standard API Endpoint

https://your-domain.com/api/v1/geoip/lookup/8.8.8.8

Response Format

{
  "ip": "8.8.8.8",
  "code": "US",
  "country": "United States",
  "city": "Mountain View",
  "lat": 37.4056,
  "lon": -122.0775,
  "tz": "America/Los_Angeles",
  "isp": "Google LLC",
  "asn": 15169
}

📦 Deployment Options

🚀 Cloud Deployment

One-click deployment to popular platforms:

Deploy with heroku Deploy to Netlify

Deploy to Railway Deploy to Render

🐳 Docker

The fastest way to deploy your own GeoIP API:

docker pull malithrukshan/geoip-api
docker run -p 8000:8000 malithrukshan/geoip-api

Your API will be available at http://localhost:8000

Docker Compose

Create a docker-compose.yml file:

version: '3.8'

services:
  geoip-api:
    image: malithrukshan/geoip-api
    ports:
      - "8000:8000"
    # volumes:
    #   - ./data:/app/api/db
    environment:
      - ENVIRONMENT=production

Then run:

docker-compose up -d

🔨 Building Docker Image Locally

If you want to build and run the Docker image from source:

  1. Clone the repository
    git clone https://github.com/Malith-Rukshan/geoip-api.git
    cd geoip-api
    
  2. Build the Docker image
    docker build -t geoip-api .
    
  3. Run the container
    docker run -p 8000:8000 geoip-api
    
  4. Access the API at http://localhost:8000

💻 Local Development

Prerequisites

  • Python 3.9+
  • pip

Setup

  1. Clone the repository

    git clone https://github.com/Malith-Rukshan/geoip-api.git
    cd geoip-api
    
  2. Install dependencies

    pip install -r requirements/dev.txt
    pip install -e .
    
  3. Download GeoIP databases (optional, will be downloaded automatically if needed)

    mkdir -p ~/.geoip_api
    curl -L -o ~/.geoip_api/GeoLite2-City.mmdb https://github.com/P3TERX/GeoLite.mmdb/raw/download/GeoLite2-City.mmdb
    curl -L -o ~/.geoip_api/GeoLite2-ASN.mmdb https://github.com/P3TERX/GeoLite.mmdb/raw/download/GeoLite2-ASN.mmdb
    
  4. Run the FastAPI application

    uvicorn api.main:app --reload
    
  5. Visit http://localhost:8000 to see the API in action

Running Tests

pytest
black --check src tests api
mypy src tests api

🌐 Use Cases

  • Security & Compliance: Enhance security systems with IP-based threat detection while maintaining data sovereignty
  • Content Localization: Deliver region-specific content based on visitor location without sharing user data
  • Analytics: Analyze traffic patterns and user demographics with geographic data that remains within your infrastructure
  • Fraud Prevention: Identify suspicious login attempts based on geographic anomalies
  • Development Environment: Use a local GeoIP service in your development environment without external API dependencies

📜 License

This project is licensed under the MIT License - see the LICENSE file for details.

⚠️ Database License Notice

This project uses GeoLite2 data created by MaxMind, available from https://www.maxmind.com. The GeoLite2 databases are licensed under the Creative Commons Attribution-ShareAlike 4.0 International License.

🔧 Acknowledgements

🇺🇳 Flags By : Animated Country Flags

🤝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

🌟 Support and Community

If you found this project helpful, please give it a ⭐ on GitHub. This helps more developers discover the project! 🫶

📬 Contact

If you have any questions, feedback, or just want to say hi, you can reach out to me:

🧑‍💻 Built with 💖 by Malith Rukshan

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

geoip_py-1.0.2.tar.gz (13.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

geoip_py-1.0.2-py3-none-any.whl (11.5 kB view details)

Uploaded Python 3

File details

Details for the file geoip_py-1.0.2.tar.gz.

File metadata

  • Download URL: geoip_py-1.0.2.tar.gz
  • Upload date:
  • Size: 13.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for geoip_py-1.0.2.tar.gz
Algorithm Hash digest
SHA256 55a33866ef7360ab55fe792689ee22c4a2c362554c4662a7045c26b04ea08f4d
MD5 4d2eaef2e82bf8ba4e9b0ec6025f282d
BLAKE2b-256 66d27fe129ecb842b857c8b56a65fb48a984faeaa070fecf4df21ad57d976643

See more details on using hashes here.

File details

Details for the file geoip_py-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: geoip_py-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 11.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for geoip_py-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 e161360a34c23a998d7c6133d586af3e85e108594e1816549fdb70b701acfebd
MD5 c816e545a451c77dbe6f33e8ebfc7b2c
BLAKE2b-256 f12432a63af5720f81d86be487fa9f842cd3974a66608c264d2ee7c4815adead

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page