Skip to main content
Use this when you have specific URLs and need to retrieve their full HTML content — for content extraction, data collection, SEO analysis, or change tracking. The Web Fetch API accepts a list of URLs and returns the page title and full HTML content for each. You can fetch up to 10 URLs in a single request. Every request goes to the same endpoint:
The endpoint path is /web/enrich/live (not /web/fetch/live) because it follows the Crustdata convention where “enrich” means adding data to a known identifier — in this case, enriching a URL with its page content.
Pricing: 1 credit per page.
Default rate-limit is 10 requests per minute. Send an email to gtm@crustdata.co to discuss higher limits if needed for your use case.

Request body

Response body

The response is an array (not an object) — one entry per URL in your request.
Timestamps: Fetch timestamps are in seconds. Search timestamps are in milliseconds. Account for this when comparing timestamps across endpoints.

Fetch a single URL

The simplest request fetches one URL and returns its HTML content.
The content field is trimmed here. It contains the full HTML of the fetched page.
Extract: Parse content using an HTML parser (BeautifulSoup for Python, Cheerio for Node.js) to extract specific elements like text, links, or metadata.

Examples

Ready-to-copy patterns for Web Fetch. Each example shows a real request, the response, and what to extract.
Pass up to 10 URLs to fetch their content in parallel.
The response array order may differ from the request order. Match successful results by their url field, not by array index.
When some URLs succeed and others fail, the request still returns 200. Failed URLs have success: false with all other fields as null.

Correlating failures to input URLs

Failed entries have url: null, so you cannot directly identify which input URL failed. To correlate failures:
  1. Track the URLs you sent.
  2. Collect the url values from all successful entries.
  3. Any input URL not in the successful set is the one that failed.
Always check the success field for each entry in the response array. Build your parsing logic to handle both successful and failed entries gracefully.
Some websites use Cloudflare to block automated requests. Set human_mode: true to attempt a browser-like fetch path for these pages.
Cloudflare bypass is not guaranteed. Some sites have additional protections that may still block the request.
The content field returns raw HTML. Here are common next steps:

Request parameter reference

Response fields reference

The response is a top-level array. Each item corresponds to one URL in your request.
Timestamps: Fetch timestamps are in seconds. Search timestamps are in milliseconds. Account for this when comparing timestamps across endpoints.
Two kinds of failure, two places to check:
  • Request-level errors (400, 401) — the entire request failed. You get an error object, not an array. Caused by missing fields, empty arrays, or bad auth.
  • Per-URL failures within a 200 — individual entries with success: false and null fields. Caused by unreachable URLs, timeouts, or bot protection.
Always check the HTTP status first, then check success for each entry in the array.

Error handling

Fetch returns request-level errors for invalid input or auth failures. These are separate from per-URL success: false entries within a 200 response.

Common gotchas


API reference summary

See the full API reference for the complete OpenAPI schema.

What to do next

  • Search then fetch — see Web Search examples for search-then-fetch workflow patterns.
  • Find URLs to fetch — use Web Search to find URLs for downstream fetching.