Start a scrape run
Queues an agent-driven scrape run. Describe what you want in plain language; optionally pin the exact pages to visit and the columns you expect back. Returns immediately with a session id you poll for results. Also accepts multipart/form-data with a "file" field to extract from an uploaded document.
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| instruction | string | Optional | What to collect, in plain language. Required unless target_urls is provided (then one is synthesized). Alias: prompt |
| target_urls | string[] | Optional | Public http(s) pages to scrape. Aliases: urls, url. Full URLs inside the instruction text are also picked up automatically |
| fields | string[] | Optional | Column names you expect in the output table. Alias: columns |
| schema_hints | object | Optional | Richer output-shape hints (object, list, or string). Alias: schema |
| compliance_mode | string | Optional | How cautiously to treat target sites: "conservative", "regular" (default), or "yolo" |
| table_shape | string | Optional | "long" (default) or "wide" output table |
| sample_run | boolean | Optional | Collect only a small sample first (default false). sample_limit (1-1000, default 25) caps the rows |
What to collect, in plain language. Required unless target_urls is provided (then one is synthesized). Alias: prompt
Public http(s) pages to scrape. Aliases: urls, url. Full URLs inside the instruction text are also picked up automatically
Column names you expect in the output table. Alias: columns
Richer output-shape hints (object, list, or string). Alias: schema
How cautiously to treat target sites: "conservative", "regular" (default), or "yolo"
"long" (default) or "wide" output table
Collect only a small sample first (default false). sample_limit (1-1000, default 25) caps the rows
Get run status & results
Polls a run. status is "running" until the current turn finishes, then "done". files lists the deliverables produced so far (CSV/JSON), each with a download url; new_files holds only the latest turn’s output.
URL Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| session_id | string | Required | The session id returned by POST /api/scrapes |
The session id returned by POST /api/scrapes
Send a follow-up instruction
Continues an existing run with another instruction — refine the extraction, add columns, or point the agent at more pages. Same body as starting a run. Returns 409 if a turn is still in progress.
URL Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| session_id | string | Required | The session to continue |
The session to continue
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| instruction | string | Required | The follow-up request, in plain language |
The follow-up request, in plain language
Create a monitor from a run
Turns a finished scrape into a recurring monitor. Either describe the schedule and alerts in plain language via instruction, or set the structured fields directly. Runs re-scrape on schedule and notify you on change by email, Slack, or webhook.
URL Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| session_id | string | Required | A session whose scrape you want to re-run on a schedule |
A session whose scrape you want to re-run on a schedule
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
| instruction | string | Optional | Plain-language setup, e.g. "check daily at 9am and email me when rows change". Required if no structured fields are set |
| name | string | Optional | Display name for the monitor |
| schedule_kind | string | Optional | interval | hourly | daily | weekly | monthly | on-demand |
| schedule_time | string | Optional | HH:MM time of day for daily/weekly/monthly schedules |
| email_recipients | string[] | Optional | Who to email when the monitor fires |
| webhook_url | string | Optional | URL that receives JSON events (monitor.changed, monitor.failed, ...) after each run |
| notify_only_if_changed | boolean | Optional | Alert only when the scraped data actually changed |
Plain-language setup, e.g. "check daily at 9am and email me when rows change". Required if no structured fields are set
Display name for the monitor
interval | hourly | daily | weekly | monthly | on-demand
HH:MM time of day for daily/weekly/monthly schedules
Who to email when the monitor fires
URL that receives JSON events (monitor.changed, monitor.failed, ...) after each run
Alert only when the scraped data actually changed
List your monitors
Lists the monitors owned by the API key’s account, with their schedules and notification settings.
Trigger a monitor run
Kicks off a run now (async). Returns 202 with a run id to poll; 402 if the account is out of credits. Run status ends at changed, no_change, or failed.
URL Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| monitor_id | string | Required | The monitor to run |
The monitor to run
Get run results
Returns the scraped table for a run, plus the diff against the previous run. Use the literal run id "latest" for the most recent run.
URL Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| monitor_id | string | Required | The monitor |
| run_id | string | Required | A run id, or "latest" |
The monitor
A run id, or "latest"
Check your credits
Shows the account’s plan and credit usage for the current calendar month. Runs consume credits based on the compute they use; the free plan includes 100 credits per month.