---
title: "Start a website crawl"
method: POST
path: "/crawl"
tags: ["Crawl"]
---

# Start a website crawl

`POST /crawl`

## Request

- Base URL: `https://api.savanto.ai`
- URL: `https://api.savanto.ai/crawl`
- Auth: HTTP bearer

Enqueue a crawl of the given root URL for the workspace in `X-Workspace-ID`. The crawler discovers pages via sitemap + link graph, classifies each page (product, product listing, or general content), and indexes products into `savanto-products` and content into `savanto-posts`. This call is asynchronous and returns immediately with a `crawlId`; poll `GET /crawl/{crawlId}/status` to track progress or subscribe to the email notification endpoint to be pinged when it completes. Starting a new crawl while one is already running for the same workspace will be rejected with 409 — cancel the running one first.

## Request body

- StartCrawlRequest
  - `url` string, required
  - `workspaceId` string
  - `maxPages` integer
  - `isOnboarding` boolean
  - `strategy` 'full' | 'smart'
  - `trigger` 'manual' | 'scheduled'

## Response `200`

Crawl started

- object
  - `data` object, required
    - `crawlId` string, required
    - `workspaceId` string, required

## Other responses

- `400`: Validation error
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not found
- `409`: Conflict
- `413`: Payload too large
- `429`: Rate limit exceeded

---

[API](https://skmtc.dev/savanto/apis/savanto-api.md) · [All operations](https://skmtc.dev/savanto/apis/savanto-api/llms.txt) · [OpenAPI document](https://skmtc.dev/savanto/apis/savanto-api/revisions/82437327a878?raw)
