> ## Documentation Index
> Fetch the complete documentation index at: https://agno-v2.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Parallel

> Use Parallel with Agno for AI-optimized web search and content extraction.

**ParallelTools** enable an Agent to perform AI-optimized web search and content extraction using [Parallel's APIs](https://docs.parallel.ai/home).

| API | Speed | Use Case |
| - | - | - |
| **Search** | 1-5s | Quick web lookups, gather sources |
| **Extract** | 1-5s | Pull content from specific URLs |
| **Task** | 10s-25min | Deep research with structured output and citations |
| **Monitor** | Scheduled | Track topics over time, detect changes |

## Prerequisites

The following examples require the `parallel-web` and `openai` libraries and an API key which can be obtained from [Parallel](https://platform.parallel.ai).

```shell theme={null}
uv pip install -U parallel-web openai
```

```shell theme={null}
export PARALLEL_API_KEY=***
```

## Search API

Fast web search for recent information. Returns raw results that your agent synthesizes.

```python theme={null}
from agno.agent import Agent
from agno.tools.parallel import ParallelTools

agent = Agent(
    tools=[ParallelTools(
        max_results=10,
        include_domains=["techcrunch.com", "wired.com"],
    )],
    markdown=True,
)

agent.print_response("What are the latest developments in AI agents?")
```

## Extract API

Pull content from specific URLs in clean markdown format. Handles JavaScript-heavy pages and PDFs.

```python theme={null}
from agno.agent import Agent
from agno.tools.parallel import ParallelTools

agent = Agent(
    tools=[ParallelTools(
        enable_search=False,
        enable_extract=True,
    )],
    markdown=True,
)

agent.print_response(
    "Extract the product features from https://parallel.ai and https://docs.parallel.ai"
)
```

## Task API

Deep research with structured output and citations. Use for company enrichment, market research, and analysis tasks.

```python theme={null}
from agno.agent import Agent
from agno.tools.parallel import ParallelTools

# Define the schema for structured output
enrichment_tools = ParallelTools(
    enable_search=False,
    enable_extract=False,
    enable_task=True,
    default_processor="base",
    default_output_schema={
        "type": "json",
        "json_schema": {
            "type": "object",
            "properties": {
                "company_name": {"type": "string"},
                "headquarters": {"type": "string"},
                "employee_count": {"type": "string"},
                "total_funding": {"type": "string"},
                "key_investors": {
                    "type": "array",
                    "items": {"type": "string"},
                },
            },
            "required": ["company_name"],
        },
    },
)

agent = Agent(
    tools=[enrichment_tools],
    markdown=True,
    instructions="Use create_task() to research, then get_task_result() to retrieve data.",
)

agent.print_response("Research Anthropic and return structured company data")
```

### Task Processors

| Processor | Speed | Depth | Use Case |
| - | - | - | - |
| `lite` | \~10s | Surface | Quick facts, simple lookups |
| `base` | \~60s | Standard | Company research, market analysis |
| `pro` | \~5min | Deep | Comprehensive reports |
| `ultra` | \~25min | Exhaustive | Due diligence, academic research |

Set with `default_processor` at toolkit level.

### Output Schema Types

| Type | Description |
| - | - |
| `{"type": "auto"}` | Auto-detect structure from query |
| `{"type": "text"}` | Plain text response |
| `{"type": "json", "json_schema": {...}}` | Structured JSON matching your schema |
| `"description string"` | Auto-generate schema from description |

## Monitor API

Track topics over time and detect changes. Run monitors on a schedule to catch new developments.

```python theme={null}
from agno.agent import Agent
from agno.tools.parallel import ParallelTools

monitor_tools = ParallelTools(
    enable_search=False,
    enable_extract=False,
    enable_monitor=True,
    default_monitor_frequency="1d",
    default_monitor_processor="lite",
)

agent = Agent(
    tools=[monitor_tools],
    markdown=True,
    instructions="""Track competitors using:
    - create_monitor(query): Start tracking
    - list_monitors(): See active monitors
    - get_monitor_events(monitor_id): Get detected changes
    - cancel_monitor(monitor_id): Stop tracking
    """,
)

# Create monitors
agent.print_response("Create monitors to track OpenAI and Anthropic product launches")

# Later: check for events
agent.print_response("List my monitors and fetch recent events")
```

### Monitor Frequencies

| Frequency | Value | Use Case |
| - | - | - |
| Hourly | `"1h"` | Fast-moving markets, breaking news |
| Daily | `"1d"` | General competitive intel |
| Weekly | `"1w"` | Industry trends |
| Monthly | `"30d"` | Quarterly reviews |

## Toolkit Params

| Parameter | Type | Default | Description |
| - | - | - | - |
| `api_key` | `Optional[str]` | `None` | Parallel API key. Falls back to `PARALLEL_API_KEY` env var. |
| `enable_search` | `bool` | `True` | Enable Search API. |
| `enable_extract` | `bool` | `True` | Enable Extract API. |
| `enable_task` | `bool` | `False` | Enable Task API (deep research). |
| `enable_monitor` | `bool` | `False` | Enable Monitor API (web tracking). |
| `all` | `bool` | `False` | Enable all tools. Overrides individual flags. |
| `max_results` | `int` | `10` | Default max results for search. |
| `max_chars_per_result` | `int` | `10000` | Default max characters per search result. |
| `mode` | `Optional[str]` | `None` | Search mode: `"turbo"`, `"basic"`, or `"advanced"`. Uses `"advanced"` when unset. |
| `include_domains` | `Optional[List[str]]` | `None` | Restrict search to these domains. |
| `exclude_domains` | `Optional[List[str]]` | `None` | Exclude these domains from search. |
| `max_age_seconds` | `Optional[int]` | `None` | Cache age threshold (minimum 600). |
| `disable_cache_fallback` | `Optional[bool]` | `None` | Disable cache fallback behavior. |
| `default_processor` | `str` | `"base"` | Task API processor tier. |
| `default_monitor_processor` | `Literal["lite", "base"]` | `"lite"` | Monitor API processor. |
| `default_monitor_frequency` | `str` | `"1d"` | Monitor run frequency. |
| `default_timeout` | `int` | `1800` | Task result timeout in seconds. |
| `default_output_schema` | `Optional[Union[Dict, str]]` | `None` | Schema for structured task output. |

## Toolkit Functions

### Search and Extract APIs

| Function | Description |
| - | - |
| `parallel_search` | Search the web with natural language objective. Returns URLs, titles, publish dates, and excerpts. Parameters: `objective` (str), `search_queries` (list), `max_results` (int), `max_chars_per_result` (int). |
| `parallel_extract` | Extract content from URLs. Returns clean markdown with excerpts or full content. Parameters: `urls` (list), `objective` (str), `search_queries` (list), `max_chars_per_excerpt` (int), `full_content` (bool), `max_chars_for_full_content` (int). |

### Task API

| Function | Description |
| - | - |
| `create_task` | Create a research task without waiting. Returns `run_id` for later retrieval. Parameter: `query` (str). |
| `get_task_result` | Get completed task result. Blocks until done or timeout. Returns structured content and citations. Parameter: `run_id` (str). |
| `get_task_status` | Check task status without blocking. Returns status, processor, and timestamps. Parameter: `run_id` (str). |

### Monitor API

| Function | Description |
| - | - |
| `create_monitor` | Create a monitor for a query. Returns `monitor_id`, status, frequency. Parameter: `query` (str). |
| `get_monitor` | Retrieve monitor configuration. Parameter: `monitor_id` (str). |
| `update_monitor` | Update frequency or query. Parameters: `monitor_id` (str), `frequency` (str), `query` (str). |
| `list_monitors` | List all monitors with optional filters. Parameters: `status` ("active"/"cancelled"), `monitor_type` ("event\_stream"/"snapshot"), `limit` (int). |
| `get_monitor_events` | Get detected changes. Returns events with content and citations. Parameters: `monitor_id` (str), `include_completions` (bool), `limit` (int). |
| `cancel_monitor` | Permanently stop a monitor. Parameter: `monitor_id` (str). |

## Developer Resources

* [Cookbook examples](https://github.com/agno-agi/agno/tree/main/cookbook/91_tools/parallel)
* [Parallel SDK Documentation](https://docs.parallel.ai)
* [Parallel API Reference](https://docs.parallel.ai/api-reference)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.