AnyCrawl

Запланированные задачи

Периодический скрейпинг, обход и поиск по расписанию cron.

Введение

Запланированные задачи автоматизируют повторяющийся скрейпинг, обход и сбор данных по стандартным cron-выражениям. Подходит для мониторинга сайтов, цен, архивации, агрегации поиска и любых периодических задач.

Ключевые возможности: расписание cron с часовым поясом, режимы параллельности, автопауза при сбоях, учёт кредитов и вебхуки для событий.

Основные возможности

  • Cron: стандартный синтаксис расписания
  • Часовой пояс: выполнение в любой TZ (напр. Asia/Shanghai, America/New_York)
  • Параллельность: два режима — skip или queue
  • Автопауза: после серии ошибок подряд
  • Кредиты: лимиты запусков в день и оценка расхода
  • История: все запуски со статусом и метриками
  • Вебхуки: уведомления о событиях задач

Конечные точки API

POST   /v1/scheduled-tasks              # Create a scheduled task
GET    /v1/scheduled-tasks              # List all tasks
GET    /v1/scheduled-tasks/:taskId      # Get task details
PUT    /v1/scheduled-tasks/:taskId      # Update task
PATCH  /v1/scheduled-tasks/:taskId/pause   # Pause task
PATCH  /v1/scheduled-tasks/:taskId/resume  # Resume task
DELETE /v1/scheduled-tasks/:taskId      # Delete task
GET    /v1/scheduled-tasks/:taskId/executions  # Get execution history
DELETE /v1/scheduled-tasks/:taskId/executions/:executionId  # Cancel an execution

Быстрый старт

Ежедневная задача скрейпинга

curl -X POST "https://api.anycrawl.dev/v1/scheduled-tasks" \
  -H "Authorization: Bearer <your-api-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Daily Tech News",
    "description": "Scrape Hacker News daily at 9 AM",
    "cron_expression": "0 9 * * *",
    "timezone": "Asia/Shanghai",
    "task_type": "scrape",
    "task_payload": {
      "url": "https://news.ycombinator.com",
      "engine": "cheerio",
      "formats": ["markdown"]
    },
    "concurrency_mode": "skip",
    "max_executions_per_day": 1
  }'

Ответ

{
  "success": true,
  "data": {
    "task_id": "550e8400-e29b-41d4-a716-446655440000",
    "next_execution_at": "2026-01-28T01:00:00.000Z"
  }
}

Справка по cron

Cron использует 5 полей:

* * * * *
│ │ │ │ │
│ │ │ │ └─ День недели (0–7, 0 и 7 = воскресенье)
│ │ │ └─── Месяц (1–12)
│ │ └───── День месяца (1–31)
│ └─────── Час (0–23)
└───────── Минута (0–59)

Типичные примеры

ExpressionDescriptionExecution Time
0 9 * * *Every day at 9:00 AM09:00:00 daily
*/15 * * * *Every 15 minutes:00, :15, :30, :45
0 */6 * * *Every 6 hours00:00, 06:00, 12:00, 18:00
0 9 * * 1Every Monday at 9 AMMonday 09:00:00
0 0 1 * *First day of month1st day, 00:00:00
30 2 * * 0Every Sunday at 2:30 AMSunday 02:30:00

Проверка и подсказки по cron: crontab.guru.

Параметры запроса

Конфигурация задачи

ParameterTypeRequiredDefaultDescription
namestringYes-Имя задачи (1–255 символов)
descriptionstringNo-Описание
cron_expressionstringYes-Стандартное cron-выражение (5 полей)
timezonestringNo"UTC"Часовой пояс (напр. "Asia/Shanghai")
task_typestringYes-Тип: "scrape", "crawl", "search" или "template"
task_payloadobjectYes-Конфигурация задачи (см. ниже)

Параллельность

ParameterTypeRequiredDefaultDescription
concurrency_modestringNo"skip"Режим: "skip" или "queue"
max_executions_per_daynumberNo-Лимит запусков в сутки

Метаданные выполнения (только чтение)

Эти поля возвращаются в ответах по задаче и не принимаются в теле create/update:

  • min_credits_required: оценка минимальных кредитов за один запуск (считает сервер)
  • consecutive_failures: число подряд идущих сбоев для автопаузы

Вебхуки

ParameterTypeRequiredDefaultDescription
webhook_idsstring[]No-UUID подписок вебхуков
webhook_urlstringNo-URL вебхука (неявная подписка)

Можно указать webhook_ids на существующие подписки или webhook_url для неявной подписки на эту задачу.

Метаданные

ParameterTypeRequiredDefaultDescription
tagsstring[]No-Теги для группировки
metadataobjectNo-Произвольные метаданные

Полезная нагрузка (task_payload)

Задача scrape

{
  "url": "https://example.com/page",
  "engine": "cheerio",
  "formats": ["markdown"],
  "timeout": 60000,
  "wait_for": 2000,
  "include_tags": ["article", "main"],
  "exclude_tags": ["nav", "footer"]
}

Задача crawl

{
  "url": "https://example.com",
  "engine": "playwright",
  "options": {
    "max_depth": 3,
    "limit": 50,
    "strategy": "same-domain",
    "exclude_paths": ["/admin/*", "/api/*"],
    "scrape_options": {
      "formats": ["markdown"]
    }
  }
}
{
  "query": "artificial intelligence news",
  "engine": "google",
  "limit": 20,
  "country": "US",
  "lang": "en",
  "timeRange": "day"
}

Задача template

{
  "template_id": "my-search-template",
  "query": "machine learning tutorials",
  "variables": {
    "lang": "en"
  }
}

Для task_type: "template" в task_payload должны быть:

  • template_id (обязательно): выполняемый шаблон
  • поля ввода для типа шаблона (например url для scrape/crawl, query для search)
  • опционально variables для динамических входов шаблона

Режимы параллельности

skip (рекомендуется)

Если предыдущий запуск ещё идёт, текущий пропускается.

Когда: задача может длиться дольше интервала между запусками.

Пример: crawl раз в час, иногда выполняется 90 минут.

queue

Новый запуск ставится в очередь и ждёт завершения предыдущего.

Когда: нельзя пропускать ни один запуск по расписанию.

Пример: критичный сбор данных без пропусков.

Управление задачами

Список задач

curl -X GET "https://api.anycrawl.dev/v1/scheduled-tasks" \
  -H "Authorization: Bearer <your-api-key>"

Ответ

{
  "success": true,
  "data": [
    {
      "uuid": "550e8400-e29b-41d4-a716-446655440000",
      "name": "Daily Tech News",
      "task_type": "scrape",
      "cron_expression": "0 9 * * *",
      "timezone": "Asia/Shanghai",
      "is_active": true,
      "is_paused": false,
      "next_execution_at": "2026-01-28T01:00:00.000Z",
      "total_executions": 45,
      "successful_executions": 43,
      "failed_executions": 2,
      "consecutive_failures": 0,
      "last_execution_at": "2026-01-27T01:00:00.000Z",
      "created_at": "2026-01-01T00:00:00.000Z"
    }
  ]
}

Пауза задачи

Временная остановка. Параметр reason сохраняется как pause_reason.

curl -X PATCH "https://api.anycrawl.dev/v1/scheduled-tasks/:taskId/pause" \
  -H "Authorization: Bearer <your-api-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "reason": "Maintenance period"
  }'

Ответ

{
  "success": true,
  "message": "Task paused successfully",
  "data": {
    "uuid": "550e8400-e29b-41d4-a716-446655440000",
    "is_paused": true,
    "pause_reason": "Maintenance period"
  }
}

Возобновление задачи

curl -X PATCH "https://api.anycrawl.dev/v1/scheduled-tasks/:taskId/resume" \
  -H "Authorization: Bearer <your-api-key>"

Обновление задачи

curl -X PUT "https://api.anycrawl.dev/v1/scheduled-tasks/:taskId" \
  -H "Authorization: Bearer <your-api-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "cron_expression": "0 10 * * *",
    "description": "Updated description"
  }'

Ответ

{
  "success": true,
  "data": {
    "uuid": "550e8400-e29b-41d4-a716-446655440000",
    "name": "Daily Tech News",
    "description": "Updated description",
    "task_type": "scrape",
    "cron_expression": "0 10 * * *",
    "timezone": "Asia/Shanghai",
    "task_payload": {
      "url": "https://news.ycombinator.com",
      "engine": "cheerio",
      "formats": ["markdown"]
    },
    "concurrency_mode": "skip",
    "is_active": true,
    "is_paused": false,
    "next_execution_at": "2026-01-28T02:00:00.000Z",
    "total_executions": 45,
    "successful_executions": 43,
    "failed_executions": 2,
    "consecutive_failures": 0,
    "last_execution_at": "2026-01-27T01:00:00.000Z",
    "created_at": "2026-01-01T00:00:00.000Z",
    "updated_at": "2026-01-27T12:00:00.000Z",
    "icon": "FileText"
  }
}

Указывайте только изменяемые поля; остальные не трогаются.

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

curl -X DELETE "https://api.anycrawl.dev/v1/scheduled-tasks/:taskId" \
  -H "Authorization: Bearer <your-api-key>"

Удаление задачи удаляет и всю историю запусков.

История выполнений

Получить запуски

curl -X GET "https://api.anycrawl.dev/v1/scheduled-tasks/:taskId/executions?limit=20" \
  -H "Authorization: Bearer <your-api-key>"

Ответ

{
  "success": true,
  "data": [
    {
      "uuid": "exec-uuid-1",
      "scheduled_task_uuid": "task-uuid",
      "execution_number": 45,
      "status": "completed",
      "started_at": "2026-01-27T01:00:00.000Z",
      "completed_at": "2026-01-27T01:02:15.000Z",
      "duration_ms": 135000,
      "job_uuid": "job-uuid-1",
      "triggered_by": "scheduler",
      "scheduled_for": "2026-01-27T01:00:00.000Z",
      "error_message": null,
      "credits_used": 5,
      "items_processed": 1,
      "items_succeeded": 1,
      "items_failed": 0,
      "job_status": "completed",
      "job_success": true,
      "icon": "CircleCheck"
    }
  ]
}

Примечание: поля credits_used, items_processed, items_succeeded, items_failed, job_status, job_success приходят из связанной записи job (JOIN). duration_ms считается из started_at и completed_at.

Отмена одного запуска

Отмена конкретного запуска в статусе ожидания или выполнения — без паузы всей задачи.

curl -X DELETE "https://api.anycrawl.dev/v1/scheduled-tasks/:taskId/executions/:executionId" \
  -H "Authorization: Bearer <your-api-key>"

Ответ

{
  "success": true,
  "message": "Execution cancelled successfully"
}

Отменить можно только запуски со статусом pending или running. Завершённые, с ошибкой или уже отменённые вернут ошибку.

Обработка сбоев

Автопауза при серии ошибок

Задача автоматически ставится на паузу после 5 сбоев подряд, чтобы не тратить ресурсы зря.

Возобновление: вручную после устранения причины.

curl -X PATCH "https://api.anycrawl.dev/v1/scheduled-tasks/:taskId/resume" \
  -H "Authorization: Bearer <your-api-key>"

Мониторинг сбоев

Следите за полем consecutive_failures в статусе задачи:

{
  "consecutive_failures": 3,
  "failed_executions": 5,
  "successful_executions": 40
}

Следите за consecutive_failures: высокие значения указывают на повторяющиеся проблемы.

Интеграция с вебхуками

Подписка на события задач через вебхуки:

curl -X POST "https://api.anycrawl.dev/v1/webhooks" \
  -H "Authorization: Bearer <your-api-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Task Notifications",
    "webhook_url": "https://your-domain.com/webhook",
    "event_types": ["task.executed", "task.failed", "task.paused"],
    "scope": "all"
  }'

Подробнее — Webhooks.

Типичные сценарии

Мониторинг цен

Проверка цены товара каждый час:

{
  "name": "Hourly Price Tracker",
  "cron_expression": "0 * * * *",
  "task_type": "scrape",
  "task_payload": {
    "url": "https://shop.example.com/product/12345",
    "engine": "cheerio",
    "formats": ["markdown"]
  },
  "concurrency_mode": "skip"
}

Еженедельный бэкап документации

Обход и архивация документации раз в неделю:

{
  "name": "Weekly Docs Backup",
  "cron_expression": "0 3 * * 0",
  "timezone": "UTC",
  "task_type": "crawl",
  "task_payload": {
    "url": "https://docs.example.com",
    "engine": "playwright",
    "options": {
      "max_depth": 10,
      "limit": 500
    }
  },
  "max_executions_per_day": 1
}

Ежедневная агрегация новостей

Скрейпинг новостных источников раз в день:

{
  "name": "Morning News Digest",
  "cron_expression": "0 6 * * *",
  "timezone": "America/New_York",
  "task_type": "scrape",
  "task_payload": {
    "url": "https://news.example.com",
    "engine": "cheerio",
    "formats": ["markdown"]
  },
  "max_executions_per_day": 1
}

Конкурентная разведка

Упоминания конкурентов и тренды отрасли каждый час:

{
  "name": "Competitor Monitoring",
  "cron_expression": "0 * * * *",
  "task_type": "search",
  "task_payload": {
    "query": "YourCompany OR CompetitorA OR CompetitorB",
    "engine": "google",
    "limit": 50,
    "timeRange": "day"
  },
  "concurrency_mode": "skip"
}

Рекомендации

1. Интервалы cron

  • Не чаще 1 минуты — избегайте лишней нагрузки
  • Учитывайте частоту обновления целевого сайта
  • Используйте timezone для локального времени

2. Режим параллельности

  • "skip" — для большинства задач, чтобы не перекрывать запуски
  • "queue" — только когда каждый запуск обязателен

3. Кредиты

  • max_executions_per_day для дорогих задач
  • смотрите min_credits_required в деталях задачи
  • отслеживайте расход в истории запусков

4. Здоровье задач

  • регулярно проверяйте consecutive_failures
  • анализируйте историю на паттерны
  • настройте вебхуки на сбои

5. Имена и теги

  • понятные имена задач
  • теги для фильтрации
  • метаданные для учёта

Ограничения

ItemLimit
Task name length1-255 characters
Minimum interval1 minute
Concurrency modesskip, queue
Task payload size100KB
Cron expression formatStandard 5-field format

Устранение неполадок

Задача не выполняется

Проверьте:

  • активна ли задача (is_active: true)
  • не на паузе ли (is_paused: false)
  • корректно ли cron-выражение
  • достаточно ли кредитов

Высокий процент ошибок

Возможные причины:

  • сайт блокирует запросы
  • неверные URL в task_payload
  • мало таймаута
  • сеть

Что сделать:

  • задержки через wait_for
  • другой движок (Playwright для динамики)
  • увеличить таймаут
  • смотреть ошибки в истории

Кредиты заканчиваются быстро

  • реже запускать
  • max_executions_per_day
  • облегчить payload (меньше страниц/форматов)
  • найти дорогие запуски в истории

См. также

  • Webhooks — уведомления о событиях
  • Scrape API — конфигурация скрейпинга
  • Crawl API — конфигурация обхода

Содержание

ВведениеОсновные возможностиКонечные точки APIБыстрый стартЕжедневная задача скрейпингаОтветСправка по cronТипичные примерыПараметры запросаКонфигурация задачиПараллельностьМетаданные выполнения (только чтение)ВебхукиМетаданныеПолезная нагрузка (task_payload)Задача scrapeЗадача crawlЗадача searchЗадача templateРежимы параллельностиskip (рекомендуется)queueУправление задачамиСписок задачОтветПауза задачиОтветВозобновление задачиОбновление задачиОтветУдаление задачиИстория выполненийПолучить запускиОтветОтмена одного запускаОтветОбработка сбоевАвтопауза при серии ошибокМониторинг сбоевИнтеграция с вебхукамиТипичные сценарииМониторинг ценЕженедельный бэкап документацииЕжедневная агрегация новостейКонкурентная разведкаРекомендации1. Интервалы cron2. Режим параллельности3. Кредиты4. Здоровье задач5. Имена и тегиОграниченияУстранение неполадокЗадача не выполняетсяВысокий процент ошибокКредиты заканчиваются быстроСм. также