# Web crawl

> Read many pages of one website as markdown, as a long-running job.

`web_crawl` reads many pages of one website: it follows links from the URL and returns each page’s content as markdown. Use it to read a whole docs section or blog; use [`web_map`](https://clonvo.com/docs/web-map.md) first if you only need the URLs, and [`web_scrape`](https://clonvo.com/docs/web-scrape.md) for a single page.

Call it with `POST /v1/tools/web_crawl`, or as `web_crawl` over [MCP](https://clonvo.com/docs/mcp.md). A crawl can take minutes, so it runs as a [job](https://clonvo.com/docs/jobs.md).

## Arguments

-   `url` string Required
    
    Where to start crawling: a site or a section of it.
    
-   `max_pages` integer
    
    The most pages to read (1–100, default 10). Clonvo credits serve up to 20.
    
-   `include_paths` string\[\]
    
    Only crawl URL paths matching these regular expressions, e.g. \["^/docs/"\].
    
-   `exclude_paths` string\[\]
    
    Skip URL paths matching these regular expressions.
    
-   `instructions` string
    
    What to look for, in words, e.g. "pages about authentication". Providers use it to pick pages.
    
-   `max_chars_per_page` integer
    
    The most characters of content per page (default 5,000).
    

## Example

```bash
curl https://api.clonvo.com/v1/tools/web_crawl \
  -H "Authorization: Bearer $CLONVO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "arguments": { "url": "https://www.postgresql.org/docs/18/", "include_paths": ["^/docs/18/"], "max_pages": 2 }
  }'
```

Crawls on Clonvo credits, and on some providers, finish within the request, so this one answers `200` with the finished job. Otherwise the call answers `202` with a running job; check it with `GET /v1/tools/jobs/{id}` until its `status` is final.

```json
{
  "id": "gen-01M6B2K4M6P8R0T2V4X6Z8B0D2",
  "object": "tool.job",
  "tool": "web_crawl",
  "status": "completed",
  "provider": "clonvo",
  "created_at": "2026-11-09T12:00:00.000Z",
  "completed_at": "2026-11-09T12:00:38.000Z",
  "result": {
    "url": "https://www.postgresql.org/docs/18/",
    "pages": [
      {
        "url": "https://www.postgresql.org/docs/18/index.html",
        "title": "PostgreSQL 18 Documentation",
        "content": "# PostgreSQL 18 Documentation\n\n## Table of Contents\n\n- Preface…",
        "truncated": true
      },
      {
        "url": "https://www.postgresql.org/docs/18/tutorial.html",
        "title": "Part I. Tutorial",
        "content": "# Part I. Tutorial\n\nWelcome to the PostgreSQL Tutorial…",
        "truncated": false
      }
    ]
  },
  "usage": { "cost": 0.0096, "charged": 0.009792, "is_byok": false }
}
```

## Result

Once the job is `completed`, its `result` has:

| Field | Description |
| --- | --- |
| `url` | The URL the crawl started from. |
| `pages[]` | The pages read, each with `url`, `title` (or `null`), `content` as markdown, and `truncated`, which is `true` when the page was longer than `max_chars_per_page` and was cut. |
| `notes` | Present when the provider handled an argument differently. |

The job’s other fields are described in [Jobs](https://clonvo.com/docs/jobs.md#the-job-object).

## Notes

-   Clonvo credits serve crawls of up to 20 pages. A larger `max_pages` needs your own key for a provider that crawls; see [Bring your own tool keys](https://clonvo.com/docs/tool-keys.md).
-   A crawl can return fewer pages than `max_pages` when the site has fewer pages within reach of the URL.
-   `instructions` is free text you wrote, so it’s never stored as a [web tool query](https://clonvo.com/docs/privacy.md#web-tool-queries); providers use it to pick pages.
-   On Clonvo credits, the cap for the call grows with `max_pages`; see [Tool billing](https://clonvo.com/docs/tool-billing.md#on-clonvo-credits).
