ScrapingAsync
Async Fetch Endpoints
Async Fetch
Submit fetch jobs asynchronously for large batches, sequences, or long-running scrapes. Jobs are queued and processed in the background — poll for status and retrieve results when ready.
All async endpoints return a job ID immediately (HTTP 202). Use the job management endpoints below to poll for status and retrieve results.
POST
/v1/scrape/async/batchSubmit up to 30 URLs as an async batch job. Each URL is scraped independently and results are collected.
Request Body
| Parameter | Type | Description |
|---|---|---|
urlsrequired | string[] | object[] | Array of URLs or detailed request objects. Max 30. |
type | "markdown" | "html" | Output format for all URLs. Defaults to "markdown" |
onlyMainContent | boolean | Extract only main content. Defaults to true |
summary | { query: string } | LLM summarization for all content |
pdfStrategy | "ocr" | "local" | "auto" | PDF extraction strategy (applied to all). Defaults to "ocr" |
proxy | { country: string } | Proxy for geo-targeted requests. See supported countries |
Example Request
Response (HTTP 202)
POST
/v1/scrape/async/singleSubmit a single URL for async scraping. Useful for long-running pages or when you want non-blocking behavior.
Request Body
| Parameter | Type | Description |
|---|---|---|
urlrequired | string | The URL to fetch |
type | "markdown" | "html" | Output format. Defaults to "markdown" |
onlyMainContent | boolean | Extract only main content. Defaults to true |
extractMetadata | boolean | Extract page metadata |
summary | { query: string } | LLM summarization query |
pdfStrategy | "ocr" | "local" | "auto" | PDF extraction strategy. Defaults to "ocr" |
actions | Action[] | Browser actions to execute after page load (click, wait, type, press, scroll, waitForSelector, navigate, goBack) |
proxy | { country: string } | Proxy for geo-targeted requests. See supported countries |
Example Request
POST
/v1/scrape/async/sequenceExecute a multi-step browser sequence asynchronously. Each step can be an action (click, type, wait, etc.) or a scrape breakpoint that captures page content.
Request Body
| Parameter | Type | Description |
|---|---|---|
startUrlrequired | string | Starting URL to navigate to |
stepsrequired | SequenceStep[] | Ordered list of steps — actions and scrape breakpoints |
type | "markdown" | "html" | Output format. Defaults to "markdown" |
summary | { query: string } | Summary query applied to each breakpoint |
proxy | { country: string } | Proxy for geo-targeted requests. See supported countries |
extractMetadata | boolean | Extract page metadata at each breakpoint |
Example Request
Step Types
| Field | Type | Description |
|---|---|---|
scrape | { type: "scrape" } | Capture page content at this point (breakpoint) |
click | { type: "click", selector: string } | Click an element matching the CSS selector |
type | { type: "type", selector: string, text: string } | Type text into an input element |
wait | { type: "wait", milliseconds: number } | Wait for a specified duration |
press | { type: "press", key: string } | Press a keyboard key (e.g., "Enter", "Tab") |
scroll | { type: "scroll", direction?: "up" | "down", selector?: string } | Scroll the page or a specific element. Direction defaults to "down" |
waitForSelector | { type: "waitForSelector", selector: string, timeout?: number } | Wait for an element to appear on the page. Timeout in ms (max 30s) |
navigate | { type: "navigate", url: string } | Navigate to a different URL |
goBack | { type: "goBack" } | Navigate back to the previous page |
POST
/v1/scrape/async/sequence/batchFan out multiple independent sequences as a single batch job. Each sequence runs in its own browser.
Request Body
| Parameter | Type | Description |
|---|---|---|
sequencesrequired | AsyncSequenceRequest[] | Array of sequence requests to execute in parallel |
type | "markdown" | "html" | Shared output format for sequences that omit their own |
proxy | { country: string } | Shared proxy for sequences that omit their own. See supported countries |
Example Request
POST
/v1/scrape/async/search/batchSubmit up to 20 search queries as an async batch job.
Request Body
| Parameter | Type | Description |
|---|---|---|
queriesrequired | string[] | Search queries. Min: 1, Max: 20 |
limit | number | Results per query. Range: 1-50. Defaults to 10 |
location | string | ISO country code for geo-targeting. See supported countries |
includeDomains | string[] | Only include results from these domains |
excludeDomains | string[] | Exclude results from these domains |
engine | "google" | "bing" | "chatgpt" | "perplexity" | Search engine to use. Defaults to "google" |
Example Request
Job Management
These endpoints work for all async job types — fetch, sequence, and search.
GET
/v1/scrape/async/job/:idGet the status and results of an async job. Results are paginated.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
offset | number | Results offset for pagination. Defaults to 0 |
limit | number | Number of results per page. Defaults to 10 |
Example Request
Response Fields
| Field | Type | Description |
|---|---|---|
id | string | Unique job ID |
status | string | "pending" | "processing" | "completed" | "failed" | "cancelled" |
type | string | "scrape-single" | "scrape-batch" | "sequence" | "sequence-batch" | "search-batch" |
total | number | Total number of URLs/items |
completed | number | Number of completed items |
expiresAt | string | ISO timestamp when results expire |
data | array | Array of results (paginated) |
next | string | URL to next page of results, if more exist |
Example Response
GET
/v1/scrape/async/jobsList all async jobs for the authenticated user. Supports pagination and filtering by job type.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
page | number | Page number. Defaults to 1 |
limit | number | Items per page. Defaults to 20 |
type | string | Filter by job type: "scrape-single", "scrape-batch", "sequence", "sequence-batch", "search-batch" |
Example Request
Response Fields
| Field | Type | Description |
|---|---|---|
jobs | array | Array of job summary objects |
total | number | Total number of jobs |
page | number | Current page |
limit | number | Items per page |
Job Summary Object
| Field | Type | Description |
|---|---|---|
id | string | Job ID |
type | string | Job type |
status | string | Job status |
total | number | Total items |
completed | number | Completed items |
createdAt | string | Creation timestamp |
expiresAt | string | Expiry timestamp |
DELETE
/v1/scrape/async/job/:idCancel a pending or in-progress async job.
Example Request
Example Response
Common Response: Job Created
All async start endpoints return the same response shape:
| Field | Type | Description |
|---|---|---|
success | boolean | Whether the job was created successfully |
id | string | Unique job ID for polling |
url | string | Relative URL to poll for job status |
waitForJob() — SDK Only
The Node.js SDK provides a convenience method that polls a job until it reaches a terminal state (completed, failed, or cancelled).
Pricing
Async jobs use the same per-URL pricing as sync endpoints. There is no additional charge for async processing.
| Operation | Cost (USD) | Description |
|---|---|---|
| Fetch (per URL) | $0.002 | Same flat rate as sync fetch |
| Fetch + Summary | $0.001 | Additional fee when summary is requested |
| Search (per query) | $0.007 | Same flat rate as sync search |