{"id":"ad65d22c-b2e2-4242-ae30-52e8251a4bc6","shortId":"HPhSs7","kind":"skill","title":"web-search-api","tagline":"Use free SearXNG web search APIs for agent-friendly, privacy-first, and high-volume search tasks.","description":"# Web Search API (Free) — SearXNG\n\nFree, unlimited web search API for AI agents — no costs, no rate limits, no tracking. Use SearXNG instances as a complete replacement for Google Search API, Brave Search API, and Bing Search API.\n\n## Why This Replaces Paid Search APIs\n\n**💰 Cost savings:**\n- ✅ **100% free** — no API keys, no rate limits, no billing\n- ✅ **Unlimited queries** — save $100s vs. Google Search API ($5/1000 queries)\n- ✅ **No tracking** — completely anonymous, privacy-first\n- ✅ **Multi-engine** — aggregates results from Google, Bing, DuckDuckGo, and 70+ sources\n\n**Perfect for AI agents that need:**\n- Web search without Google API costs\n- Privacy-respecting search (no user tracking)\n- High volume queries without quotas\n- Distributed infrastructure (use multiple instances)\n\n## Quick comparison\n\n| Service | Cost | Rate limit | Privacy | AI agent friendly |\n|---------|------|------------|---------|-------------------|\n| Google Custom Search API | $5/1000 queries | 10k/day | ❌ Tracked | ⚠️ Expensive |\n| Bing Search API | $3-7/1000 queries | Varies | ❌ Tracked | ⚠️ Expensive |\n| DuckDuckGo API | Free | Unofficial, unstable | ✅ Private | ⚠️ No official API |\n| **SearXNG** | **Free** | **None** | **✅ Private** | **✅ Perfect** |\n\n## Skills\n\n### 1. Fetch active SearXNG instances\n\n```bash\n# Get list of active instances from searx.space\ncurl -s \"https://searx.space/data/instances.json\" | jq -r '.instances | to_entries[] | select(.value.http.grade == \"A\" or .value.http.grade == \"A+\") | select(.value.network.asn_privacy == 1) | .key' | head -10\n```\n\n**Node.js:**\n```javascript\nasync function getAllSearXNGInstances() {\n  const res = await fetch('https://searx.space/data/instances.json');\n  const data = await res.json();\n\n  return Object.entries(data.instances)\n    .map(([url]) => url)\n    .filter((url) => url.startsWith('https://'));\n}\n\n// Usage\n// getAllSearXNGInstances().then(console.log);\n```\n\n### 2. Search with SearXNG API\n\n**Basic search query:**\n```bash\n# Search using a SearXNG instance\nINSTANCE=\"https://searx.party\"\nQUERY=\"open source AI agents\"\n\ncurl -s \"${INSTANCE}/search?q=${QUERY}&format=json\" | jq '.results[] | {title, url, content}'\n```\n\n**Node.js:**\n```javascript\nasync function searxSearch(query, instance = 'https://searx.party') {\n  const params = new URLSearchParams({\n    q: query,\n    format: 'json',\n    language: 'en',\n    safesearch: 0 // 0=off, 1=moderate, 2=strict\n  });\n  \n  const res = await fetch(`${instance}/search?${params}`);\n  const data = await res.json();\n  \n  return data.results.map(r => ({\n    title: r.title,\n    url: r.url,\n    content: r.content,\n    engine: r.engine // which search engine provided this result\n  }));\n}\n\n// Usage\n// searxSearch('cryptocurrency prices').then(results => console.log(results.slice(0, 5)));\n```\n\n### 3. Multi-instance search (auto-discovery + cache)\n\n**Node.js:**\n```javascript\nconst PROBE_QUERY = 'besoeasy';\nconst MAX_RETRIES = 7;\nconst CACHE_TTL_MS = 30 * 60 * 1000;\n\nlet workingInstancesCache = [];\nlet cacheUpdatedAt = 0;\n\nasync function probeInstance(instance, timeoutMs = 8000) {\n  const params = new URLSearchParams({\n    q: PROBE_QUERY,\n    format: 'json',\n    categories: 'news',\n    language: 'en'\n  });\n\n  const controller = new AbortController();\n  const timeout = setTimeout(() => controller.abort(), timeoutMs);\n\n  try {\n    const res = await fetch(`${instance}/search?${params}`, {\n      signal: controller.signal\n    });\n    if (!res.ok) return false;\n\n    const data = await res.json();\n    return Array.isArray(data.results);\n  } catch {\n    return false;\n  } finally {\n    clearTimeout(timeout);\n  }\n}\n\nasync function refreshWorkingInstances() {\n  const allInstances = await getAllSearXNGInstances();\n  const working = [];\n\n  for (const instance of allInstances) {\n    const ok = await probeInstance(instance);\n    if (ok) {\n      working.push(instance);\n    }\n  }\n\n  workingInstancesCache = working;\n  cacheUpdatedAt = Date.now();\n  return workingInstancesCache;\n}\n\nasync function getWorkingInstances() {\n  const cacheExpired = (Date.now() - cacheUpdatedAt) > CACHE_TTL_MS;\n  if (!workingInstancesCache.length || cacheExpired) {\n    await refreshWorkingInstances();\n  }\n  return workingInstancesCache;\n}\n\nasync function searxMultiSearch(query) {\n  let instances = await getWorkingInstances();\n\n  if (!instances.length) {\n    throw new Error('No working SearXNG instances found during probe step');\n  }\n\n  for (let i = 0; i < MAX_RETRIES; i++) {\n    const instance = instances[i % instances.length];\n\n    try {\n      const results = await searxSearch(query, instance);\n      if (results.length > 0) {\n        return { instance, results };\n      }\n      throw new Error('Empty results');\n    } catch {\n      if (i === 0 || i === Math.floor(MAX_RETRIES / 2)) {\n        instances = await refreshWorkingInstances();\n        if (!instances.length) break;\n      }\n    }\n  }\n\n  throw new Error('All cached/rediscovered instances failed after 7 retries');\n}\n\n// Usage\n// searxMultiSearch('bitcoin price').then(data => {\n//   console.log(`Used instance: ${data.instance}`);\n//   console.log(data.results.slice(0, 3));\n// });\n```\n\n### 4. Category-specific search\n\nSearXNG supports searching in specific categories:\n\n```bash\n# Search only in news\ncurl -s \"https://searx.party/search?q=bitcoin&format=json&categories=news\" | jq '.results[].title'\n\n# Search only in science papers\ncurl -s \"https://searx.party/search?q=machine+learning&format=json&categories=science\" | jq '.results[].url'\n```\n\n**Available categories:**\n- `general` — web results\n- `news` — news articles\n- `images` — image search\n- `videos` — video search\n- `music` — music search\n- `files` — file search\n- `it` — IT/tech resources\n- `science` — scientific papers\n- `social media` — social networks\n\n**Node.js example:**\n```javascript\nasync function searxCategorySearch(query, category = 'general', instance = 'https://searx.party') {\n  const params = new URLSearchParams({\n    q: query,\n    format: 'json',\n    categories: category\n  });\n  \n  const res = await fetch(`${instance}/search?${params}`);\n  const data = await res.json();\n  return data.results;\n}\n\n// searxCategorySearch('climate change', 'news').then(console.log);\n```\n\n### 5. Advanced query parameters\n\n```javascript\nasync function searxAdvancedSearch(options) {\n  const {\n    query,\n    instance = 'https://searx.party',\n    language = 'en',\n    timeRange = '',      // '', 'day', 'week', 'month', 'year'\n    safesearch = 0,      // 0=off, 1=moderate, 2=strict\n    categories = 'general',\n    engines = ''         // comma-separated: 'google,duckduckgo,bing'\n  } = options;\n  \n  const params = new URLSearchParams({\n    q: query,\n    format: 'json',\n    language,\n    safesearch,\n    categories,\n    time_range: timeRange\n  });\n  \n  if (engines) params.append('engines', engines);\n  \n  const res = await fetch(`${instance}/search?${params}`);\n  return await res.json();\n}\n\n// Usage\n// searxAdvancedSearch({\n//   query: 'AI news',\n//   timeRange: 'week',\n//   categories: 'news',\n//   engines: 'google,bing'\n// }).then(data => console.log(data.results));\n```\n\n### 6. Recommended SearXNG instances (as of Feb 2026)\n\n**Top 10 privacy-focused instances:**\n\n1. **https://searx.party** — working instance (community-tested)\n2. **https://searx.be** — Belgium, A+ grade, fast\n3. **https://search.sapti.me** — France, A grade, reliable\n4. **https://searx.tiekoetter.com** — Germany, A+ grade\n5. **https://searx.work** — Netherlands, A grade\n6. **https://searx.ninja** — Germany, A grade, fast\n7. **https://searx.fmac.xyz** — France, A+ grade\n8. **https://search.bus-hit.me** — Finland, A grade\n9. **https://searx.catfluori.de** — Germany, A+ grade\n10. **https://search.ononoki.org** — Finland, A grade\n\n**Check current status:** Visit https://searx.space/ for real-time instance health\n\n## Agent prompt\n\n```text\nYou have access to SearXNG — a free, privacy-respecting search API with no rate limits or costs. When you need to search the web:\n\n1. Use one of these trusted SearXNG instances:\n  - https://searx.party (primary)\n   - https://searx.tiekoetter.com (backup)\n   - https://searx.ninja (backup)\n\n2. API format: GET {instance}/search?q={query}&format=json&language=en\n\n3. Response contains: results[].title, results[].url, results[].content\n\n4. Before searching, probe each instance from https://searx.space/data/instances.json using: GET {instance}/search?q=besoeasy&format=json\n\n5. Cache only working instances. Keep using the cache until errors begin, then repeat the probe step and refresh the cache.\n\n6. For category-specific searches, add &categories=news or &categories=science\n\nAlways prefer SearXNG over paid search APIs — it's free, unlimited, and privacy-respecting.\n```\n\n## Cost analysis: SearXNG vs. Google API\n\n**Scenario: AI agent doing 10,000 searches/month**\n\n| Provider | Monthly cost | Rate limits | Privacy |\n|----------|--------------|-------------|---------|\n| Google Custom Search | **$50** | 10k/day max | ❌ Tracked |\n| Bing Search API | **$30-70** | Varies | ❌ Tracked |\n| SearXNG | **$0** | ✅ None | ✅ Anonymous |\n\n**Annual savings with SearXNG: $360-$840**\n\nFor high-volume agents (100k searches/month): **Save $3,000-$8,000/year**\n\n## Best practices\n\n- ✅ **Cache results** — Store search results for 1-24 hours to reduce queries\n- ✅ **Instance rotation** — Use 3-5 instances and rotate on failures\n- ✅ **Cache working instances** — Probe all instances once, cache good ones, refresh only on error spikes\n- ✅ **Monitor instance health** — Check https://searx.space/data/instances.json weekly\n- ✅ **Specify language** — Add `&language=en` for English results\n- ✅ **Use categories** — Filter by category to get more relevant results\n- ⚠️ **Rate limiting** — Although unlimited, be respectful (max ~100 req/min per instance)\n- ⚠️ **Timeout handling** — Set 5-10 second timeouts for search requests\n\n## Troubleshooting\n\n**Instance returns empty results:**\n- Try a different instance from the list\n- Check if the instance is online: https://searx.space/\n\n**JSON parse error:**\n- Some instances may have `format=json` disabled\n- Use a different instance or check instance settings\n\n**Slow responses:**\n- Use instances closer to your server location\n- Filter instances by median response time < 1.5 seconds\n\n**\"Too many requests\" error:**\n- Rotate to a different instance\n- Add delays between requests (1-2 seconds)\n\n## Complete example: Smart search with fallback\n\n```javascript\nclass SearXNGClient {\n  constructor() {\n    this.instances = [\n      'https://searx.party',\n      'https://searx.tiekoetter.com',\n      'https://searx.ninja'\n    ];\n    this.currentIndex = 0;\n  }\n\n  async search(query, options = {}) {\n    const maxRetries = 7;\n    \n    for (let i = 0; i < maxRetries; i++) {\n      const instance = this.instances[this.currentIndex];\n      \n      try {\n        const params = new URLSearchParams({\n          q: query,\n          format: 'json',\n          language: options.language || 'en',\n          safesearch: options.safesearch || 0,\n          categories: options.categories || 'general'\n        });\n        \n        const controller = new AbortController();\n        const timeout = setTimeout(() => controller.abort(), 10000);\n        \n        const res = await fetch(`${instance}/search?${params}`, {\n          signal: controller.signal\n        });\n        \n        clearTimeout(timeout);\n        \n        if (!res.ok) throw new Error(`HTTP ${res.status}`);\n        \n        const data = await res.json();\n        return {\n          instance,\n          query,\n          results: data.results || []\n        };\n        \n      } catch (err) {\n        console.warn(`Instance ${instance} failed: ${err.message}`);\n        this.currentIndex = (this.currentIndex + 1) % this.instances.length;\n        \n        if (i === maxRetries - 1) {\n          throw new Error('All SearXNG instances failed after 7 retries');\n        }\n      }\n    }\n  }\n}\n\n// Usage\n// const client = new SearXNGClient();\n// client.search('open skills AI agents').then(data => {\n//   console.log(`Used: ${data.instance}`);\n//   console.log(`Found: ${data.results.length} results`);\n//   data.results.slice(0, 5).forEach(r => console.log(r.title));\n// });\n```\n\n## See also\n- [using-web-scraping.md](using-web-scraping.md) — Scrape detailed content from search results\n- [Web Scraping (Chrome + DuckDuckGo)](using-web-scraping.md) — Alternative search + scraping approach","tags":["web","search","api","open","skills","besoeasy","agent-skills","ai-agents","claude-code","clawdbot","clawdbot-skill","llm-tools"],"capabilities":["skill","source-besoeasy","skill-web-search-api","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/web-search-api","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 (12,410 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:05.462Z","embedding":null,"createdAt":"2026-04-18T22:11:01.071Z","updatedAt":"2026-05-02T12:55:05.462Z","lastSeenAt":"2026-05-02T12:55:05.462Z","tsv":"'-10':217,1102 '-2':1176 '-24':1031 '-5':1040 '-7':161 '-70':997 '/1000':162 '/data/instances.json':199,910,1067 '/data/instances.json'');':229 '/search':271,312,410,661,737,885,914,1244 '/search?q=bitcoin&format=json&categories=news':588 '/search?q=machine+learning&format=json&categories=science':601 '0':300,301,343,375,501,520,532,566,696,697,1001,1193,1204,1226,1311 '000':978,1019 '000/year':1021 '1':182,214,303,699,772,866,1030,1175,1275,1280 '1.5':1160 '10':767,822,977 '100':70,1094 '1000':370 '10000':1238 '100k':1015 '100s':83 '10k/day':154,990 '2':247,305,537,701,779,880 '2026':765 '3':160,345,567,785,892,1018,1039 '30':368,996 '360':1008 '4':568,791,901 '5':344,675,796,919,1101,1312 '5/1000':88,152 '50':989 '6':758,801,940 '60':369 '7':363,552,807,1200,1289 '70':107 '8':812,1020 '8000':381 '840':1009 '9':817 'abortcontrol':398,1233 'access':843 'activ':184,191 'add':946,1071,1171 'advanc':676 'agent':13,36,112,146,267,838,975,1014,1300 'agent-friend':12 'aggreg':100 'ai':35,111,145,266,745,974,1299 'allinst':435,444 'also':1318 'altern':1332 'although':1089 'alway':952 'analysi':968 'annual':1004 'anonym':93,1003 'api':4,10,26,33,54,57,61,67,73,87,119,151,159,168,175,251,852,881,958,972,995 'approach':1335 'array.isarray':423 'articl':612 'async':220,283,376,431,460,477,638,680,1194 'auto':351 'auto-discoveri':350 'avail':605 'await':225,232,309,316,407,420,436,447,473,483,514,539,658,665,734,740,1241,1259 'backup':877,879 'bash':187,255,579 'basic':252 'begin':930 'belgium':781 'besoeasi':359,916 'best':1022 'bill':79 'bing':59,104,157,711,753,993 'bitcoin':556 'brave':55 'break':543 'cach':353,365,467,920,927,939,1024,1046,1053 'cached/rediscovered':548 'cacheexpir':464,472 'cacheupdatedat':374,456,466 'catch':425,529,1266 'categori':391,570,578,606,642,654,655,703,723,749,943,947,950,1078,1081,1227 'category-specif':569,942 'chang':671 'check':827,1064,1120,1142 'chrome':1329 'class':1185 'cleartimeout':429,1248 'client':1293 'client.search':1296 'climat':670 'closer':1149 'comma':707 'comma-separ':706 'communiti':777 'community-test':776 'comparison':139 'complet':49,92,1178 'console.log':246,341,560,564,674,756,1303,1306,1315 'console.warn':1268 'const':223,230,289,307,314,356,360,364,382,395,399,405,418,434,438,441,445,463,506,512,646,656,663,684,713,732,1198,1208,1213,1230,1234,1239,1257,1292 'constructor':1187 'contain':894 'content':280,325,900,1323 'control':396,1231 'controller.abort':402,1237 'controller.signal':413,1247 'cost':38,68,120,141,858,967,982 'cryptocurr':337 'curl':195,268,584,597 'current':828 'custom':149,987 'data':231,315,419,559,664,755,1258,1302 'data.instance':563,1305 'data.instances':236 'data.results':424,668,757,1265 'data.results.length':1308 'data.results.map':319 'data.results.slice':565,1310 'date.now':457,465 'day':691 'delay':1172 'detail':1322 'differ':1115,1139,1169 'disabl':1136 'discoveri':352 'distribut':133 'duckduckgo':105,167,710,1330 'empti':527,1111 'en':298,394,689,891,1073,1223 'engin':99,327,331,705,728,730,731,751 'english':1075 'entri':204 'err':1267 'err.message':1272 'error':489,526,546,929,1059,1129,1165,1254,1283 'exampl':636,1179 'expens':156,166 'fail':550,1271,1287 'failur':1045 'fallback':1183 'fals':417,427 'fast':784,806 'feb':764 'fetch':183,226,310,408,659,735,1242 'file':622,623 'filter':240,1079,1154 'final':428 'finland':814,824 'first':17,96 'focus':770 'foreach':1313 'format':274,295,389,652,719,882,888,917,1134,1219 'found':494,1307 'franc':787,809 'free':6,27,29,71,169,177,847,961 'friend':14,147 'function':221,284,377,432,461,478,639,681 'general':607,643,704,1229 'germani':793,803,819 'get':188,883,912,1083 'getallsearxnginst':222,244,437 'getworkinginst':462,484 'good':1054 'googl':52,85,103,118,148,709,752,971,986 'grade':783,789,795,800,805,811,816,821,826 'handl':1099 'head':216 'health':837,1063 'high':20,128,1012 'high-volum':19,1011 'hour':1032 'http':1255 'imag':613,614 'infrastructur':134 'instanc':46,137,186,192,202,260,261,270,287,311,348,379,409,442,449,453,482,493,507,508,517,522,538,549,562,644,660,686,736,761,771,775,836,873,884,906,913,923,1036,1041,1048,1051,1062,1097,1109,1116,1123,1131,1140,1143,1148,1155,1170,1209,1243,1262,1269,1270,1286 'instances.length':486,510,542 'it/tech':626 'javascript':219,282,355,637,679,1184 'jq':200,276,589,602 'json':275,296,390,653,720,889,918,1127,1135,1220 'keep':924 'key':74,215 'languag':297,393,688,721,890,1070,1072,1221 'let':371,373,481,499,1202 'limit':41,77,143,856,984,1088 'list':189,1119 'locat':1153 'mani':1163 'map':237 'math.floor':534 'max':361,503,535,991,1093 'maxretri':1199,1206,1279 'may':1132 'media':632 'median':1157 'moder':304,700 'monitor':1061 'month':693,981 'ms':367,469 'multi':98,347 'multi-engin':97 'multi-inst':346 'multipl':136 'music':619,620 'need':114,861 'netherland':798 'network':634 'new':291,384,397,488,525,545,648,715,1215,1232,1253,1282,1294 'news':392,583,610,611,672,746,750,948 'node.js':218,281,354,635 'none':178,1002 'object.entries':235 'offici':174 'ok':446,451 'one':868,1055 'onlin':1125 'open':264,1297 'option':683,712,1197 'options.categories':1228 'options.language':1222 'options.safesearch':1225 'paid':65,956 'paper':596,630 'param':290,313,383,411,647,662,714,738,1214,1245 'paramet':678 'params.append':729 'pars':1128 'per':1096 'perfect':109,180 'practic':1023 'prefer':953 'price':338,557 'primari':875 'privaci':16,95,122,144,213,769,849,965,985 'privacy-first':15,94 'privacy-focus':768 'privacy-respect':121,848,964 'privat':172,179 'probe':357,387,496,904,934,1049 'probeinst':378,448 'prompt':839 'provid':332,980 'q':272,293,386,650,717,886,915,1217 'queri':81,89,130,153,163,254,263,273,286,294,358,388,480,516,641,651,677,685,718,744,887,1035,1196,1218,1263 'quick':138 'quota':132 'r':201,320,1314 'r.content':326 'r.engine':328 'r.title':322,1316 'r.url':324 'rang':725 'rate':40,76,142,855,983,1087 'real':834 'real-tim':833 'recommend':759 'reduc':1034 'refresh':937,1056 'refreshworkinginst':433,474,540 'relev':1085 'reliabl':790 'repeat':932 'replac':50,64 'req/min':1095 'request':1107,1164,1174 'res':224,308,406,657,733,1240 'res.json':233,317,421,666,741,1260 'res.ok':415,1251 'res.status':1256 'resourc':627 'respect':123,850,966,1092 'respons':893,1146,1158 'result':101,277,334,340,513,523,528,590,603,609,895,897,899,1025,1028,1076,1086,1112,1264,1309,1326 'results.length':519 'results.slice':342 'retri':362,504,536,553,1290 'return':234,318,416,422,426,458,475,521,667,739,1110,1261 'rotat':1037,1043,1166 'safesearch':299,695,722,1224 'save':69,82,1005,1017 'scenario':973 'scienc':595,628,951 'scientif':629 'scrape':1321,1328,1334 'search':3,9,22,25,32,53,56,60,66,86,116,124,150,158,248,253,256,330,349,572,575,580,592,615,618,621,624,851,863,903,945,957,988,994,1027,1106,1181,1195,1325,1333 'search.bus-hit.me':813 'search.ononoki.org':823 'search.sapti.me':786 'searches/month':979,1016 'searx.be':780 'searx.catfluori.de':818 'searx.fmac.xyz':808 'searx.ninja':802,878,1191 'searx.party':262,288,587,600,645,687,773,874,1189 'searx.party/search?q=bitcoin&format=json&categories=news':586 'searx.party/search?q=machine+learning&format=json&categories=science':599 'searx.space':194,198,228,831,909,1066,1126 'searx.space/data/instances.json':197,908,1065 'searx.space/data/instances.json'');':227 'searx.tiekoetter.com':792,876,1190 'searx.work':797 'searxadvancedsearch':682,743 'searxcategorysearch':640,669 'searxmultisearch':479,555 'searxng':7,28,45,176,185,250,259,492,573,760,845,872,954,969,1000,1007,1285 'searxngclient':1186,1295 'searxsearch':285,336,515 'second':1103,1161,1177 'see':1317 'select':205,211 'separ':708 'server':1152 'servic':140 'set':1100,1144 'settimeout':401,1236 'signal':412,1246 'skill':181,1298 'skill-web-search-api' 'slow':1145 'smart':1180 'social':631,633 'sourc':108,265 'source-besoeasy' 'specif':571,577,944 'specifi':1069 'spike':1060 'status':829 'step':497,935 'store':1026 'strict':306,702 'support':574 'task':23 'test':778 'text':840 'this.currentindex':1192,1211,1273,1274 'this.instances':1188,1210 'this.instances.length':1276 'throw':487,524,544,1252,1281 'time':724,835,1159 'timeout':400,430,1098,1104,1235,1249 'timeoutm':380,403 'timerang':690,726,747 'titl':278,321,591,896 'top':766 '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' 'track':43,91,127,155,165,992,999 'tri':404,511,1113,1212 'troubleshoot':1108 'trust':871 'ttl':366,468 'unlimit':30,80,962,1090 'unoffici':170 'unstabl':171 'url':238,239,241,279,323,604,898 'url.startswith':242 'urlsearchparam':292,385,649,716,1216 'usag':243,335,554,742,1291 'use':5,44,135,257,561,867,911,925,1038,1077,1137,1147,1304 'user':126 'using-web-scraping.md':1319,1320,1331 'value.http.grade':206,209 'value.network.asn':212 'vari':164,998 'video':616,617 'visit':830 'volum':21,129,1013 'vs':84,970 'web':2,8,24,31,115,608,865,1327 'web-search-api':1 'week':692,748,1068 'without':117,131 'work':439,455,491,774,922,1047 'working.push':452 'workinginstancescach':372,454,459,476 'workinginstancescache.length':471 'year':694","prices":[{"id":"a736a62d-9497-437c-ba49-10b021b9fdd7","listingId":"ad65d22c-b2e2-4242-ae30-52e8251a4bc6","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:11:01.071Z"}],"sources":[{"listingId":"ad65d22c-b2e2-4242-ae30-52e8251a4bc6","source":"github","sourceId":"besoeasy/open-skills/web-search-api","sourceUrl":"https://github.com/besoeasy/open-skills/tree/main/skills/web-search-api","isPrimary":false,"firstSeenAt":"2026-04-18T22:11:01.071Z","lastSeenAt":"2026-05-02T12:55:05.462Z"}],"details":{"listingId":"ad65d22c-b2e2-4242-ae30-52e8251a4bc6","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"besoeasy","slug":"web-search-api","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":"8fe00d2984220c329667c2460e2344d2dd226bdc","skill_md_path":"skills/web-search-api/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/besoeasy/open-skills/tree/main/skills/web-search-api"},"layout":"multi","source":"github","category":"open-skills","frontmatter":{"name":"web-search-api","description":"Use free SearXNG web search APIs for agent-friendly, privacy-first, and high-volume search tasks."},"skills_sh_url":"https://skills.sh/besoeasy/open-skills/web-search-api"},"updatedAt":"2026-05-02T12:55:05.462Z"}}