Bulk IP Lookup
Batch up to 50 IPs in one request — free geolocation and ISP, no key
Need geolocation and ISP data for a list of IPs at once? HackMyIP’s bulk endpoint takes up to 50 IPs in a single POST and returns a result per IP — free, no key, no signup. It is faster than 50 sequential calls and easier on rate limits. There is also an interactive bulk lookup tool if you would rather paste a list in the browser. Full reference in the API docs.
POST /api/bulk
Send a JSON body with an "ips" array (max 50):
curl -X POST -H "Content-Type: application/json" \
-d '{"ips":["8.8.8.8","1.1.1.1","208.67.222.222"]}' \
https://hackmyip.com/api/bulk
Response — one row per IP with country, city, ISP, org, and coordinates:
{
"success": true,
"data": {
"total": 3,
"results": [
{ "ip": "8.8.8.8", "country": "US", "city": "...",
"isp": "Google LLC", "org": "...", "lat": 0, "lon": 0 },
{ "ip": "1.1.1.1", "country": "...", "city": "...",
"isp": "...", "org": "...", "lat": 0, "lon": 0 }
]
}
}
Invalid or unresolvable entries come back as { "ip": "...", "error": "invalid format" } so one bad IP never fails the whole batch.
Code examples
JavaScript (fetch)
const res = await fetch('https://hackmyip.com/api/bulk', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ ips: ['8.8.8.8', '1.1.1.1', '9.9.9.9'] })
});
const { data } = await res.json();
data.results.forEach(r => console.log(r.ip, r.country, r.isp));
Python (requests)
import requests
ips = ['8.8.8.8', '1.1.1.1', '208.67.222.222']
r = requests.post('https://hackmyip.com/api/bulk', json={'ips': ips})
for row in r.json()['data']['results']:
print(row['ip'], row.get('country'), row.get('isp'))
Looking up more than 50 IPs
The bulk endpoint caps each request at 50 IPs. For a larger list, either chunk it into batches of 50, or loop the single-IP /api/lookup endpoint when you need richer per-IP fields like the numeric ASN. Stay within 60 requests/minute:
import requests, time
ips = [ ... ] # any number of IPs
for ip in ips:
r = requests.get('https://hackmyip.com/api/lookup', params={'ip': ip})
d = r.json()['data']
print(ip, d['network']['asn'], d['network']['isp'])
time.sleep(1) # stay under 60 requests/minute
Frequently asked questions
Is there a free bulk IP lookup API?
Yes. HackMyIP’s POST /api/bulk takes a JSON array of up to 50 IPs per request and returns geolocation and ISP for each — no key, no signup. For more than 50 IPs, send multiple batches or loop the single-IP /api/lookup endpoint.
What about bulk IP WHOIS?
HackMyIP does not offer a bulk WHOIS endpoint. For network ownership, use the single-IP /api/lookup (returns ASN, ISP, and organization) or /api/asn?q={ip} per IP. The /api/whois endpoint is for domain RDAP, not IP WHOIS. Loop those endpoints over your list, respecting the 60 requests/minute limit.
How many IPs can I look up at once?
Up to 50 IPs per POST /api/bulk request. The endpoint caps the array at 50 and looks them up in parallel, so a batch is much faster than 50 sequential calls. Send additional batches for larger lists.