Skip to content
looot docs
Esc
↑↓navigate↵open⌘Jpreview
On this page

Look up an IP address

Look up an IP address's location and network through looot's ip.lookup job, and enrich it with company and person signals through ip.enrich.

Two jobs cover IP addresses. ip.lookup gives back country, continent and ASN details and runs free on its one provider. ip.enrich adds company and person signals where they exist, and costs more.

What it costs

search {"filters": {"capability": "ip.lookup"}, "prefer": "cheapest"}

On 2026-09-28 ip.lookup priced $0 per call on its one provider, and the one ip.enrich provider listed priced around $0.28 per call. Read the live numbers before you run ip.enrich on more than a handful of addresses.

Look up the IP

Send ip:

run {"endpointId": "job:ip.lookup", "input": {"ip": "8.8.8.8"}, "idempotencyKey": "ip-lookup-1", "fallback": true}
curl -s "https://api.looot.ai/v1/runs?wait=20" \
  -H "Authorization: Bearer $LOOOT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "endpointId": "job:ip.lookup",
    "input": {"ip": "8.8.8.8"},
    "idempotencyKey": "ip-lookup-1",
    "fallback": true
  }'
looot run job:ip.lookup --input '{"ip": "8.8.8.8"}' --wait

This job has no normalized map yet: read the country, continent and ASN fields from result.

Enrich it, if you need company or person signals

ip.enrich costs more, so quote it first (step above) and use it only when ip.lookup is not enough:

run {"endpointId": "job:ip.enrich", "input": {"ip": "8.8.8.8"}, "idempotencyKey": "ip-enrich-1", "fallback": false}

One field only

ip.lookup.field returns a single field of IP information, not the whole object, for when that is all you need. Search for it and read jobInputs before you run it, since its shape differs from ip.lookup:

search {"filters": {"capability": "ip.lookup.field"}}

What the answer looks like

Field What it is
status completed, failed, queued, running
outcome hit, weak, miss, error, rejected, skipped or pending
servedProviderId the provider that answered
actualCost what this run charged, $0 on ip.lookup’s free provider
route.summary fallback runs only

On a miss or error

  • A private or bogon IP: the provider can answer with a flag saying so and no location data; treat that as a valid result, not a miss.
  • A malformed IP never reaches a provider: the run fails with validation_error and charges nothing.
  • insufficient_balance on ip.enrich: the run is blocked and not charged. Use top_up, then retry with a new idempotencyKey.

Was this page helpful?