October 22, 2025

# Building a market research platform with Parallel Deep Research

This guide walks through building a comprehensive market research platform that generates detailed industry reports using Parallel's Deep Research product. The application demonstrates how to create a production-ready system that handles real-time streaming, intelligent input validation, email notifications, and robust error handling for AI-powered research tasks.

Tags:Developers
Reading time: 3 min
Try itGithub
Building a market research platform with Parallel Deep Research

## Key Features

  • - AI-Powered Research: Uses Parallel's Deep Research API with "ultra2x" processor for comprehensive market analysis
  • - Real-Time Progress Streaming: Server-Sent Events (SSE[SSE](https://docs.parallel.ai/task-api/task-sse)) for live task progress updates with source tracking
  • - Email Notifications: Optional email alerts via Resend API when reports are ready
  • - Public Report Library: Browse all generated reports without any authentication required
  • - Global Access: No authentication needed - anyone can generate and view reports
  • - Interactive Dashboard: Clean, modern web interface with real-time progress visualization
  • - Download Support: Export reports as Markdown files
  • - Shareable URLs: Each report gets a unique URL slug for easy sharing
  • - Input Validation: Low-latency validation of inputs via Parallel's Chat API[Chat API](https://docs.parallel.ai/chat-api/chat-quickstart)

## Platform Architecture

This market research platform is designed for production use with several key architectural decisions:

### Core Components

  • - Flask Backend: Python web framework handling API requests and task management
  • - PostgreSQL Database: Unified schema storing both running tasks and completed reports
  • - Real-time Streaming: Server-Sent Events for live progress updates during research
  • - AI Validation: Parallel's Chat API for intelligent input filtering
  • - Email System: Resend API for user notifications when reports complete
  • - Public Library: Persistent storage enabling report sharing and discovery

### Design Patterns

The platform implements two key production patterns that ensure reliability. First, **multi-layer task completion** – Tasks are monitored through background thread monitoring and each run ID is stored upon completion, allowing for state recovery if disconnected or on failure. This allows for the lower-latency ultra processors to complete gracefully and ensures reports can be tracked and kicked off concurrently.

Next, **intelligent input validation** – as a public application, it’s important to ensure the data quality to end-users is high. The Chat API is used for a low-latency verification system that checks that the inputs – market name, question, region – fit within the focus of the app, protecting against unrelated data populating the public library. This 2-step process (low-latency validation paired with high-latency deep research) is a helpful framework that can provide meaningful improvements to user experiences in other applications.

## Implementation Details

### Real-Time Progress Streaming

The market research platform uses Server-Sent Events (SSE) to provide live updates during report generation. This is crucial for user experience since research tasks can take 2-15 minutes to complete, and users need to understand what's happening.

The platform implements manual SSE handling rather than using the browser's built-in `EventSource` API because Parallel's API requires authentication via the `x-api-key` header, which `EventSource` doesn't support.

### SSE Implementation Challenges

SSE data arrives as a continuous stream that can be split across network packets. The implementation handles this with a robust buffering system:

### SSE setup
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
def stream_task_events(task_id, api_key): """ Stream events from SSE endpoint with proper parsing and error handling - Accept: text/event-stream header - Parse 'data: {json}' format - Yield events as generator - Handle connection errors """ headers = { 'x-api-key': api_key, 'Accept': 'text/event-stream', 'Cache-Control': 'no-cache', 'parallel-beta': 'events-sse-2025-07-24' } stream_url = f"https://api.parallel.ai/v1beta/tasks/runs/{task_id}/events" try: # Use separate timeouts: (connection_timeout, read_timeout) # Connection: 10s (should be fast), Read: 300s (allow for natural gaps in task processing) with requests.get(stream_url, headers=headers, stream=True, timeout=(10, 300)) as response: response.raise_for_status() current_event_type = None buffer = "" for line in response.iter_lines(decode_unicode=True): if line is None: continue # Handle SSE format if line.startswith('event:'): current_event_type = line[6:].strip() elif line.startswith('data:'): data_line = line[5:].strip() if data_line: try: # Parse JSON data event_data = json.loads(data_line) # Process event based on type processed_event = process_task_event(current_event_type, event_data) if processed_event: yield processed_event except json.JSONDecodeError as e: print(f"Failed to parse SSE event data: {data_line}, error: {e}") continue elif line == "": # Empty line indicates end of event current_event_type = None except requests.RequestException as e: # Let the caller handle connection errors raise ConnectionError(f"SSE connection failed: {str(e)}") except Exception as e: raise RuntimeError(f"Unexpected error in SSE stream: {str(e)}")```
def stream_task_events(task_id, api_key):
"""
Stream events from SSE endpoint with proper parsing and error handling
- Accept: text/event-stream header
- Parse 'data: {json}' format
- Yield events as generator
- Handle connection errors
"""
headers = {
'x-api-key': api_key,
'Accept': 'text/event-stream',
'Cache-Control': 'no-cache',
'parallel-beta': 'events-sse-2025-07-24'
}
stream_url = f"https://api.parallel.ai/v1beta/tasks/runs/{task_id}/events"
try:
# Use separate timeouts: (connection_timeout, read_timeout)
# Connection: 10s (should be fast), Read: 300s (allow for natural gaps in task processing)
with requests.get(stream_url, headers=headers, stream=True, timeout=(10, 300)) as response:
response.raise_for_status()
current_event_type = None
buffer = ""
for line in response.iter_lines(decode_unicode=True):
if line is None:
continue
# Handle SSE format
if line.startswith('event:'):
current_event_type = line[6:].strip()
elif line.startswith('data:'):
data_line = line[5:].strip()
if data_line:
try:
# Parse JSON data
event_data = json.loads(data_line)
# Process event based on type
processed_event = process_task_event(current_event_type, event_data)
if processed_event:
yield processed_event
except json.JSONDecodeError as e:
print(f"Failed to parse SSE event data: {data_line}, error: {e}")
continue
elif line == "":
# Empty line indicates end of event
current_event_type = None
except requests.RequestException as e:
# Let the caller handle connection errors
raise ConnectionError(f"SSE connection failed: {str(e)}")
except Exception as e:
raise RuntimeError(f"Unexpected error in SSE stream: {str(e)}")
```

This approach ensures reliable parsing of SSE events even when network packets split messages unpredictably.

### Connection Resilience

Since market research tasks can take 2-15 minutes, the platform implements robust reconnection logic to handle network interruptions:

### Monitoring and reconnection logic
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
def monitor_task_completion_robust(task_id, api_key, max_reconnects=10): """ Monitor task with robust reconnection using exponential backoff Returns: (task_completed: bool, final_status: str, error_msg: str) """ task_completed = False final_status = None error_msg = None reconnect_count = 0 print(f"Starting robust monitoring for task {task_id}") while not task_completed and reconnect_count < max_reconnects: try: print(f"Monitoring attempt {reconnect_count + 1}/{max_reconnects}") # Stream events with timeout for event in stream_task_events(task_id, api_key): if event.get('type') == 'task.status': final_status = event.get('status') task_completed = event.get('is_complete', False) if task_completed: print(f"Task {task_id} completed with status: {final_status}") return task_completed, final_status, None elif event.get('type') == 'error': error_msg = event.get('message', 'Unknown error') print(f"Task {task_id} error: {error_msg}") # Check if this is a recoverable error if is_recoverable_error(error_msg): break # Break to retry else: return False, 'failed', error_msg except (ConnectionError, requests.RequestException) as e: # Network errors are recoverable print(f"Connection error for task {task_id}: {e}") reconnect_count += 1 if reconnect_count < max_reconnects: # Exponential backoff: wait_time = min(2 ** retry_count, 30) wait_time = min(2 ** reconnect_count, 30) print(f"Waiting {wait_time}s before reconnection attempt {reconnect_count + 1}") time.sleep(wait_time) else: error_msg = f"Max reconnection attempts reached after {max_reconnects} tries" except Exception as e: # Unexpected errors error_msg = f"Unexpected monitoring error: {str(e)}" print(f"Unexpected error for task {task_id}: {e}") break return task_completed, final_status, error_msg```
def monitor_task_completion_robust(task_id, api_key, max_reconnects=10):
"""
Monitor task with robust reconnection using exponential backoff
Returns: (task_completed: bool, final_status: str, error_msg: str)
"""
task_completed = False
final_status = None
error_msg = None
reconnect_count = 0
print(f"Starting robust monitoring for task {task_id}")
while not task_completed and reconnect_count < max_reconnects:
try:
print(f"Monitoring attempt {reconnect_count + 1}/{max_reconnects}")
# Stream events with timeout
for event in stream_task_events(task_id, api_key):
if event.get('type') == 'task.status':
final_status = event.get('status')
task_completed = event.get('is_complete', False)
if task_completed:
print(f"Task {task_id} completed with status: {final_status}")
return task_completed, final_status, None
elif event.get('type') == 'error':
error_msg = event.get('message', 'Unknown error')
print(f"Task {task_id} error: {error_msg}")
# Check if this is a recoverable error
if is_recoverable_error(error_msg):
break # Break to retry
else:
return False, 'failed', error_msg
except (ConnectionError, requests.RequestException) as e:
# Network errors are recoverable
print(f"Connection error for task {task_id}: {e}")
reconnect_count += 1
if reconnect_count < max_reconnects:
# Exponential backoff: wait_time = min(2 ** retry_count, 30)
wait_time = min(2 ** reconnect_count, 30)
print(f"Waiting {wait_time}s before reconnection attempt {reconnect_count + 1}")
time.sleep(wait_time)
else:
error_msg = f"Max reconnection attempts reached after {max_reconnects} tries"
except Exception as e:
# Unexpected errors
error_msg = f"Unexpected monitoring error: {str(e)}"
print(f"Unexpected error for task {task_id}: {e}")
break
return task_completed, final_status, error_msg
```

The reconnection system includes exponential backoff, attempt limiting, and status-based retry logic to ensure reliable task completion.

### Event Processing

The platform processes different types of events from Parallel's SSE stream, each serving specific purposes in the user interface. In the below code snippet, we demonstrated how each type of event was handled for display:

### Event processing
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
def process_task_event(event_type, event_data): """ Process different event types from Parallel API Returns standardized event format for frontend """ processed = { 'timestamp': event_data.get('timestamp'), 'raw_type': event_data.get('type', event_type) } # Handle different event types if event_data.get('type') == 'task_run.state': run_info = event_data.get('run', {}) status = run_info.get('status', 'unknown') processed.update({ 'type': 'task.status', 'status': status, 'is_complete': status in ['completed', 'failed', 'cancelled'], 'message': f"Task status: {status}", 'category': 'status' }) elif event_data.get('type') == 'task_run.progress_stats': # continue through each event type return processed```
def process_task_event(event_type, event_data):
"""
Process different event types from Parallel API
Returns standardized event format for frontend
"""
processed = {
'timestamp': event_data.get('timestamp'),
'raw_type': event_data.get('type', event_type)
}
# Handle different event types
if event_data.get('type') == 'task_run.state':
run_info = event_data.get('run', {})
status = run_info.get('status', 'unknown')
processed.update({
'type': 'task.status',
'status': status,
'is_complete': status in ['completed', 'failed', 'cancelled'],
'message': f"Task status: {status}",
'category': 'status'
})
elif event_data.get('type') == 'task_run.progress_stats':
# continue through each event type
return processed
 
```

The system handles multiple event types:

  • - Task State Events: Lifecycle updates (queued → running → completed
  • - Progress Statistic*: Quantitative metrics like sources processed and pages read
  • - Progress Messages: Qualitative updates showing AI reasoning and analysis steps
  • - Error Events: Detailed error information for troubleshooting

This event diversity enables rich UI updates including progress bars, reasoning displays, and comprehensive error handling.

### Email Notification System

When reports complete, the platform automatically notifies users via email using the Resend API:

### Email notification
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
def send_report_ready_email(email, report_title, report_slug, task_id): """Send email notification when report is ready using Resend API""" if not RESEND_API_KEY or not email: print(f"Skipping email: RESEND_API_KEY={'present' if RESEND_API_KEY else 'missing'}, email={'present' if email else 'missing'}") return False try: # Build the report URL report_url = f"{BASE_URL}/report/{report_slug}" # Render the email HTML template html_content = render_template( 'email_report_ready.html', report_title=report_title, report_url=report_url, task_id=task_id ) # Prepare email data email_data = { "from": "Market Research <updates@aimarketresearch.app>", "to": [email], "subject": "Market Research report is now available", "html": html_content, "reply_to": "updates@aimarketresearch.app" } # Send email via Resend API headers = { 'Authorization': f'Bearer {RESEND_API_KEY}', 'Content-Type': 'application/json' }```
def send_report_ready_email(email, report_title, report_slug, task_id):
"""Send email notification when report is ready using Resend API"""
if not RESEND_API_KEY or not email:
print(f"Skipping email: RESEND_API_KEY={'present' if RESEND_API_KEY else 'missing'}, email={'present' if email else 'missing'}")
return False
try:
# Build the report URL
report_url = f"{BASE_URL}/report/{report_slug}"
# Render the email HTML template
html_content = render_template(
'email_report_ready.html',
report_title=report_title,
report_url=report_url,
task_id=task_id
)
# Prepare email data
email_data = {
"from": "Market Research <updates@aimarketresearch.app>",
"to": [email],
"subject": "Market Research report is now available",
"html": html_content,
"reply_to": "updates@aimarketresearch.app"
}
# Send email via Resend API
headers = {
'Authorization': f'Bearer {RESEND_API_KEY}',
'Content-Type': 'application/json'
}
 
```

### Database Design

The platform uses a unified PostgreSQL schema that efficiently stores both running tasks and completed reports in a single table:

### Database SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
-- Unified reports table handling both running tasks and completed reports CREATE TABLE reports ( id VARCHAR PRIMARY KEY, task_run_id VARCHAR UNIQUE NOT NULL, title VARCHAR, slug VARCHAR UNIQUE, industry VARCHAR NOT NULL, geography VARCHAR, details TEXT, content TEXT, basis JSONB, status VARCHAR DEFAULT 'running', session_id VARCHAR, email VARCHAR, is_public BOOLEAN DEFAULT TRUE, error_message TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, completed_at TIMESTAMP );```
-- Unified reports table handling both running tasks and completed reports
CREATE TABLE reports (
id VARCHAR PRIMARY KEY,
task_run_id VARCHAR UNIQUE NOT NULL,
title VARCHAR,
slug VARCHAR UNIQUE,
industry VARCHAR NOT NULL,
geography VARCHAR,
details TEXT,
content TEXT,
basis JSONB,
status VARCHAR DEFAULT 'running',
session_id VARCHAR,
email VARCHAR,
is_public BOOLEAN DEFAULT TRUE,
error_message TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
completed_at TIMESTAMP
);
```

This design enables efficient querying of both active tasks and completed reports while supporting the public report library feature.

## Resources

  • - Complete Source Code[Complete Source Code](https://github.com/parallel-web/parallel-cookbook/tree/main/python-recipes/market-analysis-demo)
  • - Live Demo[Live Demo](https://market-analysis-demo.parallel.ai/)
  • - Parallel Deep Research[Parallel Deep Research](https://docs.parallel.ai/task-api/task-deep-research)
  • - Parallel SSE Documentation[Parallel SSE Documentation](https://docs.parallel.ai/task-api/task-sse)

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

October 22, 2025

## Related Posts73

How Nooks cut web search costs 70.5% by switching to Parallel

Jul 10, 2026

- [How Nooks cut web search costs 70.5% by switching to Parallel](https://parallel.ai/blog/case-study-nooks)

Tags:Customers
Author: By Parallel
How Build created live geofenced alerts powered by Parallel for institutional real estate

Jul 8, 2026

- [How Build created live geofenced alerts powered by Parallel for institutional real estate](https://parallel.ai/blog/case-study-build)

Tags:Customers
Author: By Parallel
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
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
Building a Full-Stack Search Agent with Parallel and Cerebras

Sep 5, 2025

- [Building a Full-Stack Search Agent with Parallel and Cerebras](https://parallel.ai/blog/cookbook-search-agent)

Tags:Developers
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