UnSearch

Search the web, scrape content, and conduct deep research using the UnSearch API. Use when the user needs real-time web search results, content extraction from URLs, fact verification, or multi-source research for AI agents, RAG pipelines, or LLM applications.

Audits

Pass

Install

openclaw skills install unsearch

UnSearch Web Search Skill

Search the web, extract content, verify facts, and conduct deep research using the UnSearch API—an open-source Tavily/Exa alternative.

Quick Start

Set your API key:

export UNSEARCH_API_KEY="uns_your_api_key"

Get a free API key at https://unsearch.dev (5,000 queries/month free).

API Endpoints

Base URL: https://api.unsearch.dev/api/v1

All requests require header: X-API-Key: $UNSEARCH_API_KEY


1. Web Search

Search the web with optional content scraping.

curl -X POST "https://api.unsearch.dev/api/v1/search" \
  -H "X-API-Key: $UNSEARCH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "your search query",
    "engines": ["google", "bing", "duckduckgo"],
    "max_results": 10,
    "scrape_content": true
  }'

Key Parameters

ParameterTypeDefaultDescription
querystringrequiredSearch query (1-500 chars)
enginesstring[]["google","bing","duckduckgo"]Search engines
max_resultsinteger10Results to return (1-100)
scrape_contentbooleantrueExtract full page content
languagestring"en"ISO 639-1 language code

Response

{
  "results": [
    {
      "title": "Page Title",
      "url": "https://example.com",
      "snippet": "Search result snippet...",
      "scraped_content": {
        "text": "Full page content...",
        "word_count": 2500
      }
    }
  ],
  "processing_time_ms": 1500
}

2. Agent Search (Tavily-Compatible)

AI-optimized search with optional answer generation.

curl -X POST "https://api.unsearch.dev/api/v1/agent/search" \
  -H "X-API-Key: $UNSEARCH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "What is machine learning?",
    "include_answer": true,
    "max_results": 5,
    "search_depth": "basic"
  }'

Key Parameters

ParameterTypeDefaultDescription
querystringrequiredSearch query
include_answerbool/stringfalseGenerate AI answer (true, "basic", "advanced", "production")
search_depthstring"basic"basic, advanced, fast
max_resultsinteger5Results (1-20)
include_raw_contentbooleanfalseInclude full page content
include_domainsstring[]nullOnly search these domains
exclude_domainsstring[]nullExclude these domains

Response

{
  "query": "What is machine learning?",
  "answer": "Machine learning is a subset of AI...",
  "results": [
    {
      "title": "Machine Learning - Wikipedia",
      "url": "https://en.wikipedia.org/wiki/Machine_learning",
      "content": "Machine learning is a branch of AI...",
      "score": 0.95
    }
  ],
  "response_time": 1.25
}

3. Content Extraction

Extract content from specific URLs.

curl -X POST "https://api.unsearch.dev/api/v1/agent/extract" \
  -H "X-API-Key: $UNSEARCH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "urls": ["https://example.com/article"],
    "extract_depth": "basic"
  }'

Response

{
  "results": [
    {
      "url": "https://example.com/article",
      "raw_content": "Full article text...",
      "failed": false
    }
  ]
}

4. Deep Research

Multi-source research with AI synthesis.

curl -X POST "https://api.unsearch.dev/api/v1/agent/research" \
  -H "X-API-Key: $UNSEARCH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "Impact of AI on healthcare",
    "depth": "deep",
    "max_sources": 15,
    "include_analysis": true
  }'

Depth Levels

DepthSourcesUse Case
quick3-5Fast overview
standard5-10Balanced research
deep10-20Thorough analysis
comprehensive20-30Expert-level

Response

{
  "executive_summary": "AI is transforming healthcare...",
  "key_findings": ["AI diagnostics show 95% accuracy..."],
  "sources": [...],
  "model_used": "qwq-32b"
}

5. Fact Verification

Verify claims against multiple sources.

curl -X POST "https://api.unsearch.dev/api/v1/verify/claim" \
  -H "X-API-Key: $UNSEARCH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "claim": "GPT-4 was released in March 2023",
    "depth": "thorough"
  }'

Response

{
  "verdict": "true",
  "confidence": 95,
  "summary": "GPT-4 was released March 14, 2023.",
  "supporting_evidence": [...],
  "sources_checked": 12
}

Verdict values: true, false, partially_true, misleading, unverifiable


Python Examples

import httpx
import os

API_KEY = os.environ["UNSEARCH_API_KEY"]
BASE_URL = "https://api.unsearch.dev/api/v1"

async def search(query: str, scrape: bool = False):
    async with httpx.AsyncClient() as client:
        response = await client.post(
            f"{BASE_URL}/search",
            headers={"X-API-Key": API_KEY},
            json={
                "query": query,
                "max_results": 10,
                "scrape_content": scrape
            }
        )
        return response.json()

async def agent_search(query: str, include_answer: bool = True):
    async with httpx.AsyncClient() as client:
        response = await client.post(
            f"{BASE_URL}/agent/search",
            headers={"X-API-Key": API_KEY},
            json={
                "query": query,
                "include_answer": include_answer,
                "max_results": 5
            }
        )
        return response.json()

async def extract_urls(urls: list[str]):
    async with httpx.AsyncClient() as client:
        response = await client.post(
            f"{BASE_URL}/agent/extract",
            headers={"X-API-Key": API_KEY},
            json={"urls": urls}
        )
        return response.json()

JavaScript Examples

const API_KEY = process.env.UNSEARCH_API_KEY;
const BASE_URL = "https://api.unsearch.dev/api/v1";

async function search(query, scrapeContent = false) {
  const response = await fetch(`${BASE_URL}/search`, {
    method: "POST",
    headers: {
      "X-API-Key": API_KEY,
      "Content-Type": "application/json"
    },
    body: JSON.stringify({
      query,
      max_results: 10,
      scrape_content: scrapeContent
    })
  });
  return response.json();
}

async function agentSearch(query, includeAnswer = true) {
  const response = await fetch(`${BASE_URL}/agent/search`, {
    method: "POST",
    headers: {
      "X-API-Key": API_KEY,
      "Content-Type": "application/json"
    },
    body: JSON.stringify({
      query,
      include_answer: includeAnswer,
      max_results: 5
    })
  });
  return response.json();
}

Rate Limits

PlanQueries/MonthRate Limit
Free5,00010/min
Pro25,00060/min
Growth100,000200/min
Scale500,0001,000/min

Rate limit headers in response:

  • X-RateLimit-Remaining: Requests left
  • X-RateLimit-Reset: Reset timestamp

Privacy Mode

For sensitive queries, enable zero-retention:

curl -X POST "https://api.unsearch.dev/api/v1/search" \
  -H "X-API-Key: $UNSEARCH_API_KEY" \
  -H "X-Zero-Retention: true" \
  -H "Content-Type: application/json" \
  -d '{"query": "sensitive query"}'

Error Handling

CodeDescription
401Invalid API key
429Rate limited (check Retry-After header)
422Validation error
500Server error

Additional Resources