Docs
Войти

Crawler — это управляемая очередь, в которую вы отправляете URL и из которой получаете результаты. Три этапа жизненного цикла — Setup (настройка очереди), Push (добавление URL), Pull (получение результатов) — рассмотрены ниже по порядку.

Setup

Создайте именованную очередь в вашей панели управления. Каждый crawler вмещает до 100 тыс. URL. Создавайте отдельную очередь под каждую задачу — они не делят состояние. При создании вы выбираете:

  • Уникальное имя (выбираете вы: product-monitor, news-feed и т. д.)
  • Режим доставки — либо callback URL (Crawlbase отправляет POST-запрос с каждым результатом на этот webhook), либо Cloud Storage (результаты сохраняются автоматически, и вы забираете их через Storage API в своём ритме). Выбирается один раз при создании; режимы взаимоисключающие — один и тот же crawler не делает обоих.
  • Тип токена (Normal или JavaScript)
  • Лимит параллельности (по умолчанию 20, можно повысить по запросу)
Никакого флага store на каждый запрос

Доставка в Storage — это свойство crawler-а, а не push-запроса. Если crawler создан в режиме Storage, каждый результат автоматически попадает в Cloud Storage — вам не нужно указывать store=true в каждом push, а crawler-ы в режиме webhook не могут переключиться на Storage для отдельного запроса.

Push

Отправляйте URL в очередь crawler-а. Push сразу возвращает rid, чтобы ваш клиент мог продолжить работу; сам обход выполняется в фоне с настроенной для crawler-а параллельностью. Передайте callback=true, чтобы запрос ушёл в очередь вместо inline-выполнения.

GEThttps://api.crawlbase.com/?token=…&crawler=NAME&callback=true&url=…
curl 'https://api.crawlbase.com/?token=YOUR_TOKEN&crawler=product-monitor&callback=true&url=https%3A%2F%2Fexample.com%2Fp%2F12345'
from crawlbase import CrawlerAPI

api = CrawlerAPI({'token': 'YOUR_TOKEN'})
res = api.push(
    'https://example.com/p/12345',
    {'crawler': 'product-monitor'}
)
print(res['rid'])
const { CrawlerAPI } = require('crawlbase');
const api = new CrawlerAPI({ token: 'YOUR_TOKEN' });

const res = await api.push(
  'https://example.com/p/12345',
  { crawler: 'product-monitor' }
);
console.log(res.rid);

Ответ на push небольшой — просто подтверждение, что URL поставлен в очередь.

{ "rid": "a1B2c3D4e5F6" }
Пропускная способность push и лимиты очереди

Скорость push по умолчанию ограничена 30 URL/сек на токен. Каждый crawler держит до 100 тыс. URL в очереди ожидания, а суммарный объём по всем вашим crawler-ам ограничен 1 000 000; как только вы превысите этот лимит, push приостанавливаются и вам приходит письмо — разгрузите очередь (или выполните purge), и push автоматически возобновятся.

Pull

Как завершённые обходы доходят до вас. Два канала, выбираемые один раз при создании crawler-а:

Webhook

Когда crawler создан с callback URL, Crawlbase отправляет POST-запрос с каждым результатом на этот webhook сразу по завершении обхода. Тело — в теле запроса, метаданные — в заголовках запроса. Никакого опроса, никакого состояния на стороне клиента.

# POST https://your-app.com/webhook
# Content-Type: text/html  (or application/json if scraper used)
# pc_status: 200
# original_status: 200
# rid: a1B2c3D4e5F6
# url: https://example.com/p/12345

…

Ваш webhook должен:

  • Быть публично доступным с серверов Crawlbase.
  • Принимать POST и отвечать 200, 201 или 204 в течение 200 мс.
  • Быть идемпотентным по rid — при повторах возможны дублирующиеся доставки.
  • Подтверждать до обработки — запускайте работу async, если она занимает больше времени, чем окно ответа.

Форма тела зависит от параметра format, который вы установили при push:

format=htmlformat=json
Content-Type: text/plainContent-Type: gzip/json
Тело — это HTML страницыТело — JSON: { pc_status, original_status, rid, url, body }
Заголовки несут метаданные: Original-Status, PC-Status, rid, urlЗаголовки несут те же метаданные, поля также присутствуют в теле

Оба варианта приходят сжатыми gzip (Content-Encoding: gzip) — ваш обработчик должен распаковать их перед парсингом. Исключение — webhook-и Zapier, которые не умеют читать gzip-тела; Crawlbase определяет callback URL Zapier и пропускает сжатие.

Неудачные доставки тарифицируются

Каждый повтор считается успешным обходом для целей биллинга — Crawlbase уже оплатила прокси/браузер. Делайте webhook надёжным; самый дешёвый способ снизить расход кредитов — перестать терять доставки, а не бороться с политикой повторов.

Тестирование. Когда вы впервые подключаете обработчик и хотите изучить точную форму payload-а для реального URL, создайте crawler в режиме Storage параллельно с webhook-ом и отправляйте одни и те же URL в оба. Забирайте из Cloud Storage по RID и получите замороженный эталон для сравнения с тем, что приходит на webhook — полезно для отлова ошибок распаковки и обработки метаданных до того, как они попадут в продакшн-трафик.

Мониторинг-бот. Crawlbase периодически опрашивает ваш webhook, чтобы детектировать сбои. Если бот не может достучаться до вашего endpoint или вы перестали возвращать 2xx, crawler сам приостанавливается автоматически и возобновляет работу, как только endpoint снова отвечает. Проба — обычный POST с JSON-телом, отличимый по User-Agent:

POST https://your-app.com/webhook
User-Agent: Crawlbase Monitoring Bot 1.0
Content-Type: application/json

{ "monitor": true }

Считайте пробы no-op и возвращайте 200. Не обрабатывайте их как результаты обхода — реального RID для действий там нет.

Защита endpoint-а. Случайная строка в пути (yourdomain.com/2340JOiow43djoqe21rjosi) на практике уже даёт большую часть защиты — такой URL вряд ли будет обнаружен. Для подстраховки добавьте один или несколько слоёв:

  • Токен в query-string: ?token=…, который webhook проверяет перед приёмом тела.
  • Кастомный заголовок, отправляемый через callback_headers при push (например, X-Webhook-Token|s3kret) и проверяемый на стороне сервера.
  • Отклоняйте всё, что не POST.
  • Отклоняйте всё, где отсутствуют ожидаемые заголовки метаданных (Pc-Status, Original-Status, rid).

Мы не рекомендуем allowlist по IP — Crawlbase отправляет push с множества IP, и набор ротируется без предупреждения.

Cloud Storage

Когда crawler создан с режимом доставки Storage, каждый результат автоматически сохраняется в Cloud Storage — никакого флага на каждый push, никакого webhook. Ваш потребитель забирает результаты в своём ритме через Storage API. Используйте этот режим, когда обработка ниже по потоку батчевая, когда вы не можете поднять HTTPS-endpoint или когда вам нужен стабильный URL для каждой обойдённой страницы.

Push выполняется так же, как и для crawler-а в режиме webhook — единственное отличие в том, куда попадает результат. Как только URL завершит обход, забирайте по RID:

# Single fetch by RID
curl 'https://api.crawlbase.com/storage?token=YOUR_TOKEN&rid=a1B2c3D4e5F6'

# Or batch-drain up to 100 RIDs at once with auto_delete=true
# so storage stays small.
curl -X POST 'https://api.crawlbase.com/storage/bulk?token=YOUR_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{ "rids": ["RID1","RID2","RID3"], "auto_delete": true }'

Чтобы узнать, когда результат готов, либо опрашивайте Find Job по конкретному RID, либо следите за Stats по счётчикам queued / completed, либо просто пакетно вычитывайте /storage/bulk по расписанию и пусть «RID not found» подсказывает, что ещё в обработке.

Режим доставки задаётся при создании

Эти два режима взаимоисключающие и привязываются к crawler-у при создании. Crawler в режиме webhook не пишет в Storage; crawler в режиме Storage не отправляет webhook. Чтобы переключиться, создайте новый crawler с другим режимом и перенесите push-трафик на него.

Management API

Небольшой REST-интерфейс для мониторинга и управления вашими crawler-ами — получить статистику, очистить очередь, поставить на паузу/снять с паузы, найти или удалить отдельную задачу по RID. Все endpoints располагаются по пути /crawler/<TOKEN>/... и аутентифицируются токеном в пути (token в query-string не нужен).

Token в пути, а не в query string

В отличие от Crawling API, эти endpoints ожидают token в пути URL. Для crawler-ов с JavaScript-токеном замените Normal token на ваш JS-токен в каждом примере ниже.

Stats

Сводка по всем вашим crawler-ам — параллелизм, глубина очереди, количество завершённых/упавших и разбивка по истории.

GEThttps://api.crawlbase.com/crawler/<TOKEN>/stats
# All-time summary
curl 'https://api.crawlbase.com/crawler/YOUR_TOKEN/stats'

# Same, filtered to a date range (YYYY-MM-DD bounds, inclusive)
curl 'https://api.crawlbase.com/crawler/YOUR_TOKEN/stats?history_from=2026-04-01&history_to=2026-04-30'

Очистка crawler-а

Немедленно очищает очередь crawler-а — каждый ещё не обработанный URL отбрасывается. Используйте, чтобы восстановиться после неуправляемого продьюсера или сбросить пакет, который вы больше не хотите обрабатывать. Отмены нет.

POSThttps://api.crawlbase.com/crawler/<TOKEN>/<NAME>/purge
curl -X POST 'https://api.crawlbase.com/crawler/YOUR_TOKEN/product-monitor/purge'
Purge срабатывает мгновенно и полностью

Каждый URL в очереди этого crawler-а отбрасывается — никакого мягкого удаления или восстановления. Если нужно убрать только один URL, используйте вместо этого Delete Job.

Удаление одной задачи

Уберите один URL из очереди по его RID — идентификатору запроса, который возвращается при push-е URL.

POSThttps://api.crawlbase.com/crawler/<TOKEN>/<NAME>/delete_job
curl -X POST 'https://api.crawlbase.com/crawler/YOUR_TOKEN/product-monitor/delete_job?rid=YOUR_RID'

Поиск задачи по RID

Узнайте, на какой стадии запрос. Возвращает QUEUED с метаданными очереди, если он ещё ожидает, или NOT_QUEUED, если он уже обойдён (или так и не попал в очередь).

GEThttps://api.crawlbase.com/crawler/<TOKEN>/<NAME>/find_by_rid/<RID>
curl 'https://api.crawlbase.com/crawler/YOUR_TOKEN/product-monitor/find_by_rid/YOUR_RID'
{
  "status": "QUEUED",
  "request_info": {
    "rid": "YOUR_RID",
    "url": "YOUR_URL",
    "retry": 3,
    "created_at": 1600494969.189415
  }
}
{
  "status": "NOT_QUEUED",
  "request_info": {
    "rid": "YOUR_RID"
  }
}

Pause и unpause

Остановите crawler от взятия новой работы, не теряя его очередь. Push-нутые URL продолжают становиться в очередь, но crawler перестаёт их обрабатывать, пока вы не снимете паузу. Полезно для технических окон или для отступления, когда нижестоящая система нездорова.

# Pause — stops the crawler picking up new work
curl -X POST 'https://api.crawlbase.com/crawler/YOUR_TOKEN/product-monitor/pause'

# Unpause — resumes processing
curl -X POST 'https://api.crawlbase.com/crawler/YOUR_TOKEN/product-monitor/unpause'

Параметры

crawler
строкаобязательный
Имя crawler-а из вашего dashboard.
url
строкаобязательный (push)
URL для постановки в очередь. URL-кодируйте его.
callback_headers
строканеобязательный
Дополнительные заголовки для отправки с webhook, формат name|value|name|value. Удобно для передачи ID обратно в ваш обработчик. Только для crawler-ов в режиме webhook — игнорируется, когда crawler доставляет в Storage.
queue_timeout
целое (минуты)необязательный
Максимальное время, которое запрос может находиться в очереди до того, как его возьмёт worker. Диапазон 110080 (от 1 минуты до 7 дней). Как только worker начинает обход, этот таймер больше не действует. Если запрос истекает в ожидании, вы получаете callback с HTTP 504 и pc_status=699. Не указывайте (или установите 0), чтобы отключить. Агрессивные значения повышают долю отказов — выбирайте то, что отражает, насколько долго результат вам действительно полезен.
Все параметры Crawling API
необязательный
Передавайте page_wait, scroll, country, scraper и т. д. — они применяются к каждому обходу.

Когда использовать Crawler, а когда API

  • Crawler: всякий раз, когда у вас более нескольких сотен URL для обработки, особенно на долгих горизонтах времени. Очередь сама занимается ретраями, расписанием и параллелизмом.
  • Crawling API напрямую: когда вам нужен результат сразу — рендеринг страницы для пользовательского запроса, AI-агент, забирающий контекст, и т. п.