scrape
Extracción multiformato unificada con una sola descarga. Pida a una única carga de página markdown, HTML, HTML sin procesar, texto, enlaces, metadatos, una captura de pantalla o JSON: todos los formatos solicitados se sirven desde la misma descarga, y un formato que falle se devuelve como aviso en lugar de hacer fallar toda la llamada.
Casos de uso
Una llamada en lugar de cuatro
Obtenga markdown, enlaces y metadatos de una página en una sola solicitud en lugar de encadenar fetch_url, extract_links y extract_metadata.
Markdown listo para LLM
Solicite markdown con onlyMainContent activado para enviar texto de página limpio y sin plantilla directamente a una canalización RAG o a un prompt.
Instantáneas de archivo
Pida rawHtml y screenshot juntos para capturar tanto el estado legible por máquina como el estado visual de una página.
Canalizaciones resilientes
Los warnings por formato dejan pasar un resultado parcial: una captura de pantalla fallida nunca descarta el markdown que ya pagó.
Endpoint
/api/v1/tools/scrapeParameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
url | string | Required | - | La URL que se va a extraer (debe incluir el protocolo: http:// o https://) Example: https://example.com |
formats | array | Optional | ["markdown"] | Formatos de salida que se devolverán. Uno o varios de `markdown`, `html`, `rawHtml`, `text`, `links`, `metadata`, `screenshot`, `json-schema`. Example: ["markdown", "links", "metadata"] |
onlyMainContent | boolean | Optional | true | Elimina la navegación, los encabezados y los pies de página para devolver solo el contenido principal del artículo. Example: true |
Ejemplos de solicitud
cURL
curl -X POST https://crawlforge.dev/api/v1/tools/scrape \
-H "X-API-Key: cf_test_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com",
"formats": ["markdown", "links", "metadata"],
"onlyMainContent": true
}'TypeScript
const response = await fetch('https://crawlforge.dev/api/v1/tools/scrape', {
method: 'POST',
headers: {
'X-API-Key': process.env.CRAWLFORGE_API_KEY!,
'Content-Type': 'application/json',
},
body: JSON.stringify({
url: 'https://example.com',
formats: ['markdown', 'links', 'metadata'],
onlyMainContent: true,
}),
});
const data = await response.json();
if (data.success) {
console.log('Markdown:', data.data.markdown);
console.log('Links found:', data.data.links.length);
console.log('Title:', data.data.metadata.title);
// A 200 with warnings is a PARTIAL success — some formats came back, others didn't.
if (data.data.warnings.length > 0) {
console.warn('Partial result:', data.data.warnings);
}
console.log('Credits used:', data.credits_used);
console.log('Credits remaining:', data.credits_remaining);
} else {
console.error('Error:', data.error);
}Python
import requests
import os
response = requests.post(
'https://crawlforge.dev/api/v1/tools/scrape',
headers={
'X-API-Key': os.environ['CRAWLFORGE_API_KEY'],
'Content-Type': 'application/json',
},
json={
'url': 'https://example.com',
'formats': ['markdown', 'links', 'metadata'],
'onlyMainContent': True
}
)
data = response.json()
if data['success']:
print(f"Markdown: {data['data']['markdown']}")
print(f"Links found: {len(data['data']['links'])}")
print(f"Title: {data['data']['metadata']['title']}")
# A 200 with warnings is a PARTIAL success — some formats came back, others didn't.
if data['data']['warnings']:
print(f"Partial result: {data['data']['warnings']}")
print(f"Credits used: {data['credits_used']}")
print(f"Credits remaining: {data['credits_remaining']}")
else:
print(f"Error: {data['error']}")Ejemplo de respuesta
{ "success": true, "data": { "url": "https://example.com", "onlyMainContent": true, "formats": [ "markdown", "links", "metadata" ], "markdown": "# Example\n\nMain content scraped from https://example.com.", "links": [ "https://example.com/about", "https://example.com/pricing" ], "metadata": { "title": "Example", "description": "Page at https://example.com" }, "warnings": [] }, "credits_used": 2, "credits_remaining": 998, "processing_time": 412}data.formatsRefleja los formatos que se solicitarondata.markdownContenido principal convertido a markdown (presente cuando se solicita `markdown`)data.linksTodos los enlaces descubiertos en la página (presente cuando se solicita `links`)data.metadataTítulo, descripción y etiquetas meta (presente cuando se solicita `metadata`)data.warningsUna entrada por cada formato que no se pudo producir. Un array vacío significa que todos los formatos solicitados tuvieron éxito.credits_usedCredits descontados por esta solicitud (2 por extracción, sin importar el número de formatos)credits_remainingSu saldo de credits restanteManejo de errores
Entrada no válida (400 Bad Request)
El formato de la URL no es válido, o formats contiene un valor fuera de la lista admitida. Se requiere al menos un formato cuando se envía el campo.
URL bloqueada (403 Forbidden)
El destino se resolvió en una dirección privada, interna o de enlace local y fue rechazado por la protección SSRF. Solo se pueden extraer URLs accesibles públicamente.
Credits insuficientes (402 Payment Required)
Su cuenta no tiene suficientes credits. Compre más credits o mejore su plan.
Límite de velocidad superado (429 Too Many Requests)
Ha superado el límite de velocidad de su plan. Espere un momento o mejore su plan para obtener límites más altos.
data.warnings en cada respuesta. Un 200 con un array warnings no vacío significa que algunos formatos se devolvieron y otros no: trátelo como éxito parcial, no como fallo.Coste en credits
Plan Free: 1,000 credits por única vez = 500 solicitudes
Plan Hobby: 5.000 credits/mes = 2.500 solicitudes (19 USD/mes)
Plan Professional: 50.000 credits/mes = 25.000 solicitudes (99 USD/mes)
Plan Business: 250.000 credits/mes = 125.000 solicitudes (399 USD/mes)