Get an async scrape job result
scrape_resultRetrieve the extracted content of a completed asynchronous scrape job, including markdown, HTML, links, images, screenshot, and metadata; call only after scrape_status shows done.
Instructions
Fetch the extracted content of a completed async scrape job (the same result shape as the synchronous scrape tool: markdown, cleaned HTML, raw HTML, links, images, screenshot, page metadata in metadata, values from extract.elements in elements, and response_meta.usage). Errors if the job is still pending/running — check scrape_status first (status done) before calling this. Check page_status_code before you trust the content: it is the HTTP status the site answered with for the final page. A page the site served is a successful result whatever its status, so a 404 or 503 page comes back with its content, not as an error. A 404 means the markdown is the site's "not found" page, not the page you asked for. 2xx and 4xx pages are billed, except 403, 407, 408, 429 and 451; 5xx pages are never billed. A job answers for 24 hours after it was submitted, then returns not_found. Screenshot URLs are signed download links that expire at the same moment, however late you fetch the result: download the image if you need it later.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | Job identifier returned by the `scrape_async` tool |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The URL that was actually scraped, after any redirects, in normalized form — the base that links, images, and internal labels are computed against | |
| links | No | Links found on the page | |
| images | No | Inline images found on the page | |
| elements | No | The values asked for in `extract.elements`, under the same names. Each name is a string, an object (a spec with `fields`), a list of either (`all: true`), or null when nothing matched (`[]` with `all: true`). An object holds its field names with the same kinds of values, nested up to 3 levels. Every requested name is always present, at every level of `fields`. | |
| markdown | No | Page content converted to clean Markdown | |
| metadata | No | Extracted page metadata (title, OG tags, etc.) | |
| raw_html | No | Raw, unprocessed HTML of the page | |
| warnings | No | Non-error notices about the scrape. Truncation codes — `screenshot_truncated` (long page exceeded the scrolling-screenshot height cap), `links_truncated` / `inline_images_truncated` (page had more links/images than the per-page extraction caps), `raw_html_truncated` (rendered HTML exceeded the per-page size budget) — mean the field is present but capped. `elements_truncated` means at least one `elements` value hit a limit: a list was cut at 1,000 matches, the request reached 10,000 matches in total, or a value did not fit the ~1 MB of values allowed per request (that value is then null, never cut short). Unavailability codes — `links_unavailable` / `inline_images_unavailable` / `metadata_unavailable` — mean that optional field could not be extracted and was omitted (null/empty) while the rest of the scrape succeeded, so an empty field carrying one of these does NOT mean the page had none. `screenshot_unavailable` means a screenshot was asked for, but the page came back from the http engine without one. Stable string codes — clients can switch on them. Warnings are stored with the result: async result fetches and cache hits carry them too, filtered to the fields the request asked for. `metadata_truncated` is retired and no longer sent: metadata has no size limit of its own now, though the code can still appear on results stored before that change. | |
| screenshot | No | Screenshot of the page, if requested | |
| cleaned_html | No | Cleaned HTML of the main page content | |
| content_type | No | Content-Type header returned by the server | |
| requested_url | Yes | The URL you requested, echoed verbatim — before any redirects | |
| response_meta | Yes | Request-level metadata. `response_meta.usage` reports what the request cost (total_credit_cost and its parts), the billed engine and the resolved proxy tier. | |
| page_status_code | No | The HTTP status the site answered with for the final page, after redirects. Check it before you trust the content. A page the site served is a successful result whatever its status: a 404 or 503 page comes back with its content here, not as an error, so a 404 means the markdown is the site's "not found" page, not the page you asked for. Billing follows this status: 2xx and 4xx pages are billed, except 403, 407, 408, 429 and 451; 5xx pages are never billed. Older api versions do not send it; they only returned pages that loaded normally. | |
| unsupported_fields | No | Extract fields that were requested but are not supported for this content type |