SE Home
Help
  • Documentation
  • Help centre
SEScrape Engine

Getting started

DocumentationQuickstartAuthenticationPlayground

Extracting data

Selecting valuesTransformsLists & tablesPage dataAI extractionMCP server

Fetching pages

Custom requestsTimeouts & redirectsCachingAutomatic retriesFallback strategies

Browsers & actions

BrowsersActionsRecipesScreenshots & PDFStored files

Getting past blocks

Anti-bot protectionCaptchasProxiesFingerprintsSessions

Workflows

Multi-step requestsVariablesPaginationBatchCrawlingTemplatesSchedules & monitoringAsync jobs & webhooksExport to S3, Sheets, databases & webhooks

Account & billing

CreditsSecretsPlansLimitsLogs & request idsNotificationsAccountAffiliate programmeHelp centre

Reference

POST /scrapeGET /sessions/:idGET /browsersGET /proxies/countriesGET /healthErrors
Documentation

Getting started

DocumentationQuickstartAuthenticationPlayground

Extracting data

Selecting valuesTransformsLists & tablesPage dataAI extractionMCP server

Fetching pages

Custom requestsTimeouts & redirectsCachingAutomatic retriesFallback strategies

Browsers & actions

BrowsersActionsRecipesScreenshots & PDFStored files

Getting past blocks

Anti-bot protectionCaptchasProxiesFingerprintsSessions

Workflows

Multi-step requestsVariablesPaginationBatchCrawlingTemplatesSchedules & monitoringAsync jobs & webhooksExport to S3, Sheets, databases & webhooks

Account & billing

CreditsSecretsPlansLimitsLogs & request idsNotificationsAccountAffiliate programmeHelp centre

Reference

POST /scrapeGET /sessions/:idGET /browsersGET /proxies/countriesGET /healthErrors

Schedules & monitoring

Run a request or a template on a schedule, and get told what changed, or only what's new.

A schedule is a /scrape, /batch or /crawl request, or a template, that the platform runs for you on a cron, on your credits. Create one in the dashboard under Automation → Schedules, or from any playground: Schedule opens the editor with the request you were trying, and Save as template keeps it as a template you can schedule.

It has its own page: whether it's running right now (live), when it runs next, its runs, what they found, and its settings.

What it runs

  • A page or a request: a URL is enough. Without fields, the whole page is kept as text (markdown), which is what you watch for changes. The playground's configurator, under Advanced options, edits the full request: fields, steps, browser, proxies, the JSON.
  • A template, yours or the marketplace's, with its parameters. Each run goes through the template: the fields it learned are reused, and fields that break are repaired. Edit its request instead copies the request into the schedule, no longer tied to the template.

When it runs

A cron has five fields: minute, hour, day of the month, month, day of the week, read in the time zone you choose.

CronRuns
*/15 * * * *every 15 minutes
0 * * * *every hour, on the hour
0 9 * * *every day at 9:00
0 9 * * 1-5weekdays at 9:00
0 9 * * 1Mondays at 9:00
  • Runs are at least 5 minutes apart.
  • The editor shows the next runs as you type.
  • Run now runs it at once, outside the schedule.
  • Each run is logged like any request (source Scheduled in Logs), and listed in the schedule's history.

What it costs

  • Each run costs what the same request costs when you send it (credits).
  • Each active schedule also costs a small upkeep per day, taken when its day starts (see the price list on the credits page). A paused schedule costs nothing.
  • When your balance can't pay a run or a day of upkeep, the schedule pauses and you get an email. Turn it back on once you've added credits.
  • A schedule whose request fails 10 times in a row pauses too, with the reason shown.

What to watch

Pick one of three modes:

ModeWhat you hear about
Just collectnothing: the runs are logged (and exported), without comparison
Any changeeach run compared with the previous one: items added and removed, values that moved
New items onlyitems never seen before; what's already been seen, even if it comes back later, stays quiet

How lists are compared:

  • Items are told apart by what identifies them: an id, a url/link, a title/name, whichever is unique in the list. So one new listing at the top is one addition, not every item moving down by one; an item whose price changed is one change (products[url=/oak-chair].price: 89 → 79); an item gone is one removal.
  • Without such a key, lists are compared as sets of items.
  • A page kept as text (no fields) is compared line by line: a new line is one addition.
  • With several pages (/batch, /crawl, steps), each page is compared with itself, by its URL.

The first run of New items only remembers what's there; the next ones report what appears (up to the last 5,000 items remembered).

Values that change on every run (a date, a view counter) would make everything look changed: list their keys in Keys to ignore, they're left out at any depth.

Alerts

When something is found, you're told on the channels you pick for the schedule:

  • your alert channels, set up under Automation → Alert channels (email, SMS and WhatsApp are coming):
    • Telegram, your own chat: Open the bot, press Start, done: the page sees it by itself.
    • Telegram, a group (a team, a family…): choose A group, Telegram asks which group to add our bot to; everyone in it gets the alerts. Without the link, add the bot to the group and send /code there, then type the code in the dashboard.
    • /stop in a chat or group disconnects it.
    • Discord and Slack: paste a channel's webhook URL (Discord: Server settings → Integrations → Webhooks; Slack: an app with Incoming Webhooks).
  • a webhook, if you give a URL: a POST with the changes as JSON ("event": "monitor.new_items" in New items only).
{
  "event": "monitor.changed",
  "schedule": { "id": "4de3120c-d44d-4289-8b1f-522be876c9fb", "name": "Competitor prices" },
  "run": { "id": 128, "at": "2026-10-24T09:00:03.418Z", "log_id": 974 },
  "changes": [
    { "path": "price", "kind": "changed", "before": 89, "after": 79 },
    { "path": "products[]", "kind": "added", "after": { "name": "Oak chair", "price": 120 } }
  ]
}

Each webhook is signed: X-Signature: sha256=<hex> is the HMAC-SHA256 of the raw body with the schedule's signing secret (shown in its editor). Check it before trusting the call:

import { createHmac, timingSafeEqual } from "node:crypto";

function verify(rawBody, header, secret) {
  const expected = `sha256=${createHmac("sha256", secret).update(rawBody).digest("hex")}`;
  return header.length === expected.length && timingSafeEqual(Buffer.from(header), Buffer.from(expected));
}

The webhook must be a public http(s) address. It has 10 seconds to answer; redirects aren't followed.

With the API

Everything above is also in the API, with your API key, in snake_case:

GET /v1/schedulesyour schedules, with their next and last runs
POST /v1/schedules{ "name", "cron", "timezone", "path": "/scrape", "body": { … }, "monitor", "watch": "changes" | "new", "ignore", "alert_targets": ["<channel id>"], "webhook_url", "enabled" } → { "id" }. A template instead of path and body: "template_id", "variant_key", "params": { … }
GET /v1/schedules/{id}one schedule, with running_since while a run is under way
PATCH /v1/schedules/{id}change any of them; "enabled": true lifts a pause
DELETE /v1/schedules/{id}
POST /v1/schedules/{id}/runruns it now: { "status", "changes" }
GET /v1/schedules/{id}/runsthe last runs (?limit=), with what changed
GET /v1/schedules/preview?cron=…&timezone=…the next runs of a cron, or why it can't be used
GET /v1/monitorsthe runs that found changes, newest first (?schedule=, ?before=, ?limit=)

Put export in the body to send every run's result to your storage, sheet or database.

On this page

  • What it runs
  • When it runs
  • What it costs
  • What to watch
  • Alerts
  • With the API