Cloudsway Search: Ranked Results + Summaries
Deep dive into Cloudsway Search on SandBase — ranked web search results with dynamic summaries for AI agents. Architecture, use cases, API usage, and comparison with semantic search approaches.
TL;DR — Cloudsway Search is a web search API on SandBase that returns ranked results with dynamic summaries — designed for AI agents that need fresh, structured web data. One operation, clean output: titles, URLs, snippets, relevance scores, and optional full-text extraction. Best for research agents, fact-checking workflows, and competitive intelligence where you need authoritative, ranked results rather than semantic matching.
What Cloudsway Search does
Cloudsway Search is a search-as-a-service tool available through SandBase. Unlike LLM knowledge (frozen at training time) or vector databases (limited to your indexed content), Cloudsway gives your agent access to live web results — ranked by relevance, enriched with summaries.
The output is structured for agent consumption:
{
"results": [
{
"title": "ByteDance Releases Seedream 5.0 Pro - AI Image Generation",
"url": "https://example.com/seedream-5-release",
"snippet": "ByteDance announced Seedream 5.0 Pro, their latest image generation model...",
"score": 0.95,
"published_date": "2026-07-15",
"summary": "Seedream 5.0 Pro is ByteDance's production image model offering two variants..."
},
...
],
"query_interpretation": "image generation model bytedance 2026",
"total_results": 142
}
Key features:
- Ranked results — ordered by relevance, not just keyword matching
- Dynamic summaries — AI-generated summaries of each result, tailored to the query context
- Freshness — live web index, not stale cached data
- Structured output — JSON ready for agent processing, no HTML parsing needed
- Single operation — one API call gets you everything
API usage on SandBase
Cloudsway Search is accessed through SandBase’s /v1/run endpoint:
from openai import OpenAI
client = OpenAI(
base_url="https://api.sandbase.ai/v1",
api_key="your-sandbase-api-key"
)
# Basic search
response = client.post("/v1/run", body={
"model": "cloudsway/search",
"operation": "search",
"input": {
"query": "best practices for AI agent memory architecture 2026",
"num_results": 10
}
})
results = response.json()["output"]["results"]
for r in results:
print(f"[{r['score']:.2f}] {r['title']}")
print(f" {r['url']}")
print(f" {r['summary']}")
print()
Advanced search parameters
# Search with filtering and options
response = client.post("/v1/run", body={
"model": "cloudsway/search",
"operation": "search",
"input": {
"query": "enterprise AI agent deployment strategies",
"num_results": 20,
"include_full_text": True, # Include full page content
"freshness": "month", # Results from last month only
"language": "en", # Language filter
"include_summary": True # Generate per-result summaries
}
})
results = response.json()["output"]["results"]
# Full text available for deeper analysis
for r in results[:3]:
print(f"Title: {r['title']}")
print(f"Full text length: {len(r.get('full_text', ''))} chars")
print(f"Summary: {r['summary']}")
Architecture: how ranked search differs from semantic search
Understanding when to use Cloudsway vs. semantic search (like Exa) requires understanding what each does:
| Dimension | Cloudsway (Ranked) | Semantic search (e.g., Exa) |
|---|---|---|
| Matching method | Relevance ranking (BM25 + neural reranking) | Embedding similarity |
| Index | Live web index | Curated web content |
| Best for | Finding authoritative sources on a topic | Finding content by meaning/concept |
| Query style | Natural language or keywords | Natural language descriptions |
| Freshness | Real-time web | Depends on crawl frequency |
| Output | Ranked list + summaries | Content + similarity scores |
| Strengths | Breadth, freshness, authority signals | Precision, conceptual matching |
When to use Cloudsway:
- “What are the latest developments in X?”
- “Find authoritative sources about Y”
- “What are people saying about Z?”
- Competitive intelligence, market research, news monitoring
When to use semantic search:
- “Find content similar to this document”
- “What pages discuss the concept of X from angle Y?”
- “Find resources that match this specific technical description”
Use cases for agents
Use case 1: Research agent
An agent that gathers information on a topic and produces a structured report:
class ResearchAgent:
"""Agent that uses Cloudsway Search to gather and synthesize information."""
def __init__(self, api_key: str):
self.client = OpenAI(
base_url="https://api.sandbase.ai/v1",
api_key=api_key
)
def research_topic(self, topic: str, depth: int = 3) -> dict:
"""Research a topic with multiple search passes."""
# Pass 1: Broad overview
overview_results = self._search(
f"{topic} overview guide 2026",
num_results=10
)
# Pass 2: Extract subtopics from results, search each
subtopics = self._extract_subtopics(overview_results, topic)
detailed_results = {}
for subtopic in subtopics[:depth]:
detailed_results[subtopic] = self._search(
f"{topic} {subtopic} details",
num_results=5
)
# Pass 3: Find contrarian/alternative viewpoints
contrarian = self._search(
f"{topic} challenges problems criticism",
num_results=5
)
return {
"overview": overview_results,
"subtopics": detailed_results,
"challenges": contrarian,
"sources_count": self._count_unique_sources(
overview_results, detailed_results, contrarian
)
}
def _search(self, query: str, num_results: int = 10) -> list[dict]:
response = self.client.post("/v1/run", body={
"model": "cloudsway/search",
"operation": "search",
"input": {
"query": query,
"num_results": num_results,
"include_summary": True
}
})
return response.json()["output"]["results"]
def _extract_subtopics(self, results: list[dict], topic: str) -> list[str]:
"""Use LLM to identify subtopics from search results."""
summaries = "\n".join(r["summary"] for r in results if r.get("summary"))
response = self.client.chat.completions.create(
model="openai/gpt-4o-mini",
messages=[{
"role": "user",
"content": f"Given these summaries about '{topic}', "
f"list 5 key subtopics to research deeper:\n\n{summaries}"
}],
max_tokens=200
)
return response.choices[0].message.content.strip().split("\n")
def _count_unique_sources(self, *result_sets) -> int:
urls = set()
for results in result_sets:
if isinstance(results, list):
urls.update(r["url"] for r in results)
elif isinstance(results, dict):
for sub_results in results.values():
urls.update(r["url"] for r in sub_results)
return len(urls)
Use case 2: Fact-checking agent
An agent that verifies claims by searching for supporting/contradicting evidence:
class FactCheckAgent:
"""Verify claims using web search evidence."""
def __init__(self, api_key: str):
self.client = OpenAI(
base_url="https://api.sandbase.ai/v1",
api_key=api_key
)
def verify_claim(self, claim: str) -> dict:
"""Check a claim against web sources."""
# Search for supporting evidence
support_results = self._search(f"{claim} evidence confirmed")
# Search for contradicting evidence
contra_results = self._search(f"{claim} debunked false incorrect")
# Score confidence based on source quality and agreement
confidence = self._score_confidence(support_results, contra_results)
return {
"claim": claim,
"confidence": confidence,
"verdict": self._verdict(confidence),
"supporting_sources": support_results[:3],
"contradicting_sources": contra_results[:3],
}
def _search(self, query: str) -> list[dict]:
response = self.client.post("/v1/run", body={
"model": "cloudsway/search",
"operation": "search",
"input": {"query": query, "num_results": 5, "include_summary": True}
})
return response.json()["output"]["results"]
def _score_confidence(self, support: list, contra: list) -> float:
support_score = sum(r.get("score", 0) for r in support)
contra_score = sum(r.get("score", 0) for r in contra)
total = support_score + contra_score
if total == 0:
return 0.5
return support_score / total
def _verdict(self, confidence: float) -> str:
if confidence > 0.8:
return "LIKELY TRUE"
elif confidence > 0.6:
return "POSSIBLY TRUE"
elif confidence > 0.4:
return "UNCERTAIN"
elif confidence > 0.2:
return "POSSIBLY FALSE"
else:
return "LIKELY FALSE"
Use case 3: Competitive intelligence
Monitor competitors’ latest moves:
class CompetitiveIntelAgent:
"""Track competitor activity using web search."""
def __init__(self, api_key: str):
self.client = OpenAI(
base_url="https://api.sandbase.ai/v1",
api_key=api_key
)
def monitor_competitor(self, competitor: str, aspects: list[str]) -> dict:
"""Gather latest intelligence on a competitor."""
intel = {}
for aspect in aspects:
results = self._search(
f"{competitor} {aspect} 2026",
freshness="week"
)
intel[aspect] = {
"findings": results[:5],
"key_insight": self._summarize_findings(results, competitor, aspect)
}
return intel
def _search(self, query: str, freshness: str = "month") -> list[dict]:
response = self.client.post("/v1/run", body={
"model": "cloudsway/search",
"operation": "search",
"input": {
"query": query,
"num_results": 10,
"freshness": freshness,
"include_summary": True
}
})
return response.json()["output"]["results"]
def _summarize_findings(
self, results: list[dict], competitor: str, aspect: str
) -> str:
summaries = "\n".join(
f"- {r['summary']}" for r in results[:5] if r.get("summary")
)
response = self.client.chat.completions.create(
model="openai/gpt-4o-mini",
messages=[{
"role": "user",
"content": f"Summarize what we know about {competitor}'s "
f"{aspect} based on:\n{summaries}\n\n"
f"One paragraph, focus on actionable intelligence."
}],
max_tokens=150
)
return response.choices[0].message.content.strip()
# Usage
agent = CompetitiveIntelAgent(api_key="your-key")
intel = agent.monitor_competitor(
competitor="OpenAI",
aspects=["product launches", "pricing changes", "partnerships", "hiring"]
)
Cloudsway vs Exa: conceptual comparison
Both are available in the SandBase ecosystem but serve different purposes. For a detailed comparison, see our social media data APIs guide and best AI search APIs guide.
| Aspect | Cloudsway Search | Exa Search |
|---|---|---|
| Search type | Ranked web results | Semantic content matching |
| Best query | ”AI agent frameworks comparison 2026" | "content that explains how agents decide which tool to use” |
| Result format | Title + URL + snippet + summary | Content + highlights + similarity score |
| Freshness | Real-time web | Crawl-dependent |
| Breadth | Entire web | Curated high-quality content |
| Agent pattern | Research, monitoring, fact-checking | RAG, content discovery, recommendation |
| Analogy | ”Google for agents" | "Semantic finder for agents” |
Integration patterns
Combining Cloudsway with RAG
Use Cloudsway to augment your RAG pipeline with fresh web data:
def augmented_rag_answer(query: str, vector_store_results: list, api_key: str):
"""Combine vector store results with live web search."""
client = OpenAI(base_url="https://api.sandbase.ai/v1", api_key=api_key)
# Get fresh web results
web_response = client.post("/v1/run", body={
"model": "cloudsway/search",
"operation": "search",
"input": {"query": query, "num_results": 5, "include_summary": True}
})
web_results = web_response.json()["output"]["results"]
# Combine contexts
internal_context = "\n".join(
f"[Internal] {doc['content']}" for doc in vector_store_results
)
web_context = "\n".join(
f"[Web: {r['url']}] {r['summary']}" for r in web_results
)
# Generate answer with combined context
response = client.chat.completions.create(
model="openai/gpt-4o",
messages=[
{"role": "system", "content": "Answer using both internal knowledge and web sources. Cite sources."},
{"role": "user", "content": f"Question: {query}\n\nInternal sources:\n{internal_context}\n\nWeb sources:\n{web_context}"}
]
)
return response.choices[0].message.content
Pricing and usage
Cloudsway Search uses per-call pricing through SandBase:
| Usage level | Estimated monthly cost | Queries/day |
|---|---|---|
| Light (development) | $5–15 | 10–50 |
| Medium (production agent) | $30–100 | 100–500 |
| Heavy (multi-agent research) | $200–500 | 1000–5000 |
Cost-per-query is significantly lower than running your own search infrastructure. No crawling, no indexing, no infrastructure management.
Related Reading
- Cloudsway vs Exa: Which Search API for Your Agent
- Exa Search vs Tavily vs Firecrawl vs SerpAPI: Search APIs for AI Agents in 2026
- Top 6 AI Search APIs for Agent Workflows in 2026
- Exa Search on SandBase.ai: From Search API to Agent Service
- AI Agent Infrastructure Stack 2026
- RAG Cost Structure: Embedding + Search + LLM
Conclusion
Cloudsway Search fills a specific gap in the agent toolchain: real-time, ranked web search with structured output. It’s not a replacement for semantic search or vector databases — it’s complementary. Use it when your agent needs to know what’s happening now, find authoritative sources, or validate claims against the live web.
The single-operation design keeps integration simple: one API call, structured JSON response, ready for agent consumption. Combined with SandBase’s unified billing and API management, it fits naturally into any multi-tool agent architecture.


