ParallelTools enable an Agent to perform AI-optimized web search and content extraction using Parallel’s APIs.
| 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 library and an API key which can be obtained from Parallel.
uv pip install -U parallel-web
export PARALLEL_API_KEY=***
The API key is optional. Keyless access is rate-limited; setting a key raises the ceiling.
Search API
Fast web search for recent information. Returns raw results that your agent synthesizes.
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?")
Pull content from specific URLs in clean markdown format. Handles JavaScript-heavy pages and PDFs.
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.
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.
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 |
| 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: "one-shot" or "agentic". |
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. |
beta_version | str | "search-extract-2025-10-10" | Beta API version header. |
Search API
| 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), excerpts (bool), full_content (bool). |
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