September 5, 2025

# Building a Full-Stack Search Agent with Parallel and Cerebras

Build a web research agent that combines Parallel's Search API with streaming AI inference.

Tags:Developers
Reading time: 5 min
GithubTry the App
Building a Full-Stack Search Agent with Parallel and Cerebras

This guide demonstrates how to build a web research agent that combines Parallel's Search API with streaming AI inference. By the end, you'll have a complete search agent with a simple frontend that shows searches, results, and AI responses as they stream in real-time.

Complete app available here[here](https://oss.parallel.ai/agent/).

Cerebras agent with Parallel search

Illustration demonstrating deep research API concepts, web search capabilities, or AI agent integration features
![](https://cdn.sanity.io/images/5hzduz3y/production/6b42da3f31c2385bc01ecb1c2f5f85bcdbb99c0f-1756x1080.gif)

## The Architecture

The search agent we're building includes:

  • - A simple search homepage
  • - User-editable system prompt in config modal
  • - Agent connection through Parallel Search API tool use
  • - Streaming searches, search results, AI reasoning, and AI responses
  • - Clean rendering of results as they arrive

Our technology stack:

  • - Parallel TypeScript SDK[Parallel TypeScript SDK](https://www.npmjs.com/package/parallel-web) for the Search API
  • - Vercel AI SDK[Vercel AI SDK](https://ai-sdk.dev/docs/introduction) for AI orchestration
  • - Cerebras[Cerebras](https://ai-sdk.dev/providers/ai-sdk-providers/cerebras) with GPT-OSS 120B for fast responses
  • - Cloudflare Workers[Cloudflare Workers](https://workers.cloudflare.com/) for deployment

## Why This Architecture Works

### Search API vs Traditional Agent Search Architecture

Parallel's Search API is designed for machines from first principles. The key difference from other search APIs like Exa or Tavily is that it provides all required context in a single API call. Other search approaches typically require two separate calls - one for getting the search engine results page (SERP), another for scraping the relevant pages. This traditional approach is slower and more token-heavy for the LLM.

Parallel streamlines this by finding the most relevant context from all pages immediately, returning only the relevant content to reduce context bloat. Our Search API benchmark[benchmark](/blog/search-api-benchmark) demonstrates that the Parallel Search API being used in an agentic workflow can translate to up to 20% gains in accuracy vs other Search providers.

The diagram also illustrates how the AI agent can iteratively call the Search API multiple times, allowing it to explore different angles and gather comprehensive information before providing a final response. This multi-step capability is essential for true agentic behavior.

Multi-step Search API calls

Illustration demonstrating deep research API concepts, web search capabilities, or AI agent integration features
![](https://cdn.sanity.io/images/5hzduz3y/production/e2e1591612c62f08393a323bef8895a3e4dfc9ee-1096x1356.png)

### Choosing the Vercel AI SDK

Most AI providers ship models with built-in tool calling via /chat/completions endpoints. However, doing tool calling in a streaming fashion requires working with Server-Sent Events and multiple API round trips, which is complex to implement correctly.

The Vercel AI SDK elegantly abstracts provider-specific quirks and allows calling most providers with most of their features from a unified interface. This eliminates the need to work directly with raw API specifications and handle the back-and-forth tool calling manually.

The SDK offers multiple approaches for building this agent. While we use vanilla HTML/JavaScript for simplicity, the same backend can work with React frontends using AI SDK UI components for more sophisticated interfaces. The streaming approach we demonstrate works across different frontend frameworks, giving you flexibility in your implementation choice.

## Implementation

Now that we understand the architectural advantages, let's walk through building this search agent step by step.

### Dependencies and Setup

### Install cerebras
1
npm i ai zod @ai-sdk/cerebras```
npm i ai zod @ai-sdk/cerebras
```

To prevent TypeScript's "Type instantiation is excessively deep" error, zod requires a version suffix. Import the required functions:

### Prevent typescript errors
1
2
3
import { createCerebras } from "@ai-sdk/cerebras"; import { streamText, tool, stepCountIs } from "ai"; import { z } from "zod/v4";```
import { createCerebras } from "@ai-sdk/cerebras";
import { streamText, tool, stepCountIs } from "ai";
import { z } from "zod/v4";
```

### Defining the Search Tool

This section covers setting up the core search functionality that will power our AI agent:

### Define the search tool
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
//define execution of the tool const execute = async ({ objective }) => { const parallel = new Parallel({ apiKey: env.PARALLEL_API_KEY, }); const searchResult = await parallel.beta.search({ objective, search_queries: undefined, processor: "base", // Keep reasonable to balance context and token usage max_results: 10, max_chars_per_result: 1000, }); return searchResult; }; // Define the search tool const searchTool = tool({ description: `# Web Search Tool **Purpose:** Perform web searches and return LLM-friendly results. **Usage:** - objective: Natural-language description of your research goal (max 200 characters) **Best Practices:** - Be specific about what information you need - Mention if you want recent/current data - Keep objectives concise but descriptive`, inputSchema: z.object({ objective: z .string() .describe( "Natural-language description of your research goal (max 200 characters)" ), }), execute, });```
//define execution of the tool
const execute = async ({ objective }) => {
const parallel = new Parallel({
apiKey: env.PARALLEL_API_KEY,
});
 
const searchResult = await parallel.beta.search({
objective,
search_queries: undefined,
processor: "base",
// Keep reasonable to balance context and token usage
max_results: 10,
max_chars_per_result: 1000,
});
return searchResult;
};
 
// Define the search tool
const searchTool = tool({
description: `# Web Search Tool
 
**Purpose:** Perform web searches and return LLM-friendly results.
 
**Usage:**
- objective: Natural-language description of your research goal (max 200 characters)
 
**Best Practices:**
- Be specific about what information you need
- Mention if you want recent/current data
- Keep objectives concise but descriptive`,
inputSchema: z.object({
objective: z
.string()
.describe(
"Natural-language description of your research goal (max 200 characters)"
),
}),
execute,
});
```

### Key implementation choices:

  • - We choose "objective" over "search_queries" because it allows for natural language description of research goals, making the tool more intuitive for the AI to use
  • - The "base" processor prioritizes speed while "pro" focuses on freshness and quality - choose based on your use case requirements
  • - Token limits are balanced to provide sufficient context without overwhelming the model

## Creating the Streaming Agent

Here we set up the core AI agent with multi-step reasoning capabilities:

### Set up the streaming agent
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// Initialize Cerebras provider const cerebras = createCerebras({ apiKey: env.CEREBRAS_API_KEY, }); // Stream the research process const result = streamText({ model: cerebras("gpt-oss-120b"), system: systemPrompt || `You are a simple search agent. Your mission is to comprehensively fulfill the user's search objective by conducting 1 up to 3 searches from different angles until you have gathered sufficient information to provide a complete answer. The current date is ${new Date( Date.now() ) .toISOString() .slice(0, 10)} **Research Philosophy:** - Each search should explore a unique angle or aspect of the topic - NEVER try to OPEN an article, the excerpts provided should be enough **Key Parameters:** - objective: Describe what you're trying to accomplish. This helps the search engine understand intent and provide relevant results. **Output:** After doing the searches required, write up your 'search report' that answers the initial search query. Even if you could not answer the question ensure to always provide a final report! Please do NOT use markdown tables. `, prompt: query, tools: { search: searchTool }, stopWhen: stepCountIs(25), maxOutputTokens: 20000, });```
// Initialize Cerebras provider
const cerebras = createCerebras({
apiKey: env.CEREBRAS_API_KEY,
});
 
// Stream the research process
const result = streamText({
model: cerebras("gpt-oss-120b"),
system:
systemPrompt ||
`You are a simple search agent. Your mission is to comprehensively fulfill the user's search objective by conducting 1 up to 3 searches from different angles until you have gathered sufficient information to provide a complete answer. The current date is ${new Date(
Date.now()
)
.toISOString()
.slice(0, 10)}
 
**Research Philosophy:**
- Each search should explore a unique angle or aspect of the topic
- NEVER try to OPEN an article, the excerpts provided should be enough
 
**Key Parameters:**
- objective: Describe what you're trying to accomplish. This helps the search engine understand intent and provide relevant results.
 
**Output:**
After doing the searches required, write up your 'search report' that answers the initial search query. Even if you could not answer the question ensure to always provide a final report! Please do NOT use markdown tables.
`,
prompt: query,
tools: { search: searchTool },
stopWhen: stepCountIs(25),
maxOutputTokens: 20000,
});
```

### Important configuration details:

The stepCountIs(25) parameter allows the agent to make multiple search calls and reasoning steps, enabling thorough research across different angles before providing a comprehensive response.

The system prompt guides the agent to conduct multiple searches from different perspectives, which is crucial for comprehensive research.

### .env
1
2
CEREBRAS_API_KEY=YOUR_KEY PARALLEL_API_KEY=YOUR_KEY```
CEREBRAS_API_KEY=YOUR_KEY
PARALLEL_API_KEY=YOUR_KEY
```

## Streaming Response Handler

This section handles the real-time streaming of agent responses to the frontend:

### Handle agent streams
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// Return the streaming response const encoder = new TextEncoder(); const stream = new ReadableStream({ async start(controller) { try { for await (const chunk of result.fullStream) { const data = `data: ${JSON.stringify(chunk)}\n\n`; controller.enqueue(encoder.encode(data)); } controller.enqueue(encoder.encode("data: [DONE]\n\n")); } catch (error) { console.error("Stream error:", error); controller.enqueue( encoder.encode( `data: ${JSON.stringify({ type: "error", error: error.message, })}\n\n` ) ); } finally { controller.close(); } }, }); return new Response(stream, { headers: { "Content-Type": "text/event-stream", "Cache-Control": "no-cache", Connection: "keep-alive", }, });```
// Return the streaming response
const encoder = new TextEncoder();
const stream = new ReadableStream({
async start(controller) {
try {
for await (const chunk of result.fullStream) {
const data = `data: ${JSON.stringify(chunk)}\n\n`;
controller.enqueue(encoder.encode(data));
}
controller.enqueue(encoder.encode("data: [DONE]\n\n"));
} catch (error) {
console.error("Stream error:", error);
controller.enqueue(
encoder.encode(
`data: ${JSON.stringify({
type: "error",
error: error.message,
})}\n\n`
)
);
} finally {
controller.close();
}
},
});
 
return new Response(stream, {
headers: {
"Content-Type": "text/event-stream",
"Cache-Control": "no-cache",
Connection: "keep-alive",
},
});
```

## Cloudflare Workers Deployment

### Configuration

### Configure Cloudflare workers
1
2
3
4
5
6
7
{ "$schema": "https://unpkg.com/wrangler@latest/config-schema.json", "name": "web-research-agent", "main": "worker.ts", "compatibility_date": "2025-07-14", "route": { "custom_domain": true, "pattern": "yourdomain.com" } }```
{
"$schema": "https://unpkg.com/wrangler@latest/config-schema.json",
"name": "web-research-agent",
"main": "worker.ts",
"compatibility_date": "2025-07-14",
"route": { "custom_domain": true, "pattern": "yourdomain.com" }
}
```

## Deployment Process

Requirements:

  • - Node.js
  • - Wrangler CLI
  • - Cloudflare account

Before deploying, submit your secrets:

### Submit your secrets
1
wrangler secret bulk .env```
wrangler secret bulk .env
```

Deploy:

### Deploy with:
1
wrangler deploy```
wrangler deploy
```

## Frontend Implementation

The worker also serves the frontend at the root path:

### Serve the frontend at the root path
1
2
3
4
5
6
7
8
import indexHtml from "./index.html"; // in your handler: if (request.method === "GET" && url.pathname === "/") { return new Response(indexHtml, { headers: { "Content-Type": "text/html" }, }); }```
import indexHtml from "./index.html";
 
// in your handler:
if (request.method === "GET" && url.pathname === "/") {
return new Response(indexHtml, {
headers: { "Content-Type": "text/html" },
});
}
```

### Handling the Stream

The frontend processes the streaming responses in real-time:

### Process the streaming responses
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
async function startResearch() { const query = searchInput.value.trim(); if (!query) return; showLoadingState(); currentMode = "text"; // Abort any existing request if (abortController) { abortController.abort(); } abortController = new AbortController(); try { const response = await fetch("/api/research", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ query: query, systemPrompt: currentSystemPrompt || undefined, }), signal: abortController.signal, }); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const reader = response.body?.getReader(); const decoder = new TextDecoder(); if (!reader) { throw new Error("No response body"); } let buffer = ""; showResults(); // Show results interface when stream starts while (true) { const { done, value } = await reader.read(); if (done) break; buffer += decoder.decode(value, { stream: true }); // Process complete lines const lines = buffer.split("\n"); buffer = lines.pop() || ""; // Keep the last incomplete line in buffer for (const line of lines) { if (line.startsWith("data: ")) { const data = line.slice(6); if (data === "[DONE]") { return; } try { const chunk = JSON.parse(data); handleStreamChunk(chunk); } catch (error) { console.error("Error parsing chunk:", error, data); } } } } } catch (error) { if (error.name === "AbortError") { console.log("Request was aborted"); } else { console.error("Research error:", error); showError(`Research failed: ${error.message}`); } } finally { abortController = null; } } function handleStreamChunk(chunk) { switch (chunk.type) { case "text-delta": if (currentMode === "reasoning") { finalizeCurrentSection(); currentMode = "text"; } appendText(chunk.text || ""); break; case "reasoning-delta": if (currentMode === "text") { finalizeCurrentSection(); currentMode = "reasoning"; } appendReasoning(chunk.text || ""); break; case "tool-call": finalizeCurrentSection(); addToolCall(chunk); break; case "tool-result": addToolResult(chunk); break; case "error": showError(chunk.error?.message); break; case "finish": finalizeCurrentSection(); addFinishIndicator(chunk.finishReason); console.log("Research completed with reason:", chunk.finishReason); break; } }```
async function startResearch() {
const query = searchInput.value.trim();
if (!query) return;
 
showLoadingState();
currentMode = "text";
 
// Abort any existing request
if (abortController) {
abortController.abort();
}
 
abortController = new AbortController();
 
try {
const response = await fetch("/api/research", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
query: query,
systemPrompt: currentSystemPrompt || undefined,
}),
signal: abortController.signal,
});
 
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
 
const reader = response.body?.getReader();
const decoder = new TextDecoder();
 
if (!reader) {
throw new Error("No response body");
}
 
let buffer = "";
showResults(); // Show results interface when stream starts
 
while (true) {
const { done, value } = await reader.read();
 
if (done) break;
 
buffer += decoder.decode(value, { stream: true });
 
// Process complete lines
const lines = buffer.split("\n");
buffer = lines.pop() || ""; // Keep the last incomplete line in buffer
 
for (const line of lines) {
if (line.startsWith("data: ")) {
const data = line.slice(6);
if (data === "[DONE]") {
return;
}
 
try {
const chunk = JSON.parse(data);
handleStreamChunk(chunk);
} catch (error) {
console.error("Error parsing chunk:", error, data);
}
}
}
}
} catch (error) {
if (error.name === "AbortError") {
console.log("Request was aborted");
} else {
console.error("Research error:", error);
showError(`Research failed: ${error.message}`);
}
} finally {
abortController = null;
}
}
 
function handleStreamChunk(chunk) {
switch (chunk.type) {
case "text-delta":
if (currentMode === "reasoning") {
finalizeCurrentSection();
currentMode = "text";
}
appendText(chunk.text || "");
break;
case "reasoning-delta":
if (currentMode === "text") {
finalizeCurrentSection();
currentMode = "reasoning";
}
appendReasoning(chunk.text || "");
break;
case "tool-call":
finalizeCurrentSection();
addToolCall(chunk);
break;
case "tool-result":
addToolResult(chunk);
break;
case "error":
showError(chunk.error?.message);
break;
case "finish":
finalizeCurrentSection();
addFinishIndicator(chunk.finishReason);
console.log("Research completed with reason:", chunk.finishReason);
break;
}
}
```

## Styling and Dependencies

The frontend uses https://cdn.tailwindcss.com[https://cdn.tailwindcss.com](https://cdn.tailwindcss.com/) for styling, which reduces the lines needed for clean design without additional dependencies. The implementation uses regular HTML rather than React or other frameworks, making it accessible and easy to understand.

## Development Context and Resources

The complete source files provide essential context for both backend logic and frontend streaming:

Essential source files:

  • - worker.ts - Complete backend implementation
  • - index.html - Frontend with streaming UI

These files contain the complete TypeScript definitions and HTML implementation that are essential for understanding the full integration between the Parallel Search API and the streaming frontend.

When altering the front-end implementation, having proper Typescript context is crucial for developer experience. The AI SDK Stubs file (https://unpkg.com/ai@5.0.22/dist/index.d.ts[https://unpkg.com/ai@5.0.22/dist/index.d.ts](https://unpkg.com/ai@5.0.22/dist/index.d.ts)) was used to overcome the limited dev tooling for plain-HTML front-ends. More context can be found in SPEC.md.

## Model Considerations

The guide uses GPT-OSS 120B on Cerebras, which is one of the fastest models available and fully open source. However, there are some noted limitations. The model sometimes inaccurately stops early during search despite instructions and occasionally tries to call tools that aren't available, likely due to overfitting on training data. For production use cases, consider upgrading to better tool-calling models that don't have these quirks while maintaining similar speed. Both Groq and Cerebras provide such alternatives.

## Production Considerations

This demonstration omits several production requirements: Authentication: No user authentication is implemented

  • - Rate limiting: Currently limited only by API budgets
  • - Error handling: Basic error handling is shown, but could be expanded
  • - Monitoring: No observability or logging beyond basic console output

Adding these features would be the next step for enterprise deployment.

The resulting agent demonstrates real-time streaming of search operations, multi-step AI reasoning with tool use, clean separation of search logic and presentation, and serverless deployment ready for scaling. The architecture shows how modern AI SDKs can simplify complex multi-step agent workflows while maintaining performance and user experience quality.

Resources:

  • - Complete source code[Complete source code](https://github.com/parallel-web/parallel-cookbook/tree/main/typescript-recipes/parallel-search-agent)
  • - Parallel API documentation[Parallel API documentation](https://docs.parallel.ai/search/search-quickstart)
  • - Get Parallel API keys[Get Parallel API keys](https://platform.parallel.ai/)

## Ready to get started?

Sign up for free. No credit card required.

Try Parallel[Try Parallel](https://platform.parallel.ai/home)Contact sales[Contact sales](https://contact.parallel.ai/)
Are you an agent? Read this to onboard Parallel[Are you an agent? Read this to onboard Parallel](https://parallel.ai/agents.md)
Parallel avatar

By Parallel

September 5, 2025

## Related Posts71

OpenClaw now has free, LLM-optimized web search by default powered by Parallel

Jun 9, 2026

- [OpenClaw now has free, LLM-optimized web search by default powered by Parallel](https://parallel.ai/blog/free-web-search-openclaw)

Tags:Company
Author: By Parallel
Introducing real-time Entity Search

Jun 5, 2026

- [Introducing real-time Entity Search](https://parallel.ai/blog/entity-search-company)

Tags:Product
Author: By Parallel
How we enrich & triage inbound leads using the Parallel Task API

Jun 4, 2026

- [How we enrich & triage inbound leads using the Parallel Task API](https://parallel.ai/blog/enrich-triage-inbound-leads-parallel-task-api)

Tags:Developers
Author: By Khushi Shelat
How AirOps creates citation-worthy content at scale, powered by Parallel

May 20, 2026

- [How AirOps creates citation-worthy content at scale, powered by Parallel](https://parallel.ai/blog/case-study-airops)

Tags:Customers
Author: By Parallel
Introducing Index by Parallel

May 19, 2026

- [Introducing Index by Parallel](https://parallel.ai/blog/introducing-index-by-parallel)

Tags:Product
Author: By Parallel
Parallel Monitor API: New processor tiers, snapshots and event streams, and Basis on every event

May 7, 2026

- [Parallel Monitor API: New processor tiers, snapshots and event streams, and Basis on every event](https://parallel.ai/blog/monitor-api)

Tags:Product
Author: By Parallel
How we built parallelmpp.dev

May 5, 2026

- [How we built parallelmpp.dev](https://parallel.ai/blog/parallel-mpp-dev)

Tags:Developers
Author: By Son Do
Actively + Parallel

Apr 29, 2026

- [How Actively's Per Account Agents use Parallel to turn the entire web into a proactive sales intelligence layer](https://parallel.ai/blog/case-study-actively)

Tags:Customers
Author: By Parallel
Parallel Raises at $2 Billion Valuation to Scale Web Infrastructure for Agents

Apr 29, 2026

- [Parallel Raises at $2 Billion Valuation to Scale Web Infrastructure for Agents](https://parallel.ai/blog/series-b)

Tags:Company
Author: By Parallel
Fully Free CLI with Pi, Ollama, Gemma 4, Parallel

Apr 24, 2026

- [Building a free CLI agent with Pi, Ollama, Gemma 4, and Parallel](https://parallel.ai/blog/free-CLI-agent)

Tags:Developers
Author: By Matt Harris
Parallel Search is now free via MCP

Apr 23, 2026

- [Parallel Search is now free for agents via MCP](https://parallel.ai/blog/free-web-search-mcp)

Tags:Product
Author: By Parallel
Search & Extract Benchmarks

Apr 21, 2026

- [Upgrades to the Parallel Search & Extract APIs](https://parallel.ai/blog/parallel-search-api)

Tags:Benchmarks
Author: By Parallel
How Finch is scaling plaintiff law with AI agents that research like associates

Apr 20, 2026

- [How Finch is scaling plaintiff law with AI agents that research like associates](https://parallel.ai/blog/case-study-finch)

Tags:Customers
Author: By Parallel
Genpact and Parallel Web Systems Partner to Drive Tangible Efficiency from AI Systems

Apr 8, 2026

- [Genpact and Parallel Web Systems Partner to Drive Tangible Efficiency from AI Systems](https://parallel.ai/blog/genpact-parallel-partnership)

Tags:Company
Author: By Parallel
Genpact & Parallel

Apr 8, 2026

- [How Genpact helps top US insurers cut contents claims processing times in half with Parallel ](https://parallel.ai/blog/case-study-genpact)

Tags:Customers
Author: By Parallel
DeepSearchQA: Parallel Task API benchmarks deepresearch

Apr 7, 2026

- [A new deep research frontier on DeepSearchQA with the Task API Harness](https://parallel.ai/blog/deep-research)

Tags:Benchmarks
Author: By Parallel
How Modal saves tens of thousands annually by building in-house GTM pipelines with Parallel

Mar 30, 2026

- [How Modal saves tens of thousands annually by building in-house GTM pipelines with Parallel](https://parallel.ai/blog/case-study-modal)

Tags:Customers
Author: By Parallel
Opendoor and Parallel Case Study

Mar 25, 2026

- [How Opendoor uses Parallel as the enterprise grade web research layer powering its AI-native real estate operations](https://parallel.ai/blog/case-study-opendoor)

Tags:Customers
Author: By Parallel
Introducing stateful web research agents with multi-turn conversations

Mar 19, 2026

- [Introducing stateful web research agents with multi-turn conversations](https://parallel.ai/blog/task-api-interactions)

Tags:Product
Author: By Parallel
Parallel is now live on Tempo via the Machine Payments Protocol (MPP)

Mar 18, 2026

- [Parallel is live on Tempo, now available natively to agents with the Machine Payments Protocol](https://parallel.ai/blog/tempo-stripe-mpp)

Tags:Company
Author: By Parallel
Kepler | Parallel Case Study

Mar 17, 2026

- [How Parallel helped Kepler build AI that finance professionals can actually trust](https://parallel.ai/blog/case-study-kepler)

Tags:Customers
Author: By Parallel
Introducing the Parallel CLI

Mar 10, 2026

- [Introducing the Parallel CLI](https://parallel.ai/blog/parallel-cli)

Tags:Product
Author: By Parallel
Profound + Parallel Web Systems

Mar 4, 2026

- [How Profound helps brands win AI Search with high-quality web research and content creation powered by Parallel](https://parallel.ai/blog/case-study-profound)

Tags:Customers
Author: By Parallel
How Harvey is expanding legal AI internationally with Parallel

Mar 2, 2026

- [How Harvey is expanding legal AI internationally with Parallel](https://parallel.ai/blog/case-study-harvey)

Tags:Customers
Author: By Parallel
Tabstack + Parallel Case Study

Feb 23, 2026

- [How Tabstack by Mozilla enables agents to navigate the web with Parallel’s best-in-class web search](https://parallel.ai/blog/case-study-tabstack)

Tags:Customers
Author: By Parallel
Parallel | Vercel

Feb 4, 2026

- [Parallel Web Tools and Agents now available across Vercel AI Gateway, AI SDK, and Marketplace](https://parallel.ai/blog/vercel)

Tags:Product
Author: By Parallel
Product release: Authenticated page access for the Parallel Task API

Jan 28, 2026

- [Authenticated page access for the Parallel Task API](https://parallel.ai/blog/authenticated-page-access)

Tags:Product
Author: By Parallel
Introducing structured outputs for the Monitor API

Jan 21, 2026

- [Introducing structured outputs for the Monitor API](https://parallel.ai/blog/structured-outputs-monitor)

Tags:Product
Author: By Parallel
Product release: Research Models with Basis for the Parallel Chat API

Jan 15, 2026

- [Introducing research models with Basis for the Parallel Chat API](https://parallel.ai/blog/research-models-chat)

Tags:Product
Author: By Parallel
Parallel + Cerebras

Jan 8, 2026

- [Build a real-time fact checker with Parallel and Cerebras](https://parallel.ai/blog/cerebras-fact-checker)

Tags:Developers
Author: By Parallel
DeepSearch QA: Task API

Dec 17, 2025

- [Parallel Task API achieves state-of-the-art accuracy on DeepSearchQA](https://parallel.ai/blog/deepsearch-qa)

Tags:Benchmarks
Author: By Parallel
Product release: Granular Basis

Dec 16, 2025

- [Introducing Granular Basis for the Task API](https://parallel.ai/blog/granular-basis-task-api)

Tags:Product
Author: By Parallel
How Amp’s coding agents build better software with Parallel Search

Dec 11, 2025

- [How Amp’s coding agents build better software with Parallel Search](https://parallel.ai/blog/case-study-amp)

Tags:Customers
Author: By Parallel
Latency improvements on the Parallel Task API

Dec 10, 2025

- [Latency improvements on the Parallel Task API ](https://parallel.ai/blog/task-api-latency)

Tags:Product
Author: By Parallel
Product release: Extract

Nov 20, 2025

- [Introducing Parallel Extract](https://parallel.ai/blog/introducing-parallel-extract)

Tags:Product
Author: By Parallel
FindAll API - Product Release

Nov 18, 2025

- [Introducing Parallel FindAll](https://parallel.ai/blog/introducing-findall-api)

Tags:Product,Benchmarks
Author: By Parallel
Product release: Monitor API

Nov 13, 2025

- [Introducing Parallel Monitor](https://parallel.ai/blog/monitor-api-beta)

Tags:Product
Author: By Parallel
Parallel raises $100M Series A to build web infrastructure for agents

Nov 12, 2025

- [Parallel raises $100M Series A to build web infrastructure for agents](https://parallel.ai/blog/series-a)

Tags:Company
Author: By Parallel
How Macroscope reduced code review false positives with Parallel

Nov 11, 2025

- [How Macroscope reduced code review false positives with Parallel](https://parallel.ai/blog/case-study-macroscope)

Tags:Customers
Author: By Parallel
Product release - Parallel Search API

Nov 6, 2025

- [Introducing Parallel Search](https://parallel.ai/blog/parallel-search-api-beta)

Tags:Benchmarks
Author: By Parallel
Benchmarks: SealQA: Task API

Nov 3, 2025

- [Parallel processors set new price-performance standard on SealQA benchmark](https://parallel.ai/blog/benchmarks-task-api-sealqa)

Tags:Benchmarks
Author: By Parallel
Introducing LLMTEXT, an open source toolkit for the llms.txt standard

Oct 30, 2025

- [Introducing LLMTEXT, an open source toolkit for the llms.txt standard](https://parallel.ai/blog/LLMTEXT-for-llmstxt)

Tags:Product
Author: By Parallel
Starbridge + Parallel

Oct 23, 2025

- [How Starbridge powers public sector GTM with state-of-the-art web research](https://parallel.ai/blog/case-study-starbridge)

Tags:Customers
Author: By Parallel
Building a market research platform with Parallel Deep Research

Oct 22, 2025

- [Building a market research platform with Parallel Deep Research](https://parallel.ai/blog/cookbook-market-research-platform-with-parallel)

Tags:Developers
Author: By Parallel
How Lindy brings state-of-the-art web research to automation flows

Oct 17, 2025

- [How Lindy brings state-of-the-art web research to automation flows](https://parallel.ai/blog/case-study-lindy)

Tags:Customers
Author: By Parallel
Introducing the Parallel Task MCP Server

Oct 16, 2025

- [Introducing the Parallel Task MCP Server](https://parallel.ai/blog/parallel-task-mcp-server)

Tags:Product
Author: By Parallel
Introducing the Core2x Processor for improved compute control on the Task API

Oct 9, 2025

- [Introducing the Core2x Processor for improved compute control on the Task API](https://parallel.ai/blog/core2x-processor)

Tags:Product
Author: By Parallel
How Day AI merges private and public data for business intelligence

Oct 8, 2025

- [How Day AI merges private and public data for business intelligence](https://parallel.ai/blog/case-study-day-ai)

Tags:Customers
Author: By Parallel
Full Basis framework for all Task API Processors

Oct 7, 2025

- [Full Basis framework for all Task API Processors](https://parallel.ai/blog/full-basis-framework-for-task-api)

Tags:Product
Author: By Parallel
Building a real-time streaming task manager with Parallel

Oct 6, 2025

- [Building a real-time streaming task manager with Parallel](https://parallel.ai/blog/cookbook-sse-task-manager-with-parallel)

Tags:Developers
Author: By Parallel
How Gumloop built a new AI automation framework with web intelligence as a core node

Sep 30, 2025

- [How Gumloop built a new AI automation framework with web intelligence as a core node](https://parallel.ai/blog/case-study-gumloop)

Tags:Customers
Author: By Parallel
Introducing the TypeScript SDK

Sep 16, 2025

- [Introducing the TypeScript SDK](https://parallel.ai/blog/typescript-sdk)

Tags:Product
Author: By Parallel
Building a serverless competitive intelligence platform with MCP + Task API

Sep 12, 2025

- [Building a serverless competitive intelligence platform with MCP + Task API](https://parallel.ai/blog/cookbook-competitor-research-with-reddit-mcp)

Tags:Developers
Author: By Parallel
Introducing Parallel Deep Research reports

Sep 11, 2025

- [Introducing Parallel Deep Research reports](https://parallel.ai/blog/deep-research-reports)

Tags:Product
Author: By Parallel
BrowseComp / DeepResearch: Task API

Sep 9, 2025

- [A new pareto-frontier for Deep Research price-performance](https://parallel.ai/blog/deep-research-benchmarks)

Tags:Benchmarks
Author: By Parallel
Webhooks for the Parallel Task API

Aug 21, 2025

- [Webhooks for the Parallel Task API](https://parallel.ai/blog/webhooks)

Tags:Product
Author: By Parallel
Introducing Parallel: Web Search Infrastructure for AIs

Aug 14, 2025

- [Introducing Parallel: Web Search Infrastructure for AIs ](https://parallel.ai/blog/introducing-parallel)

Tags:Benchmarks,Product
Author: By Parallel
Introducing SSE for Task Runs

Aug 7, 2025

- [Introducing SSE for Task Runs](https://parallel.ai/blog/sse-for-tasks)

Tags:Product
Author: By Parallel
A new line of advanced Processors: Ultra2x, Ultra4x, and Ultra8x

Aug 5, 2025

- [A new line of advanced Processors: Ultra2x, Ultra4x, and Ultra8x ](https://parallel.ai/blog/new-advanced-processors)

Tags:Product
Author: By Parallel
Introducing Auto Mode for the Parallel Task API

Aug 4, 2025

- [Introducing Auto Mode for the Parallel Task API](https://parallel.ai/blog/task-api-auto-mode)

Tags:Product
Author: By Parallel
A linear dithering of a search interface for agents

Jul 31, 2025

- [A state-of-the-art search API purpose-built for agents](https://parallel.ai/blog/search-api-benchmark)

Tags:Benchmarks
Author: By Parallel
Parallel Search MCP Server in Devin

Jul 31, 2025

- [Parallel Search MCP Server in Devin](https://parallel.ai/blog/parallel-search-mcp-in-devin)

Tags:Product
Author: By Parallel
Introducing Tool Calling via MCP Servers

Jul 28, 2025

- [Introducing Tool Calling via MCP Servers](https://parallel.ai/blog/mcp-tool-calling)

Tags:Product
Author: By Parallel
Introducing the Parallel Search MCP Server

Jul 14, 2025

- [Introducing the Parallel Search MCP Server ](https://parallel.ai/blog/search-mcp-server)

Tags:Product
Author: By Parallel
Starting today, Source Policy is available for both the Parallel Task API and Search API - giving you granular control over which sources your AI agents access and how results are prioritized.

Jul 8, 2025

- [Introducing Source Policy](https://parallel.ai/blog/source-policy)

Tags:Product
Author: By Parallel
The Parallel Task Group API

Jul 2, 2025

- [The Parallel Task Group API](https://parallel.ai/blog/task-group-api)

Tags:Product
Author: By Parallel
State of the Art Deep Research APIs

Jun 17, 2025

- [State of the Art Deep Research APIs](https://parallel.ai/blog/deep-research-browsecomp)

Tags:Benchmarks
Author: By Parallel
Introducing the Parallel Search API

Jun 10, 2025

- [Parallel Search API is now available in alpha](https://parallel.ai/blog/search-api-alpha)

Tags:Product
Author: By Parallel
Introducing the Parallel Chat API - a low latency web research API for web based LLM completions. The Parallel Chat API returns completions in text and structured JSON format, and is OpenAI Chat Completions compatible.

May 30, 2025

- [Introducing the Parallel Chat API ](https://parallel.ai/blog/chat-api)

Tags:Product
Author: By Parallel
Parallel Web Systems introduces Basis with calibrated confidences - a new verification framework for AI web research and search API outputs that sets a new industry standard for transparent and reliable deep research.

May 16, 2025

- [Introducing Basis with Calibrated Confidences ](https://parallel.ai/blog/introducing-basis-with-calibrated-confidences)

Tags:Product
Author: By Parallel
The Parallel Task API is a state-of-the-art system for automated web research that delivers the highest accuracy at every price point.

Apr 24, 2025

- [Introducing the Parallel Task API](https://parallel.ai/blog/parallel-task-api)

Tags:Product,Benchmarks
Author: By Parallel
![Company Logo](https://parallel.ai/parallel-logo-540.png)

Contact

  • hello@parallel.ai[hello@parallel.ai](mailto:hello@parallel.ai)

For Content Owners

  • index.parallel.ai[index.parallel.ai](https://index.parallel.ai)

Products

  • Task API[Task API](https://parallel.ai/products/task)
  • Monitor API[Monitor API](https://parallel.ai/products/monitor)
  • FindAll API[FindAll API](https://parallel.ai/products/findall)
  • Chat API[Chat API](https://parallel.ai/products/chat)
  • Search API[Search API](https://parallel.ai/products/search)
  • Extract API[Extract API](https://parallel.ai/products/extract)
  • Index by Parallel[Index by Parallel](https://index.parallel.ai)

Developers

  • Docs[Docs](https://docs.parallel.ai/getting-started/overview)
  • Onboard your Agent[Onboard your Agent](https://docs.parallel.ai/getting-started/overview#onboard-your-agent)
  • Parallel MCP[Parallel MCP](https://docs.parallel.ai/integrations/mcp/quickstart)
  • Parallel CLI[Parallel CLI](https://docs.parallel.ai/integrations/cli)
  • API Reference[API Reference](https://docs.parallel.ai/api-reference)
  • Python SDK[Python SDK](https://pypi.org/project/parallel-web/)
  • Typescript SDK[Typescript SDK](https://www.npmjs.com/package/parallel-web)
  • Integrations[Integrations](https://docs.parallel.ai/integrations/agentic-payments)
  • Changelog[Changelog](https://docs.parallel.ai/resources/changelog)
  • Status[Status](https://status.parallel.ai/)
  • Support[Support](mailto:support@parallel.ai)

Company

  • About[About](https://parallel.ai/about)
  • Press[Press](https://parallel.ai/press)
  • Careers[Careers](https://parallel.ai/careers)
  • Pioneers[Pioneers](https://pioneers.parallel.ai/)
  • Museum of the Human Web[Museum of the Human Web](https://museum.parallel.ai/)

Resources

  • Blog[Blog](https://parallel.ai/blog)
  • Benchmarks[Benchmarks](https://parallel.ai/benchmarks)
  • Become a Content Partner[Become a Content Partner](https://index.parallel.ai/join)
  • Pricing[Pricing](https://parallel.ai/pricing)

Legal

  • Terms of Service[Terms of Service](https://parallel.ai/terms-of-service)
  • Customer Terms[Customer Terms](https://parallel.ai/customer-terms)
  • Privacy[Privacy](https://parallel.ai/privacy-policy)
  • Acceptable Use[Acceptable Use](https://parallel.ai/acceptable-use-policy)
  • Bots[Bots](https://parallel.ai/parallel-web-systems-bots)
  • Trust Center[Trust Center](https://trust.parallel.ai/)
  • Report Security Issue[Report Security Issue](mailto:security@parallel.ai)
LinkedIn[LinkedIn](https://www.linkedin.com/company/parallel-web/about/)Twitter[Twitter](https://x.com/p0)GitHub[GitHub](https://github.com/parallel-web)YouTube[YouTube](https://www.youtube.com/@parallelwebsystems)Events[Events](https://luma.com/parallelwebsystems)
All Systems Operational
![SOC 2 Compliant](https://parallel.ai/soc2.svg)

Parallel Web Systems Inc. 2026