> ## Documentation Index
> Fetch the complete documentation index at: https://docs.upsonic.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# FirecrawlTools

> Web scraping, crawling, and extraction via Firecrawl API. Inherits ToolKit.

## Overview

**FirecrawlTools** extends **ToolKit** and uses the [Firecrawl](https://firecrawl.dev) API for scraping, crawling, mapping, web search, batch scraping, and LLM-powered extraction.

<Info>
  **ToolKit:** FirecrawlTools inherits from [ToolKit](/concepts/tools/function-class-tools/creating-toolkit). You get all base behavior (e.g. `include_tools`, `exclude_tools`, `timeout`, `use_async`). See [Creating ToolKit](/concepts/tools/function-class-tools/creating-toolkit) for the full API.
</Info>

<Info>
  **Required:** Set **`FIRECRAWL_API_KEY`** (env or `.env`). Install: `uv pip install firecrawl-py`.
</Info>

**Tools (13):** `scrape_url`, `crawl_website`, `start_crawl`, `get_crawl_status`, `cancel_crawl`, `map_website`, `search_web`, `batch_scrape`, `start_batch_scrape`, `get_batch_scrape_status`, `extract_data`, `start_extract`, `get_extract_status`. Use **ToolKit**'s `exclude_tools` / `include_tools` to limit which tools the agent sees.

***

## Examples

```python theme={null}
from upsonic import Agent, Task
from upsonic.tools.custom_tools.firecrawl import FirecrawlTools

agent = Agent(model="anthropic/claude-sonnet-4-6", tools=[FirecrawlTools()])
task = Task(description="Scrape https://www.nike.com.tr and summarize the main content in one short paragraph.")
result = agent.print_do(task)
print(result)
```

***

```python theme={null}
from upsonic import Agent, Task
from upsonic.tools.custom_tools.firecrawl import FirecrawlTools

tools = FirecrawlTools(
    default_scrape_limit=50,
    default_search_limit=10,
    fc_timeout=60,
    exclude_tools=["crawl_website", "start_crawl", "get_crawl_status", "cancel_crawl"],
    timeout=60.0,
)
agent = Agent(model="anthropic/claude-sonnet-4-6", tools=[tools])
task = Task(description="Search the web for 'Upsonic AI agent framework' and summarize the top 3 results.")
result = agent.print_do(task)
print(result)
```

***

## Parameters

| Parameter              | Type                | Default                      | Description                                    |
| ---------------------- | ------------------- | ---------------------------- | ---------------------------------------------- |
| `api_key`              | `str \| None`       | from env `FIRECRAWL_API_KEY` | Firecrawl API key.                             |
| `api_url`              | `str \| None`       | `None`                       | Custom API base URL for self-hosted Firecrawl. |
| `default_formats`      | `list[str] \| None` | `["markdown"]`               | Default output formats for scrape operations.  |
| `default_scrape_limit` | `int`               | `100`                        | Default page limit for crawl operations.       |
| `default_search_limit` | `int`               | `5`                          | Default result limit for search operations.    |
| `fc_timeout`           | `int`               | `120`                        | Timeout in seconds for blocking operations.    |
| `poll_interval`        | `int`               | `2`                          | Seconds between job status polls.              |
