Skip to main content
ParallelTools enable an Agent to perform AI-optimized web search and content extraction using Parallel’s APIs.
APISpeedUse Case
Search1-5sQuick web lookups, gather sources
Extract1-5sPull content from specific URLs
Task10s-25minDeep research with structured output and citations
MonitorScheduledTrack 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?")

Extract API

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

ProcessorSpeedDepthUse Case
lite~10sSurfaceQuick facts, simple lookups
base~60sStandardCompany research, market analysis
pro~5minDeepComprehensive reports
ultra~25minExhaustiveDue diligence, academic research
Set with default_processor at toolkit level.

Output Schema Types

TypeDescription
{"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

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

Toolkit Params

ParameterTypeDefaultDescription
api_keyOptional[str]NoneParallel API key. Falls back to PARALLEL_API_KEY env var.
enable_searchboolTrueEnable Search API.
enable_extractboolTrueEnable Extract API.
enable_taskboolFalseEnable Task API (deep research).
enable_monitorboolFalseEnable Monitor API (web tracking).
allboolFalseEnable all tools. Overrides individual flags.
max_resultsint10Default max results for search.
max_chars_per_resultint10000Default max characters per search result.
modeOptional[str]NoneSearch mode: "one-shot" or "agentic".
include_domainsOptional[List[str]]NoneRestrict search to these domains.
exclude_domainsOptional[List[str]]NoneExclude these domains from search.
max_age_secondsOptional[int]NoneCache age threshold (minimum 600).
disable_cache_fallbackOptional[bool]NoneDisable cache fallback behavior.
default_processorstr"base"Task API processor tier.
default_monitor_processorLiteral["lite", "base"]"lite"Monitor API processor.
default_monitor_frequencystr"1d"Monitor run frequency.
default_timeoutint1800Task result timeout in seconds.
default_output_schemaOptional[Union[Dict, str]]NoneSchema for structured task output.
beta_versionstr"search-extract-2025-10-10"Beta API version header.

Toolkit Functions

Search API

FunctionDescription
parallel_searchSearch 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_extractExtract content from URLs. Returns clean markdown with excerpts or full content. Parameters: urls (list), objective (str), excerpts (bool), full_content (bool).

Task API

FunctionDescription
create_taskCreate a research task without waiting. Returns run_id for later retrieval. Parameter: query (str).
get_task_resultGet completed task result. Blocks until done or timeout. Returns structured content and citations. Parameter: run_id (str).
get_task_statusCheck task status without blocking. Returns status, processor, and timestamps. Parameter: run_id (str).

Monitor API

FunctionDescription
create_monitorCreate a monitor for a query. Returns monitor_id, status, frequency. Parameter: query (str).
get_monitorRetrieve monitor configuration. Parameter: monitor_id (str).
update_monitorUpdate frequency or query. Parameters: monitor_id (str), frequency (str), query (str).
list_monitorsList all monitors with optional filters. Parameters: status (“active”/“cancelled”), monitor_type (“event_stream”/“snapshot”), limit (int).
get_monitor_eventsGet detected changes. Returns events with content and citations. Parameters: monitor_id (str), include_completions (bool), limit (int).
cancel_monitorPermanently stop a monitor. Parameter: monitor_id (str).

Developer Resources