SkillAgentSearch skills...

IPWho.org

Fast, Free IP ๐ŸŒ Geolocation API โ€” no auth, no signup. Built with Node.js, Express, TypeScript, and MaxMind. Production-ready, open-source, and developer-first.

Install / Use

/learn @Gyanaa-Vaibhav/IPWho.org
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

IPWho.org โ€” Free, Fast IP Geolocation API

MIT License Dockerized API Processed Over

IPWho.org is an open-source IP geolocation API that returns rich location + network metadata (continent โ†’ ASN โ†’ currency) with no API key, no signup. Dockerized, TypeScript-based, production-ready.

Live (example):

https://ipwho.org/ip/8.8.8.8

Features

  • Zero auth / zero signup โ€“ instant usage.
  • Fast lookups with Redis caching.
  • Bulk queries: request multiple IPs in a single call.
  • Field filtering to reduce payload size.
  • Portable: simple Docker Compose (dev & prod).
  • Watch-mode dev (node --watch + modern frontend tooling).
  • Extensible data layer (MaxMind + IP2Location LITE supported).

Tech Stack

| Layer | Tech | |------------|------------------------------------------------------| | Backend | Node.js ยท TypeScript | | Frontend | Astro + Vite/React components | | Data | MaxMind GeoLite2, IP2Location LITE (manual download) | | Cache | Redis | | Containers | Docker & Docker Compose (dev/prod variants) |


API Overview

  1. Single IP Lookup

    • GET /ip/:ip
    • Example
     GET https://ipwho.org/ip/8.8.8.8
    
  2. Client IP (implicit)

    • GET /me
    • Returns data for the callerโ€™s IP.
  3. Bulk Lookup

    • GET /bulk/:ip1,ip2,ip3
    • Comma-separated list (no spaces).
    • Example
    GET https://ipwho.org/bulk/8.8.8.8,1.1.1.1
    
  4. Field Filtering

    • Add ?fields=ip,country,city,latitude,longitude to limit response keys.
    • Example
    GET https://ipwho.org/ip/8.8.8.8?fields=ip,country,asn
    
  5. Health / Misc (if exposed)

    • If you add internal endpoints (e.g. /health) they are not guaranteed publicโ€”document them if you choose.

Note: Exact endpoint paths may evolve; keep this section in sync with code if you add more.


Sample Response

{
  "success": true,
  "data": {
    "ip": "36.255.18.252",
    "continent": "Asia",
    "continentCode": "AS",
    "country": "India",
    "countryCode": "IN",
    "capital": "New Delhi",
    "region": "Tamil Nadu",
    "regionCode": "TN",
    "city": null,
    "postal_Code": null,
    "dial_code": "+91",
    "is_in_eu": false,
    "latitude": 11.7342,
    "longitude": 78.9566,
    "accuracy_radius": 1000,
    "timezone": {
      "time_zone": "Asia/Kolkata",
      "abbr": "IST",
      "offset": 19800,
      "is_dst": false,
      "utc": "+05:30",
      "current_time": "2025-07-19T21:43:42+05:30"
    },
    "flag": {
      "flag_Icon": "๐Ÿ‡ฎ๐Ÿ‡ณ",
      "flag_unicode": "U+1F1EE U+1F1F3"
    },
    "currency": {
      "code": "INR",
      "symbol": "โ‚น",
      "name": "Indian Rupee",
      "name_plural": "Indian rupees",
      "hex_unicode": "20b9"
    },
    "connection": {
      "number": 24186,
      "org": "RailTel Corporation of India Ltd"
    },
    "security": {
      "isVpn": false,
      "isTor": false,
      "isThreat": "low"
    }
  }
}

Filtered example (?fields=ip,country,asn):

{
  "ip": "8.8.8.8",
  "country": "United States",
  "asn": { "number": 15169, "org": "GOOGLE" }
}

Bulk example:

{ "results":[
    {
      "ip": "8.8.8.8",
      "country": "United States",
      "asn": { "number": 15169, "org": "GOOGLE" }
    },
    {
      "ip": "1.1.1.1",
      "country": "Australia",
      "asn": { "number": 13335, "org": "CLOUDFLARENET" }
    }
  ]
}

๐Ÿ’ป Quick Usage Examples

cURL

curl https://ipwho.org/ip/8.8.8.8
curl "https://ipwho.org/ip/8.8.8.8?fields=ip,country,asn"
curl https://ipwho.org/bulk/8.8.8.8,1.1.1.1

Node (fetch)

const res = await fetch('https://ipwho.org/ip/8.8.8.8?fields=ip,country,asn');
const data = await res.json();
console.log(data);

Python

import requests
r = requests.get("https://ipwho.org/ip/8.8.8.8", params={"fields":"ip,country,asn"})
print(r.json())

๐Ÿ“‚ Project Structure (High Level)

.
โ”œโ”€โ”€ Backend/            # API source (TypeScript)
โ”‚   โ”œโ”€โ”€ src/            # App code
โ”‚   โ””โ”€โ”€ mainFiles/      # (Path for Geo DBs if you store them here)
โ”œโ”€โ”€ Frontend/           # Astro + Vite/React frontend
โ”œโ”€โ”€ docker-compose.yml          # Dev stack
โ”œโ”€โ”€ docker-compose-prod.yml     # Production stack
โ”œโ”€โ”€ .env.sample                 # Root env sample (ports/paths/redis)
โ”œโ”€โ”€ Backend/.env.sample
โ”œโ”€โ”€ Frontend/.env.sample
โ”œโ”€โ”€ SETUP.md                    # Full setup instructions
โ””โ”€โ”€ README.md

Setup

All installation / environment / deployment instructions are in SETUP.md. Go there for: .env variables, local dev, prod compose, volumes, troubleshooting.


Performance (Context)

Designed to handle high request throughput with Redis caching and lightweight lookups. Bulk mode reduces overhead on multiple sequential client requests.

Actual performance will depend on your host resources, DB choice, and network latency.


Contributing

  1. Fork
  2. Create feature branch: git checkout -b feature/x
  3. Commit: git commit -m "feat: ..."
  4. Push & PR
  5. Keep scope tight; open an issue first for larger changes

Ideas: automated DB sync scripts, proxy/VPN detection flags, rate-limit middleware refinements, monitoring hooks.


License

MIT. See LICENSE.


Support

  • Open an issue for bugs / feature requests
  • Star the repo if this saved you time โœจ

Disclaimer

Geolocation accuracy is not guaranteed (standard limitation of IP-based methods). Always verify critical use cases with additional signals.


Related Skills

View on GitHub
GitHub Stars61
CategoryDevelopment
Updated1d ago
Forks6

Languages

TypeScript

Security Score

100/100

Audited on Apr 9, 2026

No findings