Web Page Extraction API

You already have the URLs — now get the text. POST /v1/extract fetches readable content from 1-20 public URLs in one call: no search runs, no answer is generated, and every failed URL is reported separately and refunded. Use it to feed pages into your own RAG pipeline, citation checker or content workflow.

What it does

1

One call, up to 20 URLs

Send an array of 1-20 public HTTP(S) URLs (each up to 2,048 characters) and receive extracted raw_content for every page that succeeds.

2

Plain extracted text, not HTML

results[] items carry url and raw_content — readable text ready for chunking or quoting, not markup to clean up yourself.

3

Per-URL failures are explicit

A failed URL lands in failed_results[] with its own error message. A partially or fully failed batch can still return HTTP 200 — inspect the array instead of guessing.

4

Pay only for what you get

Credits are deducted before fetching at 1 credit per URL; failed URLs are refunded automatically, and if every URL fails the whole charge is refunded.

5

No LLM steps, no result cache

Extract runs no summarization or reranking and does not use the search result cache — the price is the fetch, not a model call.

6

Guarded fetching

Private and reserved addresses (intranets, localhost, link-local ranges) are refused before any network call, and redirects are re-validated hop by hop.

Request contract

POST /v1/extract (legacy POST /extract) accepts a JSON body:

POST /v1/extract request body (application/json)
FieldDescription
urlsRequired array of 1–20 URLs; each URL is limited to 2,048 characters. Only public HTTP(S) URLs are allowed.

Response contract

200 response body
FieldDescription
results[]Successful items contain url and raw_content (extracted text, not HTML).
failed_results[]Failed items contain url and error. A partial or fully failed extraction can still return HTTP 200; inspect this array.

A batch where every URL fails still answers 200 with an empty results array — read failed_results to see why. The whole charge is refunded in that case; partially failed batches are refunded per URL. Extraction runs no summarization or reranking, does not read the search result cache, and refuses private or reserved addresses before any network call.

Cost & refunds

Default: 1 credit / URL; failed URLs refunded. Credits are deducted before fetching. Failed URLs are refunded; if every URL fails, the whole charge is refunded. Extract does not run LLM summarization or reranking and does not use the search result cache.

Example

One call, two URLs — successful extractions in results, failures in failed_results with their own error messages:

curl -X POST "https://searchpipe.tech/v1/extract" \
  -H "Authorization: Bearer sp-YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "urls": [
    "https://fastapi.tiangolo.com/tutorial/"
  ]
}'

Extraction FAQ

When should I use Extract instead of Search?

Use Search when you have a question and need sources; use Extract when you already know which pages to read. Extraction returns the full readable text of the URLs you supply — it never runs a query, so there is no retrieval step to pay for or go wrong.

What counts as a failed URL?

A URL fails when the page cannot be reached or read: timeouts, DNS or TLS errors, non-2xx responses, empty extractions or SSRF-guard refusals for non-public addresses. Failures are refunded per URL; a batch where every URL fails is refunded in full.

Is there a size limit per page?

Yes. Downloads are bounded per page and the extracted text is what fits that bound — very large documents are truncated rather than rejected, and the URL still counts as succeeded.

Can I use Extract through the MCP server?

No. Extraction is a REST-only endpoint (POST /v1/extract, legacy POST /extract). The hosted MCP server exposes the search and verification tools; batch extraction stays on the REST API by design.

How much does Extract cost?

1 credit per URL by default. Failed URLs are refunded automatically, so a batch's net cost is the number of pages actually extracted. There is no separate depth tier and no cache-hit billing.