scrape_template
20 extractores predefinidos: sitios populares, seis bolsas de empleo ATS leídas a través de la API pública documentada de cada plataforma, y APIs gubernamentales sin clave. Sin esquema, sin selectores, sin LLM: pase un nombre de plantilla con una URL o con params. 1 credit por llamada, sin importar cuántos registros vuelvan.
Casos de uso
Datos rápidos de comercio electrónico
Obtenga el precio, la calificación y el stock de un producto de Amazon sin escribir un solo selector.
Agregación de perfiles de desarrolladores
Combine repositorios de GitHub, paquetes de npm y actividad de Stack Overflow en una sola vista de desarrollador.
Monitoreo de redes sociales
Rastree lanzamientos de Product Hunt y Hacker News con un único endpoint por fuente; para Reddit, lea un post con reddit-thread y su árbol de comentarios con reddit_search.
Bolsas de empleo enteras en una sola llamada
Lea todas las vacantes publicadas de la bolsa de Greenhouse, Lever, Ashby, Workable, Recruitee o Teamtailor de una empresa: valores exactos desde la propia API de la plataforma, no extraídos de una página de empleo.
Endpoint
/api/v1/tools/scrape_templateParameters
list no necesita ninguna y auto siempre necesita una url. Una plantilla de página necesita una url; un conector de API de plataforma toma params, o una URL de bolsa que él mismo resuelve al endpoint de la API.| Name | Type | Required | Default | Description |
|---|---|---|---|---|
template | string | Required | - | Nombre de la plantilla: una de las 20 plantillas admitidas. Envíe `"auto"` para que la plantilla se elija a partir de la `url`; la respuesta informa el identificador elegido, nunca el literal `"auto"`. Envíe `"list"` para descubrirlas mediante programación. Example: github-repo |
url | string | Optional | - | URL a scrapear. Obligatoria salvo que `template` sea `"list"`, o que esté invocando un conector mediante `params`. Example: https://github.com/mysleekdesigns/crawlforge-mcp |
params | object | Optional | - | Entradas para un conector que lee una API de plataforma en lugar de una página: el identificador de la bolsa para una bolsa de empleo (`company`), `store` y `collection` para `shopify-collection`, `vin` para `nhtsa-vin`, los propios campos de búsqueda del registro para `npi-provider`. Los extras específicos de cada conector también van aquí: `content: true` de Greenhouse, `details: true` de Workable, `skip`/`limit` de Lever, `per_page`/`offset` de Teamtailor. Si falta una entrada obligatoria, la solicitud se rechaza nombrando el parámetro. Example: { "company": "stripe" } |
timeout | number | Optional | 15000 | Tiempo de espera de la solicitud en milisegundos (5000–60000). Example: 15000 |
respect_robots | boolean | Optional | true | Respeta el robots.txt del sitio de destino. Con el valor `true`, una ruta que robots.txt no permita a `CrawlForge` se rechaza con un 403 antes de descargar nada y no se cobran credits. Póngalo en `false` solo para destinos con los que tenga su propio acuerdo: la respuesta incluye entonces una entrada `warnings` y la anulación queda registrada en su API key. Example: true |
Plantillas: páginas y productos
20 plantillas en tres grupos. Cada una devuelve una forma JSON normalizada y ajustada a su fuente.
amazon-productshopify-productsource: json-ld y con un aviso; el stock por variante, los precios de comparación y los nombres de las opciones no están en JSON-LD, así que esos campos son nullshopify-collectionproducts.json de la tienda, con el mismo precio y stock autorizados que shopify-product devuelve para un artículo. 30 por página de forma predeterminada, 250 como máximogithub-repoyoutube-videoreddit-threadhacker-news-front-pageproducthunt-launchstackoverflow-questionnpm-packagePlantillas: bolsas de empleo
Seis sistemas de seguimiento de candidatos, leídos cada uno a través del endpoint que esa plataforma documenta para uso público y sin autenticación. Los seis se normalizan sobre una única forma de empleo, así que dos bolsas se unen sin mapeo por fuente — la guía de APIs de bolsas de empleo cubre la forma y el razonamiento.
greenhouse-jobscontent: truelever-postingsskip/limitashby-jobsdescriptions: trueworkable-jobsdetails: truerecruitee-offersteamtailor-jobstt:. 100 vacantes salvo que per_page indique otra cosaPlantillas: APIs gubernamentales
APIs federales de EE. UU. gratuitas y sin clave, documentadas por las agencias que las publican.
nhtsa-vinraw. Se aceptan VIN parciales; los códigos de error de vPIC se exponen en lugar de silenciarsenpi-providerLos conectores de lista devuelven muchos registros en una sola llamada
Un conector que lee un endpoint de listado devuelve items y count dentro de data en lugar de un único registro. shopify-collection y los seis conectores de bolsas de empleo funcionan así.
- Cada registro de empleo lleva los mismos doce campos —
id,title,url,location,department,team,employment_type,remote,published_at,updated_at,description,source— y un campo que la plataforma no publica esnull, nunca una suposición. - Pase el identificador de la bolsa en
params, o pase una URL de bolsa y el conector resolverá por sí mismo el endpoint de la API. - Greenhouse, Workable y Ashby hacen opcionales las descripciones porque dominan la carga útil: una bolsa grande de Greenhouse pasa de 349 KB a 4,2 MB con
content: true, y la bolsa Ashby de 767 vacantes de OpenAI ocupa 5,9 MB condescriptions: true. - El costo es de 1 credit fijo por llamada, sin importar cuántos registros vuelvan.
{ "template": "list" } (sin necesidad de url) para obtener la lista completa con el mode de cada entrada: list para un conector que devuelve muchos registros en una sola llamada, entity para uno que devuelve un único registro. Útil para mantener sincronizados los SDK de cliente.Deliberadamente no publicado
smartrecruiters-postings no está: SmartRecruiters documenta públicamente su Posting API, pero api.smartrecruiters.com/robots.txt lo prohíbe todo para todos los agentes salvo LinkedInBot (verificado el 2026-08-28), y no anulamos robots.txt para alcanzarlo. El endpoint wday/cxs de Workday es el endpoint interno del propio sitio de empleo y no una API pública documentada, así que tampoco lo lee ningún conector. La guía de APIs de bolsas de empleo expone qué más queda fuera del alcance, y por qué.Ejemplos de solicitud
cURL — github-repo
curl -X POST https://crawlforge.dev/api/v1/tools/scrape_template \
-H "X-API-Key: cf_test_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"template": "github-repo",
"url": "https://github.com/mysleekdesigns/crawlforge-mcp"
}'TypeScript — amazon-product
const response = await fetch('https://crawlforge.dev/api/v1/tools/scrape_template', {
method: 'POST',
headers: {
'X-API-Key': process.env.CRAWLFORGE_API_KEY!,
'Content-Type': 'application/json',
},
body: JSON.stringify({
template: 'amazon-product',
url: 'https://www.amazon.com/dp/B08XYZ1234',
timeout: 20000,
}),
});
const data = await response.json();
if (data.success) {
const product = data.data.extracted;
console.log(product.title, product.price, product.rating);
}cURL — descubrir plantillas
curl -X POST https://crawlforge.dev/api/v1/tools/scrape_template \
-H "X-API-Key: cf_test_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{ "template": "list" }'cURL — greenhouse-jobs mediante params
curl -X POST https://crawlforge.dev/api/v1/tools/scrape_template \
-H "X-API-Key: cf_test_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"template": "greenhouse-jobs",
"params": { "company": "stripe" }
}'Ejemplo de respuesta
{ "success": true, "data": { "template": "greenhouse-jobs", "params": { "company": "stripe" }, "data": { "items": [ { "id": "4012345", "title": "Staff Software Engineer", "url": "https://job-boards.greenhouse.io/stripe/jobs/4012345", "location": "Seattle, Washington, United States", "department": null, "team": null, "employment_type": null, "remote": null, "published_at": "2026-08-04T17:12:03.000Z", "updated_at": "2026-08-21T09:44:51.000Z", "description": null, "source": "greenhouse-jobs", "raw_extra": { "internal_job_id": "4098765", "requisition_id": "REQ-1234", "offices": null } } ], "count": 571, "company": "Stripe" }, "template_name": "Greenhouse Job Board", "extracted_at": "2026-08-28T12:00:00.000Z", "fetched_url": "https://boards-api.greenhouse.io/v1/boards/stripe/jobs" }, "credits_used": 1, "credits_remaining": 999, "processing_time": 812}data.data.itemsUn registro por vacante publicada, con la forma de doce campos que comparten todos los conectores de bolsas de empleodata.data.items[0].departmentGreenhouse solo envía los departamentos con `content: true`, así que un registro resumido informa null en lugar de un departamento deducido del títulodata.data.countRegistros en esta respuesta; una fuente que declara un total mayor informa además `total_available`data.template_nameNombre legible de la plantilla que se ejecutódata.fetched_urlEl endpoint realmente leído: aparece siempre que difiere de lo que usted pasó, lo que incluye toda llamada hecha solo con `params`credits_used1 credit fijo por llamada, independientemente de la plantilla o del número de registrosManejo de errores
El conector no pudo construir una solicitud (400 Bad Request)
Un problema de parámetros, rechazado antes de descargar nada y nunca facturado. INVALID_TEMPLATE_PARAMS transmite el mensaje del propio conector nombrando el parámetro que esperaba: el token de la bolsa en job-boards.greenhouse.io/<token>, el subdominio en <company>.recruitee.com. MISSING_URL significa que envió params a una plantilla que lee una página y no tiene forma con params. NO_TEMPLATE_MATCH significa que template: "auto" no reconoció nada en la URL: nombre usted mismo la plantilla o compruébela con template: "list".
Bloqueado por robots.txt (403 Forbidden)
El robots.txt del sitio de destino no permite esta ruta a CrawlForge. Establezca respect_robots: false para anularlo si tiene su propio acuerdo con el destino: la anulación queda registrada en su API key. La anulación no alcanza a un host incluido en la lista de exclusión permanente de CrawlForge, que se rechaza sea cual sea el valor de respect_robots. La comprobación se realiza sobre la URL que la plantilla descarga realmente, que en shopify-product y npm-package es un endpoint legible por máquina del mismo host, no la URL que usted envió.
Costo en credits
Consejo: ¿Necesita un sitio que no es compatible? Use scrape_structured para selectores personalizados (2 credits) o extract_with_llm para extracción con LLM.