Introducing Parallel Search Turbo: the fastest and lowest-cost search for AI. [Learn more.](/content/blog/parallel-search-turbo/index.html)[\[Learn more.\](/content/blog/parallel-search-turbo/index.html)](/content/ai/blog/parallel-search-turbo/index.html)

HumanMachine

October 6, 2025

# \\# Building a real-time streaming task manager with Parallel

Build a task streaming playground that showcases Parallel's Task API with real-time Server-Sent Events (SSE).

Tags:[Developers](/content/blog?tag=developers/index.html)

Reading time: 4 min

[Github](https://github.com/parallel-web/parallel-cookbook/tree/main/typescript-recipes/parallel-tasks-sse) [Try the App](https://oss.parallel.ai/tasks-sse/)

This guide demonstrates how to build a complete task streaming playground that showcases [Parallel's Task API](https://docs.parallel.ai/task-api/task-quickstart)[\[Parallel's Task API\](https://docs.parallel.ai/task-api/task-quickstart)](https://docs.parallel.ai/task-api/task-quickstart) with real-time Server-Sent Events (SSE). By the end, you'll have a full-featured application that creates tasks, streams their execution progress, and displays results as they arrive. This can be helpful for developers building with the Task API, demonstrating how to recreate the user interfaces in our [Playground](https://platform.parallel.ai/)[\[Playground\](https://platform.parallel.ai)](https://platform.parallel.ai/).

Complete demo available at: [https://oss.parallel.ai/tasks-sse/](https://oss.parallel.ai/tasks-sse/)[\[https://oss.parallel.ai/tasks-sse/\](https://oss.parallel.ai/tasks-sse/)](https://oss.parallel.ai/tasks-sse/)

!\[\](https://cdn.sanity.io/images/5hzduz3y/production/41b740035c5fb22bb1db114cbb255a8f3c02e44f-3924x2424.png)

## \\#\# Key Features

- \- Task Manager for All Processors: From lite ($5/1K) to ultra8x ($2400/1K)
- \- Output Schemas: Text, JSON and Auto Schema
- \- Source Policy: Domain inclusion and exclusion
- \- Webhooks: HTTP notifications on task completion
- \- Streaming events view for each Task in the Task Manager
- \- OAuth flow for easy testing

## \\#\# The Architecture

The task streaming playground we're building includes:

- \- OAuth2 authentication with Parallel's identity provider
- \- A comprehensive task creation form supporting all processor types and output schemas
- \- Real-time task progress streaming with Server-Sent Events
- \- Task history management with persistent localStorage
- \- Auto-reconnection for resilient streaming connections
- \- Rich event visualization with progress indicators and final outputs

## \\#\# Our technology stack

- \- Parallel Task API for task execution
- \- Parallel OAuth Provider for secure authentication
- \- [Server-Sent Events](https://docs.parallel.ai/task-api/task-sse)[\[Server-Sent Events\](https://docs.parallel.ai/task-api/task-sse)](https://docs.parallel.ai/task-api/task-sse) for real-time streaming
- \- [Cloudflare Workers](https://workers.cloudflare.com/)[\[Cloudflare Workers\](https://workers.cloudflare.com/)](https://workers.cloudflare.com/) for deployment and CORS proxying
- \- Pure HTML/JavaScript/CSS for maximum compatibility

## \\#\# Why this architecture

### \\#\#\# Stateless Streaming Design

The key insight behind this implementation is that you don't need to maintain any backend state during streaming. The Parallel Task API's SSE endpoint provides the complete current state every time you connect, including:

- \- All previous events that occurred before connecting
- \- The latest progress statistics
- \- Current task status and metadata
- \- Final outputs when tasks complete

This stateless design means your backend can be incredibly simple - just a CORS proxy. All the complexity lives in the well-tested Parallel infrastructure.

### \\#\#\# OAuth2 with PKCE Security

For production-ready authentication, we implement the complete OAuth2 flow with PKCE (Proof Key for Code Exchange):

1. Dynamic Client Registration: Register OAuth client on-demand
2. PKCE Challenge: Generate cryptographically secure code challenge
3. Authorization Redirect: Send user to Parallel's OAuth server
4. Token Exchange: Securely exchange authorization code for access token
5. Persistent Storage: Store token in localStorage for session management

This provides enterprise-grade security without requiring pre-registration of OAuth clients.

#### Architecture diagram

!\[\](https://cdn.sanity.io/images/5hzduz3y/production/72fdd4e38f0a0717941be31929f27bbd3c7f8e9c-1600x1028.png)

## \\#\# Implementation

### \\#\#\# Real-Time Event Streaming

Server-Sent Events (SSE) provide the real-time updates for this Task manager that helps end-users understand the progress of the Parallel Task API. This is especially helpful for longer-running processors, like Pro and above. Unlike traditional polling approaches that repeatedly ask "are you done yet?", SSE creates a persistent connection that streams updates as they happen. However, implementing SSE correctly in the browser requires handling several complex challenges.

#### \\#\#\#\# Why Manual SSE Implementation?

While browsers provide a built-in \`EventSource\` API for SSE, it has a critical limitation: \*\*you cannot set custom headers\*\*. Since Parallel's API requires authentication via the \`x-api-key\` header, we must implement SSE manually using the Fetch API and ReadableStreams.

SSE data arrives as a continuous stream of bytes, not discrete messages. Network packets can split messages in unpredictable ways:

Our implementation handles this with a streaming buffer pattern:

````
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

const reader = response.body.getReader();
const decoder = new TextDecoder();
let buffer = '';

while (true) {
  const { done, value } = await reader.read();
  if (done) break;

// Add new data to buffer
  buffer += decoder.decode(value, { stream: true });

// Split into complete lines
  const lines = buffer.split('\n');
  buffer = lines.pop(); // Keep incomplete line in buffer

// Process complete lines
  for (const line of lines) {
    if (line.startsWith('data: ')) {
      const data = JSON.parse(line.substring(6));
      handleEvent(data);
    }
  }
}``` const reader = response.body.getReader();
const decoder = new TextDecoder();
let buffer = '';

while (true) {
  const { done, value } = await reader.read();
  if (done) break;

// Add new data to buffer
  buffer += decoder.decode(value, { stream: true });

// Split into complete lines
  const lines = buffer.split('\n');
  buffer = lines.pop(); // Keep incomplete line in buffer

// Process complete lines
  for (const line of lines) {
    if (line.startsWith('data: ')) {
      const data = JSON.parse(line.substring(6));
      handleEvent(data);
    }
  }
}
```
````

This pattern ensures we never lose data or attempt to parse incomplete JSON, regardless of how network packets arrive.

#### \\#\#\#\# Resilient Connection Management

Task execution can take anywhere from seconds to 30+ minutes. Network connections inevitably drop during long operations, so robust reconnection logic is essential:

````
1
2
3
4
5
6
7
8

if (streamReconnectAttempts < MAX_RECONNECT_ATTEMPTS &&
    currentTaskRun && ['queued', 'running'].includes(currentTaskRun.status)) {
streamReconnectAttempts++;
setTimeout(() => {
    console.log(`Reconnecting attempt ${streamReconnectAttempts}...`);
    startStream();
}, 2000);
}``` if (streamReconnectAttempts < MAX_RECONNECT_ATTEMPTS &&
    currentTaskRun && ['queued', 'running'].includes(currentTaskRun.status)) {
streamReconnectAttempts++;
setTimeout(() => {
    console.log(`Reconnecting attempt ${streamReconnectAttempts}...`);
    startStream();
}, 2000);
}
```
````

**\*\*Key resilience features:\*\***

- \- Status-based reconnection: Only retry for tasks that might still be generating events
- \- Exponential backoff: 2-second delays prevent overwhelming the server
- \- Attempt limiting: Prevents infinite retry loops on permanent failures
- \- Stateless recovery: Each reconnection gets the complete current state

#### \\#\#\#\# Understanding the Event Stream Format

Parallel's SSE stream follows the standard Server-Sent Events specification. Each event is prefixed with \`data: \` and terminated with double newlines. The implementation strips the prefix and parses the JSON payload:

````
1
2
3
4
5
6
7
8
9
10
11

for (const line of lines) {
  if (line.startsWith('data: ')) {
    try {
      const data = JSON.parse(line.substring(6)); // Remove 'data: ' prefix
      handleEvent(data);
    } catch (error) {
      console.error('Error parsing event data:', error, line);
    }
  }
}``` for (const line of lines) {
  if (line.startsWith('data: ')) {
    try {
      const data = JSON.parse(line.substring(6)); // Remove 'data: ' prefix
      handleEvent(data);
    } catch (error) {
      console.error('Error parsing event data:', error, line);
    }
  }
}

```
````

#### \\#\#\#\# Event Type Taxonomy

The stream delivers several categories of events, each serving a different purpose:

- \- \`task\_run.state\`: Core lifecycle events (queued → running → completed/failed)
- \- \`task\_run.progress\_stats\`: Quantitative metrics (sources found, pages read, tokens used)
- \- \`task\_run.progress\_msg.\*\`: Qualitative updates with timestamped reasoning steps
- \- \`task\_run.progress\_msg.reasoning\`: AI thought process
- \- \`task\_run.progress\_msg.search\`: Search query generation
- \- \`task\_run.progress\_msg.analysis\`: Content analysis steps
- \- \`error\`: Exception conditions with detailed error messages

This rich event taxonomy enables granular UI updates - progress bars for stats, reasoning displays for AI thinking, and error handling for failures.

#### \\#\#\#\# Event Visualization and UI

The frontend renders different event types with appropriate styling:

````
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

function handleEvent(data) {
console.log(`event [${data.type}]`, data);

let eventHtml = '';
let eventClass = '';

switch (data.type) {
    case 'task_run.state':
      eventClass = 'state';
      eventHtml = `
        <div class="event-type">TASK STATE</div>
        <div class="event-message">
          Status: <span class="status ${data.run.status}">${data.run.status}</span>
          ${data.run.error ? `<br><span class="error">Error: ${data.run.error.message}</span>` : ''}
        </div>
      `;

// Display final output
      if (data.output) {
        const outputHtml = formatOutput(data.output);
        eventHtml += `<div class="output-section">
          <strong>Final Output:</strong>
          ${outputHtml}
        </div>`;
      }
      break;

case 'task_run.progress_stats':
      eventClass = 'progress-stats';
      const stats = data.source_stats;
      eventHtml = `
        <div class="event-type">PROGRESS STATS</div>
        <div class="progress-stats">
          <div class="stat">Sources Considered: ${stats.num_sources_considered || 'N/A'}</div>
          <div class="stat">Sources Read: ${stats.num_sources_read || 'N/A'}</div>
        </div>
        ${stats.sources_read_sample ? `
          <div style="margin-top: 10px;">
            <strong>Sample Sources:</strong>
            <ul style="margin-top: 5px; margin-left: 20px;">
              ${stats.sources_read_sample.slice(0, 3).map(url => ``` function handleEvent(data) {
console.log(`event [${data.type}]`, data);

let eventHtml = '';
let eventClass = '';

### \\#\#\# CORS Proxy Worker

A simple worker solves a fundamental web security challenge. Modern browsers implement the Same-Origin Policy, which prevents JavaScript running on \`yourdomain.com\` from making direct API calls to \`api.parallel.ai\`. This security feature protects users from malicious websites, but it also blocks legitimate applications from accessing external APIs.

Traditional solutions involve building a full backend API server that handles authentication, request validation, and response transformation. Instead, we use a much simpler proxy pattern that acts as a transparent middleman:

- \- Path Rewriting: \`/tasks-sse/api/v1/tasks/runs\` becomes \`https://api.parallel.ai/v1/tasks/runs\`
- \- Header Preservation: All original headers (including \`x-api-key\`) are forwarded
- \- CORS Headers: Added to all responses to enable browser access
- \- Static Serving: The same worker serves the HTML frontend

````
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

// @ts-ignore
import indexHtml from "./index.html";

export default {
  async fetch(request, env, ctx) {
    const url = new URL(request.url);

// Serve the frontend
    if (url.pathname === "/tasks-sse/") {
      return new Response(indexHtml, {
        headers: { "Content-Type": "text/html;charset=utf8" },
      });
    }

// Proxy Parallel API requests
    if (url.pathname.startsWith("/tasks-sse/api/")) {
      // Remove /api prefix and forward to api.parallel.ai
      const targetPath = url.pathname.replace("/tasks-sse/api", "");
      const targetUrl = `https://api.parallel.ai${targetPath}${url.search}`;

// Clone the request but change the URL
      const modifiedRequest = new Request(targetUrl, {
        method: request.method,
        headers: request.headers,
        body: request.body,
      });

// Forward the request
      const response = await fetch(modifiedRequest);

// Clone the response to modify headers
      const modifiedResponse = new Response(response.body, {
        status: response.status,
        statusText: response.statusText,
        headers: {
          ...Object.fromEntries(response.headers),
          // Add CORS headers
          "Access-Control-Allow-Origin": "*",
          "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
          "Access-Control-Allow-Headers": "*",
        },
      });

return modifiedResponse;
    }

// Handle preflight requests
    if (request.method === "OPTIONS") {
      return new Response(null, {
        headers: {
          "Access-Control-Allow-Origin": "*",
          "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
          "Access-Control-Allow-Headers": "*",
        },
      });
    }

return new Response(null, {
      status: 302,
      headers: { Location: "/tasks-sse/" },
    });
  },
};``` // @ts-ignore
import indexHtml from "./index.html";

export default {
  async fetch(request, env, ctx) {
    const url = new URL(request.url);

// Serve the frontend
    if (url.pathname === "/tasks-sse/") {
      return new Response(indexHtml, {
        headers: { "Content-Type": "text/html;charset=utf8" },
      });
    }

// Forward the request
      const response = await fetch(modifiedRequest);

return modifiedResponse;
    }

return new Response(null, {
      status: 302,
      headers: { Location: "/tasks-sse/" },
    });
  },
};
```
````

### \\#\#\# OAuth Authentication

The OAuth flow implementation handles dynamic client registration, as well as the complete PKCE security protocol:

````
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

async function startOAuth() {
try {
    // Register client dynamically
    const reg = await fetch("https://platform.parallel.ai/getKeys/register", {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({
        redirect_uris: [window.location.origin + window.location.pathname]
      }),
    });

const { client_id } = await reg.json();

// Generate PKCE challenge
    const cv = btoa(crypto.getRandomValues(new Uint8Array(32))).replace(
      /[+/=]/g, (m) => ({ "+": "-", "/": "_", "=": "" }[m])
    );
    localStorage.setItem('code_verifier', cv);

const cc = btoa(
      String.fromCharCode(
        ...new Uint8Array(
          await crypto.subtle.digest(
            "SHA-256",
            new TextEncoder().encode(cv)
          )
        )
      )
    ).replace(/[+/=]/g, (m) => ({ "+": "-", "/": "_", "=": "" }[m]));

// Redirect to OAuth server
    const url = new URL("https://platform.parallel.ai/getKeys/authorize");
    Object.entries({
      client_id,
      redirect_uri: window.location.origin + window.location.pathname,
      response_type: "code",
      scope: "api",
      code_challenge: cc,
      code_challenge_method: "S256",
      state: Math.random().toString(36).substring(7)
    }).forEach(([k, v]) => url.searchParams.set(k, v));

window.location.href = url;
} catch (error) {
    alert('OAuth error: ' + error.message);
}
}``` async function startOAuth() {
try {
    // Register client dynamically
    const reg = await fetch("https://platform.parallel.ai/getKeys/register", {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({
        redirect_uris: [window.location.origin + window.location.pathname]
      }),
    });

const { client_id } = await reg.json();

window.location.href = url;
} catch (error) {
    alert('OAuth error: ' + error.message);
}
}
```
````

## \\#\# Resources

- \- [App Source Code](https://github.com/parallel-web/parallel-cookbook/tree/main/typescript-recipes/parallel-tasks-sse)[\[App Source Code\](https://github.com/parallel-web/parallel-cookbook/tree/main/typescript-recipes/parallel-tasks-sse)](https://github.com/parallel-web/parallel-cookbook/tree/main/typescript-recipes/parallel-tasks-sse)
- \- [Live App Example](https://oss.parallel.ai/tasks-sse/)[\[Live App Example\](https://oss.parallel.ai/tasks-sse/)](https://oss.parallel.ai/tasks-sse/)
- \- [Parallel SSE Documentation](https://docs.parallel.ai/task-api/task-sse)[\[Parallel SSE Documentation\](https://docs.parallel.ai/task-api/task-sse)](https://docs.parallel.ai/task-api/task-sse)

## \\#\# Ready to get started?

Sign up for free. No credit card required.

[Try Parallel](https://platform.parallel.ai/home)[\[Try Parallel\](https://platform.parallel.ai/home)](https://platform.parallel.ai/home) [Contact sales](https://contact.parallel.ai/)[\[Contact sales\](https://contact.parallel.ai/)](https://contact.parallel.ai/)

[Are you an agent? Read this to onboard Parallel](/content/agents.md)[\[Are you an agent? Read this to onboard Parallel\](/content/agents.md)](/content/ai/agents.md)

By Parallel

October 6, 2025

### \\#\# Related Posts80

[Jul 30, 2026\\
**\- \[Building an always-on background agent to proactively support customers\](/content/blog/customer-watch-background-agent/index.html)**](/content/blog/customer-watch-background-agent/index.html)

[Tags:](/content/blog/customer-watch-background-agent/index.html) [Developers](/content/blog?tag=developers/index.html)

Author: By Khushi Shelat

[Jul 21, 2026\\
**\- \[Introducing the Parallel Responses API\](/content/blog/responses-api/index.html)**](/content/blog/responses-api/index.html)

[Tags:](/content/blog/responses-api/index.html) [Product](/content/blog?tag=product/index.html)

Author: By Parallel

[Jul 20, 2026\\
**\- \[Building a vendor intelligence system with Parallel\](/content/blog/vendor-intelligence-system/index.html)**](/content/blog/vendor-intelligence-system/index.html)

[Tags:](/content/blog/vendor-intelligence-system/index.html) [Developers](/content/blog?tag=developers/index.html)

Author: By Sahith Jagarlamudi

[Jul 16, 2026\\
**\- \[Parallel and Google Cloud Announce Partnership for Agentic Web Search on Gemini Enterprise Agent Platform\](/content/blog/google-cloud-partnership/index.html)**](/content/blog/google-cloud-partnership/index.html)

[Tags:](/content/blog/google-cloud-partnership/index.html) [Product](/content/blog?tag=product/index.html)

Author: By Parallel

[Jul 15, 2026\\
**\- \[$5 in free Parallel credits, every month\](/content/blog/free-tier-parallel/index.html)**](/content/blog/free-tier-parallel/index.html)

[Tags:](/content/blog/free-tier-parallel/index.html) [Product](/content/blog?tag=product/index.html)

Author: By Parallel

\\
\\
Jul 13, 2026\\
\\
**\- \[Introducing Parallel Search Turbo\](/content/blog/parallel-search-turbo/index.html)** \\
\\
Author: By Parallel](/content/blog/parallel-search-turbo/index.html)

[Jul 12, 2026\\
**\- \[Building a realtime voice agent with GPT-Realtime-2.1 and Parallel Search Turbo\](/content/blog/gpt-realtime-parallel-turbo/index.html)**](/content/blog/gpt-realtime-parallel-turbo/index.html)

[Tags:](/content/blog/gpt-realtime-parallel-turbo/index.html) [Developers](/content/blog?tag=developers/index.html)

Author: By George Pickett

[Jul 10, 2026\\
**\- \[How Nooks cut web search costs 70.5% by switching to Parallel\](/content/blog/case-study-nooks/index.html)**](/content/blog/case-study-nooks/index.html)

[Tags:](/content/blog/case-study-nooks/index.html) [Customers](/content/blog?tag=customers/index.html)

Author: By Parallel

[Jul 8, 2026\\
**\- \[How Build created live geofenced alerts powered by Parallel for institutional real estate\](/content/blog/case-study-build/index.html)**](/content/blog/case-study-build/index.html)

[Tags:](/content/blog/case-study-build/index.html) [Customers](/content/blog?tag=customers/index.html)

Author: By Parallel

[Jun 9, 2026\\
**\- \[OpenClaw now has free, LLM-optimized web search by default powered by Parallel\](/content/blog/free-web-search-openclaw/index.html)**](/content/blog/free-web-search-openclaw/index.html)

[Tags:](/content/blog/free-web-search-openclaw/index.html) [Company](/content/blog?tag=company/index.html)

Author: By Parallel

[Jun 5, 2026\\
**\- \[Introducing real-time Entity Search\](/content/blog/entity-search-company/index.html)**](/content/blog/entity-search-company/index.html)

[Tags:](/content/blog/entity-search-company/index.html) [Product](/content/blog?tag=product/index.html)

Author: By Parallel

[Jun 3, 2026\\
**\- \[How we enrich & triage inbound leads using the Parallel Task API\](/content/blog/enrich-triage-inbound-leads-parallel-task-api/index.html)**](/content/blog/enrich-triage-inbound-leads-parallel-task-api/index.html)

[Tags:](/content/blog/enrich-triage-inbound-leads-parallel-task-api/index.html) [Developers](/content/blog?tag=developers/index.html)

Author: By Khushi Shelat

[May 20, 2026\\
**\- \[How AirOps creates citation-worthy content at scale, powered by Parallel\](/content/blog/case-study-airops/index.html)**](/content/blog/case-study-airops/index.html)

[Tags:](/content/blog/case-study-airops/index.html) [Customers](/content/blog?tag=customers/index.html)

Author: By Parallel

[May 18, 2026\\
**\- \[Introducing Index by Parallel\](/content/blog/introducing-index-by-parallel/index.html)**](/content/blog/introducing-index-by-parallel/index.html)

[Tags:](/content/blog/introducing-index-by-parallel/index.html) [Product](/content/blog?tag=product/index.html)

Author: By Parallel

[May 7, 2026\\
**\- \[Parallel Monitor API: New processor tiers, snapshots and event streams, and Basis on every event\](/content/blog/monitor-api/index.html)**](/content/blog/monitor-api/index.html)

[Tags:](/content/blog/monitor-api/index.html) [Product](/content/blog?tag=product/index.html)

Author: By Parallel

[May 4, 2026\\
**\- \[How we built parallelmpp.dev\](/content/blog/parallel-mpp-dev/index.html)**](/content/blog/parallel-mpp-dev/index.html)

[Tags:](/content/blog/parallel-mpp-dev/index.html) [Developers](/content/blog?tag=developers/index.html)

Author: By Son Do

[Apr 29, 2026\\
**\- \[How Actively's Per Account Agents use Parallel to turn the entire web into a proactive sales intelligence layer\](/content/blog/case-study-actively/index.html)**](/content/blog/case-study-actively/index.html)

[Tags:](/content/blog/case-study-actively/index.html) [Customers](/content/blog?tag=customers/index.html)

Author: By Parallel

[Apr 28, 2026\\
**\- \[Parallel Raises at $2 Billion Valuation to Scale Web Infrastructure for Agents\](/content/blog/series-b/index.html)**](/content/blog/series-b/index.html)

[Tags:](/content/blog/series-b/index.html) [Company](/content/blog?tag=company/index.html)

Author: By Parallel

[Apr 24, 2026\\
**\- \[Building a free CLI agent with Pi, Ollama, Gemma 4, and Parallel\](/content/blog/free-CLI-agent/index.html)**](/content/blog/free-CLI-agent/index.html)

[Tags:](/content/blog/free-CLI-agent/index.html) [Developers](/content/blog?tag=developers/index.html)

Author: By Matt Harris

[Apr 23, 2026\\
**\- \[Parallel Search is now free for agents via MCP\](/content/blog/free-web-search-mcp/index.html)**](/content/blog/free-web-search-mcp/index.html)

[Tags:](/content/blog/free-web-search-mcp/index.html) [Product](/content/blog?tag=product/index.html)

Author: By Parallel

[Apr 21, 2026\\
**\- \[Upgrades to the Parallel Search & Extract APIs\](/content/blog/parallel-search-api/index.html)**](/content/blog/parallel-search-api/index.html)

[Tags:](/content/blog/parallel-search-api/index.html) [Benchmarks](/content/blog?tag=benchmarks/index.html)

Author: By Parallel

[Apr 20, 2026\\
**\- \[How Finch is scaling plaintiff law with AI agents that research like associates\](/content/blog/case-study-finch/index.html)**](/content/blog/case-study-finch/index.html)

[Tags:](/content/blog/case-study-finch/index.html) [Customers](/content/blog?tag=customers/index.html)

Author: By Parallel

[Apr 8, 2026\\
**\- \[Genpact and Parallel Web Systems Partner to Drive Tangible Efficiency from AI Systems\](/content/blog/genpact-parallel-partnership/index.html)**](/content/blog/genpact-parallel-partnership/index.html)

[Tags:](/content/blog/genpact-parallel-partnership/index.html) [Company](/content/blog?tag=company/index.html)

Author: By Parallel

[Apr 8, 2026\\
**\- \[How Genpact helps top US insurers cut contents claims processing times in half with Parallel \](/content/blog/case-study-genpact/index.html)**](/content/blog/case-study-genpact/index.html)

[Tags:](/content/blog/case-study-genpact/index.html) [Customers](/content/blog?tag=customers/index.html)

Author: By Parallel

[Apr 7, 2026\\
**\- \[A new deep research frontier on DeepSearchQA with the Task API Harness\](/content/blog/deep-research/index.html)**](/content/blog/deep-research/index.html)

[Tags:](/content/blog/deep-research/index.html) [Benchmarks](/content/blog?tag=benchmarks/index.html)

Author: By Parallel

[Mar 30, 2026\\
**\- \[How Modal saves tens of thousands annually by building in-house GTM pipelines with Parallel\](/content/blog/case-study-modal/index.html)**](/content/blog/case-study-modal/index.html)

[Tags:](/content/blog/case-study-modal/index.html) [Customers](/content/blog?tag=customers/index.html)

Author: By Parallel

[Mar 25, 2026\\
**\- \[How Opendoor uses Parallel as the enterprise grade web research layer powering its AI-native real estate operations\](/content/blog/case-study-opendoor/index.html)**](/content/blog/case-study-opendoor/index.html)

[Tags:](/content/blog/case-study-opendoor/index.html) [Customers](/content/blog?tag=customers/index.html)

Author: By Parallel

[Mar 19, 2026\\
**\- \[Introducing stateful web research agents with multi-turn conversations\](/content/blog/task-api-interactions/index.html)**](/content/blog/task-api-interactions/index.html)

[Tags:](/content/blog/task-api-interactions/index.html) [Product](/content/blog?tag=product/index.html)

Author: By Parallel

[Mar 18, 2026\\
**\- \[Parallel is live on Tempo, now available natively to agents with the Machine Payments Protocol\](/content/blog/tempo-stripe-mpp/index.html)**](/content/blog/tempo-stripe-mpp/index.html)

[Tags:](/content/blog/tempo-stripe-mpp/index.html) [Company](/content/blog?tag=company/index.html)

Author: By Parallel

[Mar 17, 2026\\
**\- \[How Parallel helped Kepler build AI that finance professionals can actually trust\](/content/blog/case-study-kepler/index.html)**](/content/blog/case-study-kepler/index.html)

[Tags:](/content/blog/case-study-kepler/index.html) [Customers](/content/blog?tag=customers/index.html)

Author: By Parallel

[Mar 10, 2026\\
**\- \[Introducing the Parallel CLI\](/content/blog/parallel-cli/index.html)**](/content/blog/parallel-cli/index.html)

[Tags:](/content/blog/parallel-cli/index.html) [Product](/content/blog?tag=product/index.html)

Author: By Parallel

[Mar 4, 2026\\
**\- \[How Profound helps brands win AI Search with high-quality web research and content creation powered by Parallel\](/content/blog/case-study-profound/index.html)**](/content/blog/case-study-profound/index.html)

[Tags:](/content/blog/case-study-profound/index.html) [Customers](/content/blog?tag=customers/index.html)

Author: By Parallel

[Mar 2, 2026\\
**\- \[How Harvey is expanding legal AI internationally with Parallel\](/content/blog/case-study-harvey/index.html)**](/content/blog/case-study-harvey/index.html)

[Tags:](/content/blog/case-study-harvey/index.html) [Customers](/content/blog?tag=customers/index.html)

Author: By Parallel

[Feb 23, 2026\\
**\- \[How Tabstack by Mozilla enables agents to navigate the web with Parallel’s best-in-class web search\](/content/blog/case-study-tabstack/index.html)**](/content/blog/case-study-tabstack/index.html)

[Tags:](/content/blog/case-study-tabstack/index.html) [Customers](/content/blog?tag=customers/index.html)

Author: By Parallel

[Feb 4, 2026\\
**\- \[Parallel Web Tools and Agents now available across Vercel AI Gateway, AI SDK, and Marketplace\](/content/blog/vercel/index.html)**](/content/blog/vercel/index.html)

[Tags:](/content/blog/vercel/index.html) [Product](/content/blog?tag=product/index.html)

Author: By Parallel

[Jan 28, 2026\\
**\- \[Authenticated page access for the Parallel Task API\](/content/blog/authenticated-page-access/index.html)**](/content/blog/authenticated-page-access/index.html)

[Tags:](/content/blog/authenticated-page-access/index.html) [Product](/content/blog?tag=product/index.html)

Author: By Parallel

[Jan 21, 2026\\
**\- \[Introducing structured outputs for the Monitor API\](/content/blog/structured-outputs-monitor/index.html)**](/content/blog/structured-outputs-monitor/index.html)

[Tags:](/content/blog/structured-outputs-monitor/index.html) [Product](/content/blog?tag=product/index.html)

Author: By Parallel

[Jan 15, 2026\\
**\- \[Introducing research models with Basis for the Parallel Chat API\](/content/blog/research-models-chat/index.html)**](/content/blog/research-models-chat/index.html)

[Tags:](/content/blog/research-models-chat/index.html) [Product](/content/blog?tag=product/index.html)

Author: By Parallel

[Jan 8, 2026\\
**\- \[Build a real-time fact checker with Parallel and Cerebras\](/content/blog/cerebras-fact-checker/index.html)**](/content/blog/cerebras-fact-checker/index.html)

[Tags:](/content/blog/cerebras-fact-checker/index.html) [Developers](/content/blog?tag=developers/index.html)

Author: By Parallel

[Dec 17, 2025\\
**\- \[Parallel Task API achieves state-of-the-art accuracy on DeepSearchQA\](/content/blog/deepsearch-qa/index.html)**](/content/blog/deepsearch-qa/index.html)

[Tags:](/content/blog/deepsearch-qa/index.html) [Benchmarks](/content/blog?tag=benchmarks/index.html)

Author: By Parallel

[Dec 16, 2025\\
**\- \[Introducing Granular Basis for the Task API\](/content/blog/granular-basis-task-api/index.html)**](/content/blog/granular-basis-task-api/index.html)

[Tags:](/content/blog/granular-basis-task-api/index.html) [Product](/content/blog?tag=product/index.html)

Author: By Parallel

[Dec 11, 2025\\
**\- \[How Amp’s coding agents build better software with Parallel Search\](/content/blog/case-study-amp/index.html)**](/content/blog/case-study-amp/index.html)

[Tags:](/content/blog/case-study-amp/index.html) [Customers](/content/blog?tag=customers/index.html)

Author: By Parallel

[Dec 10, 2025\\
**\- \[Latency improvements on the Parallel Task API \](/content/blog/task-api-latency/index.html)**](/content/blog/task-api-latency/index.html)

[Tags:](/content/blog/task-api-latency/index.html) [Product](/content/blog?tag=product/index.html)

Author: By Parallel

[Nov 20, 2025\\
**\- \[Introducing Parallel Extract\](/content/blog/introducing-parallel-extract/index.html)**](/content/blog/introducing-parallel-extract/index.html)

[Tags:](/content/blog/introducing-parallel-extract/index.html) [Product](/content/blog?tag=product/index.html)

Author: By Parallel

[Nov 18, 2025\\
**\- \[Introducing Parallel FindAll\](/content/blog/introducing-findall-api/index.html)**](/content/blog/introducing-findall-api/index.html)

[Tags:](/content/blog/introducing-findall-api/index.html) [Product](/content/blog?tag=product/index.html),[Benchmarks](/content/blog?tag=benchmarks/index.html)

Author: By Parallel

[Nov 13, 2025\\
**\- \[Introducing Parallel Monitor\](/content/blog/monitor-api-beta/index.html)**](/content/blog/monitor-api-beta/index.html)

[Tags:](/content/blog/monitor-api-beta/index.html) [Product](/content/blog?tag=product/index.html)

Author: By Parallel

[Nov 12, 2025\\
**\- \[Parallel raises $100M Series A to build web infrastructure for agents\](/content/blog/series-a/index.html)**](/content/blog/series-a/index.html)

[Tags:](/content/blog/series-a/index.html) [Company](/content/blog?tag=company/index.html)

Author: By Parallel

[Nov 11, 2025\\
**\- \[How Macroscope reduced code review false positives with Parallel\](/content/blog/case-study-macroscope/index.html)**](/content/blog/case-study-macroscope/index.html)

[Tags:](/content/blog/case-study-macroscope/index.html) [Customers](/content/blog?tag=customers/index.html)

Author: By Parallel

[Nov 6, 2025\\
**\- \[Introducing Parallel Search\](/content/blog/parallel-search-api-beta/index.html)**](/content/blog/parallel-search-api-beta/index.html)

[Tags:](/content/blog/parallel-search-api-beta/index.html) [Benchmarks](/content/blog?tag=benchmarks/index.html)

Author: By Parallel

[Nov 3, 2025\\
**\- \[Parallel processors set new price-performance standard on SealQA benchmark\](/content/blog/benchmarks-task-api-sealqa/index.html)**](/content/blog/benchmarks-task-api-sealqa/index.html)

[Tags:](/content/blog/benchmarks-task-api-sealqa/index.html) [Benchmarks](/content/blog?tag=benchmarks/index.html)

Author: By Parallel

[Oct 30, 2025\\
**\- \[Introducing LLMTEXT, an open source toolkit for the llms.txt standard\](/content/blog/LLMTEXT-for-llmstxt/index.html)**](/content/blog/LLMTEXT-for-llmstxt/index.html)

[Tags:](/content/blog/LLMTEXT-for-llmstxt/index.html) [Product](/content/blog?tag=product/index.html)

Author: By Parallel

[Oct 23, 2025\\
**\- \[How Starbridge powers public sector GTM with state-of-the-art web research\](/content/blog/case-study-starbridge/index.html)**](/content/blog/case-study-starbridge/index.html)

[Tags:](/content/blog/case-study-starbridge/index.html) [Customers](/content/blog?tag=customers/index.html)

Author: By Parallel

[Oct 22, 2025\\
**\- \[Building a market research platform with Parallel Deep Research\](/content/blog/cookbook-market-research-platform-with-parallel/index.html)**](/content/blog/cookbook-market-research-platform-with-parallel/index.html)

[Tags:](/content/blog/cookbook-market-research-platform-with-parallel/index.html) [Developers](/content/blog?tag=developers/index.html)

Author: By Parallel

[Oct 17, 2025\\
**\- \[How Lindy brings state-of-the-art web research to automation flows\](/content/blog/case-study-lindy/index.html)**](/content/blog/case-study-lindy/index.html)

[Tags:](/content/blog/case-study-lindy/index.html) [Customers](/content/blog?tag=customers/index.html)

Author: By Parallel

[Oct 16, 2025\\
**\- \[Introducing the Parallel Task MCP Server\](/content/blog/parallel-task-mcp-server/index.html)**](/content/blog/parallel-task-mcp-server/index.html)

[Tags:](/content/blog/parallel-task-mcp-server/index.html) [Product](/content/blog?tag=product/index.html)

Author: By Parallel

[Oct 9, 2025\\
**\- \[Introducing the Core2x Processor for improved compute control on the Task API\](/content/blog/core2x-processor/index.html)**](/content/blog/core2x-processor/index.html)

[Tags:](/content/blog/core2x-processor/index.html) [Product](/content/blog?tag=product/index.html)

Author: By Parallel

[Oct 8, 2025\\
**\- \[How Day AI merges private and public data for business intelligence\](/content/blog/case-study-day-ai/index.html)**](/content/blog/case-study-day-ai/index.html)

[Tags:](/content/blog/case-study-day-ai/index.html) [Customers](/content/blog?tag=customers/index.html)

Author: By Parallel

[Oct 7, 2025\\
**\- \[Full Basis framework for all Task API Processors\](/content/blog/full-basis-framework-for-task-api/index.html)**](/content/blog/full-basis-framework-for-task-api/index.html)

[Tags:](/content/blog/full-basis-framework-for-task-api/index.html) [Product](/content/blog?tag=product/index.html)

Author: By Parallel

[Sep 30, 2025\\
**\- \[How Gumloop built a new AI automation framework with web intelligence as a core node\](/content/blog/case-study-gumloop/index.html)**](/content/blog/case-study-gumloop/index.html)

[Tags:](/content/blog/case-study-gumloop/index.html) [Customers](/content/blog?tag=customers/index.html)

Author: By Parallel

[Sep 16, 2025\\
**\- \[Introducing the TypeScript SDK\](/content/blog/typescript-sdk/index.html)**](/content/blog/typescript-sdk/index.html)

[Tags:](/content/blog/typescript-sdk/index.html) [Product](/content/blog?tag=product/index.html)

Author: By Parallel

[Sep 12, 2025\\
**\- \[Building a serverless competitive intelligence platform with MCP + Task API\](/content/blog/cookbook-competitor-research-with-reddit-mcp/index.html)**](/content/blog/cookbook-competitor-research-with-reddit-mcp/index.html)

[Tags:](/content/blog/cookbook-competitor-research-with-reddit-mcp/index.html) [Developers](/content/blog?tag=developers/index.html)

Author: By Parallel

[Sep 11, 2025\\
**\- \[Introducing Parallel Deep Research reports\](/content/blog/deep-research-reports/index.html)**](/content/blog/deep-research-reports/index.html)

[Tags:](/content/blog/deep-research-reports/index.html) [Product](/content/blog?tag=product/index.html)

Author: By Parallel

[Sep 9, 2025\\
**\- \[A new pareto-frontier for Deep Research price-performance\](/content/blog/deep-research-benchmarks/index.html)**](/content/blog/deep-research-benchmarks/index.html)

[Tags:](/content/blog/deep-research-benchmarks/index.html) [Benchmarks](/content/blog?tag=benchmarks/index.html)

Author: By Parallel

[Sep 5, 2025\\
**\- \[Building a Full-Stack Search Agent with Parallel and Cerebras\](/content/blog/cookbook-search-agent/index.html)**](/content/blog/cookbook-search-agent/index.html)

[Tags:](/content/blog/cookbook-search-agent/index.html) [Developers](/content/blog?tag=developers/index.html)

Author: By Parallel

[Aug 21, 2025\\
**\- \[Webhooks for the Parallel Task API\](/content/blog/webhooks/index.html)**](/content/blog/webhooks/index.html)

[Tags:](/content/blog/webhooks/index.html) [Product](/content/blog?tag=product/index.html)

Author: By Parallel

[Aug 14, 2025\\
**\- \[Introducing Parallel: Web Search Infrastructure for AIs \](/content/blog/introducing-parallel/index.html)**](/content/blog/introducing-parallel/index.html)

[Tags:](/content/blog/introducing-parallel/index.html) [Benchmarks](/content/blog?tag=benchmarks/index.html),[Product](/content/blog?tag=product/index.html)

Author: By Parallel

[Aug 7, 2025\\
**\- \[Introducing SSE for Task Runs\](/content/blog/sse-for-tasks/index.html)**](/content/blog/sse-for-tasks/index.html)

[Tags:](/content/blog/sse-for-tasks/index.html) [Product](/content/blog?tag=product/index.html)

Author: By Parallel

[Aug 5, 2025\\
**\- \[A new line of advanced Processors: Ultra2x, Ultra4x, and Ultra8x \](/content/blog/new-advanced-processors/index.html)**](/content/blog/new-advanced-processors/index.html)

[Tags:](/content/blog/new-advanced-processors/index.html) [Product](/content/blog?tag=product/index.html)

Author: By Parallel

[Aug 4, 2025\\
**\- \[Introducing Auto Mode for the Parallel Task API\](/content/blog/task-api-auto-mode/index.html)**](/content/blog/task-api-auto-mode/index.html)

[Tags:](/content/blog/task-api-auto-mode/index.html) [Product](/content/blog?tag=product/index.html)

Author: By Parallel

[Jul 31, 2025\\
**\- \[A state-of-the-art search API purpose-built for agents\](/content/blog/search-api-benchmark/index.html)**](/content/blog/search-api-benchmark/index.html)

[Tags:](/content/blog/search-api-benchmark/index.html) [Benchmarks](/content/blog?tag=benchmarks/index.html)

Author: By Parallel

[Jul 31, 2025\\
**\- \[Parallel Search MCP Server in Devin\](/content/blog/parallel-search-mcp-in-devin/index.html)**](/content/blog/parallel-search-mcp-in-devin/index.html)

[Tags:](/content/blog/parallel-search-mcp-in-devin/index.html) [Product](/content/blog?tag=product/index.html)

Author: By Parallel

[Jul 28, 2025\\
**\- \[Introducing Tool Calling via MCP Servers\](/content/blog/mcp-tool-calling/index.html)**](/content/blog/mcp-tool-calling/index.html)

[Tags:](/content/blog/mcp-tool-calling/index.html) [Product](/content/blog?tag=product/index.html)

Author: By Parallel

[Jul 14, 2025\\
**\- \[Introducing the Parallel Search MCP Server \](/content/blog/search-mcp-server/index.html)**](/content/blog/search-mcp-server/index.html)

[Tags:](/content/blog/search-mcp-server/index.html) [Product](/content/blog?tag=product/index.html)

Author: By Parallel

[Jul 8, 2025\\
**\- \[Introducing Source Policy\](/content/blog/source-policy/index.html)**](/content/blog/source-policy/index.html)

[Tags:](/content/blog/source-policy/index.html) [Product](/content/blog?tag=product/index.html)

Author: By Parallel

[Jul 2, 2025\\
**\- \[The Parallel Task Group API\](/content/blog/task-group-api/index.html)**](/content/blog/task-group-api/index.html)

[Tags:](/content/blog/task-group-api/index.html) [Product](/content/blog?tag=product/index.html)

Author: By Parallel

[Jun 17, 2025\\
**\- \[State of the Art Deep Research APIs\](/content/blog/deep-research-browsecomp/index.html)**](/content/blog/deep-research-browsecomp/index.html)

[Tags:](/content/blog/deep-research-browsecomp/index.html) [Benchmarks](/content/blog?tag=benchmarks/index.html)

Author: By Parallel

[Jun 10, 2025\\
**\- \[Parallel Search API is now available in alpha\](/content/blog/search-api-alpha/index.html)**](/content/blog/search-api-alpha/index.html)

[Tags:](/content/blog/search-api-alpha/index.html) [Product](/content/blog?tag=product/index.html)

Author: By Parallel

[May 29, 2025\\
**\- \[Introducing the Parallel Chat API \](/content/blog/chat-api/index.html)**](/content/blog/chat-api/index.html)

[Tags:](/content/blog/chat-api/index.html) [Product](/content/blog?tag=product/index.html)

Author: By Parallel

[May 16, 2025\\
**\- \[Introducing Basis with Calibrated Confidences \](/content/blog/introducing-basis-with-calibrated-confidences/index.html)**](/content/blog/introducing-basis-with-calibrated-confidences/index.html)

[Tags:](/content/blog/introducing-basis-with-calibrated-confidences/index.html) [Product](/content/blog?tag=product/index.html)

Author: By Parallel

[Apr 24, 2025\\
**\- \[Introducing the Parallel Task API\](/content/blog/parallel-task-api/index.html)**](/content/blog/parallel-task-api/index.html)

[Tags:](/content/blog/parallel-task-api/index.html) [Product](/content/blog?tag=product/index.html),[Benchmarks](/content/blog?tag=benchmarks/index.html)

Author: By Parallel
