Skip to main content

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

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

🤝 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

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.0.tar.gz (11.4 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.0-py3-none-any.whl (9.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: geoip_py-1.0.0.tar.gz
  • Upload date:
  • Size: 11.4 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.0.tar.gz
Algorithm Hash digest
SHA256 c5e1c55dba761600bd9e3ee42ba65c152ecaf167ecb8b30ee41f82fe107fa986
MD5 3c27a95045f77debeffc3dfd004c925d
BLAKE2b-256 60a33d1549dd73185970c8b8d9cc49300f8f6a36cd98c858adce8b32a3b527fe

See more details on using hashes here.

File details

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

File metadata

  • Download URL: geoip_py-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 9.4 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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 bcfd2f72b5e8d3ec51df5f5ad4d4efc9d524f03b23c65512dc69af97cfb2899d
MD5 f93d1bf8053014520e79113cc13204bf
BLAKE2b-256 64987679df27d4a5ffe29c3172544fa2c02f76be8fcd9d06968085a9bdb313aa

See more details on using hashes here.

Release history Release notifications | RSS feed

1.0.2

2 files

This release

1.0.0 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page