datapulse_scrape_result
datapulse:scrapeOutput: JSONRead-onlyGet result by url hash
Description
Retrieve a scrape result by url hash. Used to poll for async scrape results.
When to use this tool:
- After datapulse_scrape_submit WITHOUT wait=true (async mode)
- After datapulse_scrape_bulk (always async)
- When you need include_dom=true for DOM analysis
NOT needed when: you used datapulse_scrape_submit with wait=true, because sync mode already returns the full result.
Status values (check before reading extraction):
- pending/processing: NOT DONE — poll again in 5-10 seconds
- completed: Extraction data is ready
- failed: Check error field. Only failed means the scrape failed.
Bulk URLs (submitted via datapulse_scrape_bulk) can stay pending or processing much longer: behind interactive work, or while bulk work is paused. That is not a failure; poll with backoff. To rush one URL, resubmit it with datapulse_scrape_submit(url=…, force=true, wait=true).
Link discovery (completed results):
- link_domains: {internal, external} — internal is the HOSTNAMES under the page’s own registrable domain, external the distinct third-party REGISTRABLE DOMAINS (the portfolio signal); different units, do not merge. Derived from every link; links_truncated and links_total are added when the page had more links than the scrape keeps
- links: array of referenced URLs (the scrape keeps the first 1500, each {url, source, rel?, text?}), returned only with link_data=“links” or “both” (here, on datapulse_scrape_submit with wait=true and on datapulse_domain_overview); link_data defaults to “domains”, so by default only link_domains comes back. List and bulk responses carry link_domains only
- Results scraped before 2026-07-02 lack both fields (absent ≠ no links; a rendered page with none has links: []); re-scrape with force=true
redirect_chain: the main-frame navigation the browser followed, one {url, status, location?, kind, error?} per document response; kind is http (a 30x), client (meta refresh or script), final (the rendered page) or error (navigation died there). Present on every read, failed rows included; absent on rows written before 2026-10-06 and when nothing was fetched (a DNS failure). final_url is the page as captured, so a script’s URL rewrite after load (google.com’s ?zx=) shows in final_url but not in the chain’s final hop.
Per-connection fields (single-result reads only): final_url, redirected, tls (absent for a plain-HTTP fetch), server_addr and quic. A failed quic probe carries error and, since 2026-09-15, reason (timeout, tls_rejected, resolve_failed, …) with tls_alert and tls_alert_code when the server sent a TLS alert.
Options:
- include_dom: Include full cleaned HTML DOM. WARNING: typically 10KB-500KB, can exceed 1MB. Only use for specific analysis (e.g., impersonation detection).
For usage guidance, call datapulse_help(topic="scraping")
Parameters
| Parameter | Type | Description |
|---|---|---|
url_hashrequired | string | The SHA-256 hash of the normalized URL. Returned by datapulse_scrape_submit. Min length: 64Max length: 64Pattern: ^[a-fA-F0-9]{64}$ |
include_dom | boolean | Include the cleaned HTML DOM in the response. WARNING: Typically 10KB-500KB, can exceed 1MB. Only use when DOM analysis is needed. Default false. Default: false |
link_data | string | Which link structures the result carries: none, domains (link_domains only; the default), links (the full links array only) or both. Ask for links or both only when you need every URL — the links array runs to hundreds of entries and 100+ KB on a commercial site (903 links, 128 KB for muenchen.de). Default: "domains"nonedomainslinksboth |
Input schema (JSON)
{
"additionalProperties": false,
"properties": {
"include_dom": {
"default": false,
"description": "Include the cleaned HTML DOM in the response. WARNING: Typically 10KB-500KB, can exceed 1MB. Only use when DOM analysis is needed. Default false.",
"type": "boolean"
},
"link_data": {
"default": "domains",
"description": "Which link structures the result carries: none, domains (link_domains only; the default), links (the full links array only) or both. Ask for links or both only when you need every URL — the links array runs to hundreds of entries and 100+ KB on a commercial site (903 links, 128 KB for muenchen.de).",
"enum": [
"none",
"domains",
"links",
"both"
],
"type": "string"
},
"url_hash": {
"description": "The SHA-256 hash of the normalized URL. Returned by datapulse_scrape_submit.",
"maxLength": 64,
"minLength": 64,
"pattern": "^[a-fA-F0-9]{64}$",
"type": "string"
}
},
"required": [
"url_hash"
],
"type": "object"
}Generated from the live server (DataPulse MCP 1.0.0) on October 7, 2026.