{"id":"b650fed5-82d9-4377-a598-81899e691685","shortId":"RypdCA","kind":"skill","title":"ip-lookup","tagline":"Check an IP address across multiple public geolocation and reputation sources and return a best-matched location summary.","description":"# IP Lookup Skill\n\nPurpose\n- Query multiple public IP information providers and aggregate results to produce a concise, best-match location and metadata summary for an IP address.\n\nWhat it does\n- Queries at least four public sources (e.g. ipinfo.io, ip-api.com, ipstack, geoip-db, db-ip, ipgeolocation.io) or their free endpoints.\n- Normalises returned data (country, region, city, lat/lon, org/ASN) and computes a simple match score.\n- Returns a compact summary with the best-matched source and a short table of the other sources.\n\nNotes\n- Public APIs may have rate limits or require API keys for high volume; the skill falls back to free endpoints when possible.\n- Geolocation is approximate; ISP/gateway locations may differ from end-user locations.\n\nBash example (uses curl + jq):\n\n```bash\n# Basic usage: IP passed as first arg\nIP=${1:-8.8.8.8}\n\n# Query 4 sources\nA=$(curl -s \"https://ipinfo.io/${IP}/json\")\nB=$(curl -s \"http://ip-api.com/json/${IP}?fields=status,country,regionName,city,lat,lon,org,query\")\nC=$(curl -s \"https://geolocation-db.com/json/${IP}&position=true\")\nD=$(curl -s \"https://api.db-ip.com/v2/free/${IP}\" )\n\n# Output best-match heuristics should be implemented in script\necho \"One-line summary:\"\njq -n '{ip:env.IP,sourceA:A,sourceB:B,sourceC:C,sourceD:D}' --argjson A \"$A\" --argjson B \"$B\" --argjson C \"$C\" --argjson D \"$D\"\n```\n\nNode.js example (recommended):\n\n```javascript\n// ip_lookup.js\nasync function fetchJson(url, timeout = 8000){\n  const controller = new AbortController();\n  const id = setTimeout(()=>controller.abort(), timeout);\n  try { const res = await fetch(url, {signal: controller.signal}); clearTimeout(id); if(!res.ok) throw new Error(res.statusText); return await res.json(); } catch(e){ clearTimeout(id); throw e; }\n}\n\nasync function ipLookup(ip){\n  const sources = {\n    ipinfo: `https://ipinfo.io/${ip}/json`,\n    ipapi: `http://ip-api.com/json/${ip}?fields=status,country,regionName,city,lat,lon,org,query`,\n    geodb: `https://geolocation-db.com/json/${ip}&position=true`,\n    dbip: `https://api.db-ip.com/v2/free/${ip}`\n  };\n\n  const results = {};\n  for(const [k,u] of Object.entries(sources)){\n    try{ results[k] = await fetchJson(u); } catch(e){ results[k] = {error: e.message}; }\n  }\n\n  // Normalise and pick best match (simple majority on country+city)\n  const votes = {};\n  for(const r of Object.values(results)){\n    if(!r || r.error) continue;\n    const country = r.country || r.country_name || r.countryCode || null;\n    const city = r.city || r.city_name || null;\n    const key = `${country||'?'}/${city||'?'}`;\n    votes[key] = (votes[key]||0)+1;\n  }\n  const best = Object.entries(votes).sort((a,b)=>b[1]-a[1])[0];\n  return {best: best?best[0]:null,score: best?best[1]:0,results};\n}\n\n// Usage: node ip_lookup.js 8.8.8.8\n```\n\nAgent prompt\n------------\n\n\"Use the ip-lookup skill to query at least four public IP information providers for {ip}. Return a short JSON summary: best_match (country/city), score, and per-source details (country, region, city, lat, lon, org). Respect rate limits and fall back to alternate endpoints on errors.\"\n\n\"When creating a new skill, follow SKILL_TEMPLATE.md format and include Node.js and Bash examples.\"","tags":["lookup","open","skills","besoeasy","agent-skills","ai-agents","claude-code","clawdbot","clawdbot-skill","llm-tools","mcp-server","openai"],"capabilities":["skill","source-besoeasy","skill-ip-lookup","topic-agent-skills","topic-ai-agents","topic-claude-code","topic-clawdbot","topic-clawdbot-skill","topic-llm-tools","topic-mcp-server","topic-openai","topic-openclaw","topic-vibe-coding","topic-vibecoding"],"categories":["open-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/besoeasy/open-skills/ip-lookup","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add besoeasy/open-skills","source_repo":"https://github.com/besoeasy/open-skills","install_from":"skills.sh"}},"qualityScore":"0.505","qualityRationale":"deterministic score 0.51 from registry signals: · indexed on github topic:agent-skills · 111 github stars · SKILL.md body (3,197 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-02T12:55:03.998Z","embedding":null,"createdAt":"2026-04-18T22:10:47.264Z","updatedAt":"2026-05-02T12:55:03.998Z","lastSeenAt":"2026-05-02T12:55:03.998Z","tsv":"'+1':388 '/$':166,294 '/json':168,296 '/json/$':174,190,300,314 '/v2/free/$':199,321 '0':387,400,405,411 '1':156,397,399,410 '4':159 '8.8.8.8':157,416 '8000':250 'abortcontrol':254 'across':8 'address':7,50 'agent':417 'aggreg':34 'altern':463 'api':109,116 'api.db-ip.com':198,320 'api.db-ip.com/v2/free/$':197,319 'approxim':132 'arg':154 'argjson':228,231,234,237 'async':245,285 'await':263,277,335 'b':169,223,232,233,395,396 'back':124,461 'bash':142,147,479 'basic':148 'best':19,41,96,203,347,390,402,403,404,408,409,441 'best-match':18,40,95,202 'c':185,225,235,236 'catch':279,338 'check':4 'citi':80,180,306,353,374,382,452 'cleartimeout':268,281 'compact':91 'comput':84 'concis':39 'const':251,255,261,289,323,326,354,357,366,373,379,389 'continu':365 'control':252 'controller.abort':258 'controller.signal':267 'countri':78,178,304,352,367,381,450 'country/city':443 'creat':468 'curl':145,162,170,186,195 'd':194,227,238,239 'data':77 'db':66,68 'db-ip':67 'dbip':318 'detail':449 'differ':136 'e':280,284,339 'e.g':60 'e.message':343 'echo':211 'end':139 'end-us':138 'endpoint':74,127,464 'env.ip':219 'error':274,342,466 'exampl':143,241,480 'fall':123,460 'fetch':264 'fetchjson':247,336 'field':176,302 'first':153 'follow':472 'format':474 'four':57,429 'free':73,126 'function':246,286 'geodb':311 'geoip':65 'geoip-db':64 'geoloc':11,130 'geolocation-db.com':189,313 'geolocation-db.com/json/$':188,312 'heurist':205 'high':119 'id':256,269,282 'implement':208 'includ':476 'inform':31,432 'ip':2,6,23,30,49,69,150,155,167,175,191,200,218,288,295,301,315,322,422,431,435 'ip-api.com':62,173,299 'ip-api.com/json/$':172,298 'ip-lookup':1,421 'ip_lookup.js':244,415 'ipapi':297 'ipgeolocation.io':70 'ipinfo':291 'ipinfo.io':61,165,293 'ipinfo.io/$':164,292 'iplookup':287 'ipstack':63 'isp/gateway':133 'javascript':243 'jq':146,216 'json':439 'k':327,334,341 'key':117,380,384,386 'lat':181,307,453 'lat/lon':81 'least':56,428 'limit':113,458 'line':214 'locat':21,43,134,141 'lon':182,308,454 'lookup':3,24,423 'major':350 'match':20,42,87,97,204,348,442 'may':110,135 'metadata':45 'multipl':9,28 'n':217 'name':370,377 'new':253,273,470 'node':414 'node.js':240,477 'normalis':75,344 'note':107 'null':372,378,406 'object.entries':330,391 'object.values':360 'one':213 'one-lin':212 'org':183,309,455 'org/asn':82 'output':201 'pass':151 'per':447 'per-sourc':446 'pick':346 'posit':192,316 'possibl':129 'produc':37 'prompt':418 'provid':32,433 'public':10,29,58,108,430 'purpos':26 'queri':27,54,158,184,310,426 'r':358,363 'r.city':375,376 'r.country':368,369 'r.countrycode':371 'r.error':364 'rate':112,457 'recommend':242 'region':79,451 'regionnam':179,305 'reput':13 'requir':115 'res':262 'res.json':278 'res.ok':271 'res.statustext':275 'respect':456 'result':35,324,333,340,361,412 'return':16,76,89,276,401,436 'score':88,407,444 'script':210 'settimeout':257 'short':101,438 'signal':266 'simpl':86,349 'skill':25,122,424,471 'skill-ip-lookup' 'skill_template.md':473 'sort':393 'sourc':14,59,98,106,160,226,290,331,448 'source-besoeasy' 'sourcea':220 'sourceb':222 'sourcec':224 'status':177,303 'summari':22,46,92,215,440 'tabl':102 'throw':272,283 'timeout':249,259 'topic-agent-skills' 'topic-ai-agents' 'topic-claude-code' 'topic-clawdbot' 'topic-clawdbot-skill' 'topic-llm-tools' 'topic-mcp-server' 'topic-openai' 'topic-openclaw' 'topic-vibe-coding' 'topic-vibecoding' 'tri':260,332 'true':193,317 'u':328,337 'url':248,265 'usag':149,413 'use':144,419 'user':140 'volum':120 'vote':355,383,385,392","prices":[{"id":"c4a7873c-6ebb-42b4-9f9c-3ba721baeb74","listingId":"b650fed5-82d9-4377-a598-81899e691685","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"besoeasy","category":"open-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T22:10:47.264Z"}],"sources":[{"listingId":"b650fed5-82d9-4377-a598-81899e691685","source":"github","sourceId":"besoeasy/open-skills/ip-lookup","sourceUrl":"https://github.com/besoeasy/open-skills/tree/main/skills/ip-lookup","isPrimary":false,"firstSeenAt":"2026-04-18T22:10:47.264Z","lastSeenAt":"2026-05-02T12:55:03.998Z"}],"details":{"listingId":"b650fed5-82d9-4377-a598-81899e691685","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"besoeasy","slug":"ip-lookup","github":{"repo":"besoeasy/open-skills","stars":111,"topics":["agent-skills","ai","ai-agents","claude-code","clawdbot","clawdbot-skill","llm-tools","mcp-server","openai","openclaw","vibe-coding","vibecoding"],"license":null,"html_url":"https://github.com/besoeasy/open-skills","pushed_at":"2026-03-31T13:05:30Z","description":"Battle-tested skill library for AI agents. Save 98% of API costs with ready-to-use code for crypto, PDFs, search, web scraping & more. No trial-and-error, no expensive APIs.","skill_md_sha":"b35058781e7b1022e8abb1809ff72f323645e547","skill_md_path":"skills/ip-lookup/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/besoeasy/open-skills/tree/main/skills/ip-lookup"},"layout":"multi","source":"github","category":"open-skills","frontmatter":{"name":"ip-lookup","description":"Check an IP address across multiple public geolocation and reputation sources and return a best-matched location summary."},"skills_sh_url":"https://skills.sh/besoeasy/open-skills/ip-lookup"},"updatedAt":"2026-05-02T12:55:03.998Z"}}