Saltar al contenido
MonitoreoAvanzado3 credits

track_changes

Almacene una instantánea de una página y compare la página en vivo con ella cuando quiera. Obtiene si algo cambió, cuánto, qué líneas se añadieron o eliminaron, y una puntuación de similitud estructural que indica si el marcado en sí fue reconstruido. O pase operation: "monitor" y CrawlForge comprobará la página según un calendario por usted.

Casos de uso

Detecte un scraper a punto de romperse

Una structural_similarity baja significa que el marcado de la página fue reconstruido, que es lo que realmente rompe los selectores: detéctelo antes de que su pipeline de extracción empiece a devolver resultados vacíos.

Vigile páginas de precios de competidores

Limite el alcance a la tabla de precios con selector, compare según su propio calendario y lea las líneas añadidas y eliminadas para ver qué se movió.

Rastree documentos legales y de políticas

Compare términos de servicio, políticas de privacidad o páginas regulatorias y conserve un registro auditable de exactamente qué líneas cambiaron.

Detecte cambios incompatibles en documentación de API

Capture una línea base de la referencia o el changelog de un proveedor y compare antes de cada una de sus versiones.

Verifique que un despliegue cambió solo lo previsto

Capture una línea base antes de publicar, compare después y confirme que la diferencia coincide con el cambio previsto.

Endpoint

POST/api/v1/tools/track_changes
Auth Required
1 solicitud/s en el plan Free
3 credits

Parameters

NameTypeRequiredDefaultDescription
url
stringRequired-
La página que se va a capturar o comparar.
Example: https://competitor.com/pricing
operation
stringOptionalcompare
Uno de `"create_baseline"`, `"compare"` o `"monitor"`. `monitor` crea un [monitor alojado](/docs/api-reference/monitors) para la URL y no cobra nada por la llamada. Cualquier otro valor se rechaza con 400.
Example: compare
selector
stringOptional-
Selector CSS que limita el rastreo a una parte de la página, por ejemplo `.pricing-table`. Las líneas base se almacenan por par (url, selector), de modo que la misma URL puede rastrearse en varios alcances de forma independiente. Devuelve 422 si el selector no coincide con nada.
Example: .pricing-table
update_baseline
booleanOptionalfalse
Solo para `compare`. Después de comparar, sobrescribe la línea base almacenada con el contenido recién obtenido. Úselo para comparación continua, donde cada llamada informa el cambio desde la llamada anterior en lugar de desde la captura original.
Example: false
respect_robots
booleanOptionaltrue
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. Un monitor alojado siempre respeta robots.txt.
Example: true
schedule
stringOptional0 * * * *
Solo para `monitor`. Expresión cron de cinco campos con la que se ejecuta el monitor alojado, evaluada en UTC. Las ejecuciones consecutivas deben estar separadas al menos 5 minutos; de lo contrario, la llamada se rechaza con 400.
Example: */15 * * * *
notify_emails
string[]Optional-
Solo para `monitor`. Hasta 5 direcciones que reciben un correo cuando una comprobación encuentra páginas nuevas, cambiadas, bloqueadas o con error.
Example: ["alerts@example.com"]
webhook_url
stringOptional-
Solo para `monitor`. URL `https` pública que recibe los eventos firmados `monitor.page` y `monitor.check.completed`. Se genera un `webhook_secret` y se devuelve junto con el monitor.
Example: https://example.com/hooks/crawlforge

Operaciones

Cree una línea base una vez y luego compare con ella tantas veces como quiera, o entregue la página a un monitor alojado.

create_baseline
Obtiene la página, la reduce a texto visible normalizado y la almacena con un hash de contenido y una firma estructural. Las líneas base se conservan 90 días por cuenta de API. Ejecute esto primero: comparar sin una línea base devuelve 404.
compare
Obtiene la página de nuevo y la compara línea por línea con la línea base almacenada. Devuelve el porcentaje de cambio, la similitud estructural, los conteos y muestras de las líneas añadidas y eliminadas. Es la operación predeterminada.
monitor
Crea un monitor alojado con el nombre del host de la URL, con este único destino, el schedule (cada hora de forma predeterminada), zona horaria UTC y 30 días de retención, y lo devuelve en data.monitor, incluido el webhook_secret. La llamada en sí no cuesta nada; cada comprobación programada cobra 3 credits por destino comparado, y los destinos bloqueados o con error son gratuitos. Gestiónelo mediante la API de monitores o el panel.

Local o alojado

Un monitor programado se ejecuta en uno de dos lugares, y dónde se ejecuta decide quién tiene que mantener un proceso vivo y cómo se le avisa.

En su máquina: el servidor MCP
operation: "create_scheduled_monitor" en el servidor MCP de CrawlForge guarda el monitor en ~/.crawlforge/monitors y lo dispara dentro del proceso, así que las comprobaciones solo se ejecutan mientras el proceso del servidor está vivo; las ejecuciones perdidas se recuperan al reiniciar, y crawlforge monitor:run-due desde el cron del sistema es la vía garantizada. Notifica por webhook o Slack desde su máquina y nunca envía correo. Cada comprobación local que ejecute cuesta 3 credits.
Alojado: el programador de CrawlForge
Se crea con operation: "monitor" aquí, mediante /api/v1/monitors, o desde el servidor MCP con hosted: true. El propio programador de CrawlForge obtiene, compara y registra cada comprobación sin ningún proceso suyo, y notifica por correo y mediante webhook firmado. 3 credits por destino comparado en cada comprobación, con los destinos bloqueados o con error gratuitos. Gestiónelo desde el panel.

Cómo leer una comparación

Las dos puntuaciones responden preguntas distintas, y la combinación es más útil que cualquiera por separado.

change_percent: cuánto texto se movió
Líneas añadidas más eliminadas como proporción del documento más grande, de 0 a 100. Alto en cualquier actualización real de contenido; también alto en páginas con marcas de tiempo, contadores de visitas o testimonios rotativos, así que espere un piso ruidoso en páginas dinámicas.
structural_similarity: ¿sigue siendo el mismo marcado?
Puntuación de 0 a 1 que compara el vocabulario de etiquetas y la profundidad de anidamiento. Un change_percent alto con una structural_similarity alta es el mismo diseño con texto nuevo. Una puntuación baja significa que la página fue reconstruida, y eso es lo que rompe los selectores.

Ejemplos de solicitud

terminalBash
# Step 1: capture the baseline (once per url + selector, kept 90 days)
curl -X POST https://crawlforge.dev/api/v1/tools/track_changes \
  -H "X-API-Key: cf_test_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://competitor.com/pricing",
    "operation": "create_baseline",
    "selector": ".pricing-table"
  }'

# Step 2: compare against it, as often as you like
curl -X POST https://crawlforge.dev/api/v1/tools/track_changes \
  -H "X-API-Key: cf_test_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://competitor.com/pricing",
    "operation": "compare",
    "selector": ".pricing-table"
  }'

# Rolling comparison: diff against the previous call, not the original capture
curl -X POST https://crawlforge.dev/api/v1/tools/track_changes \
  -H "X-API-Key: cf_test_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://competitor.com/pricing",
    "operation": "compare",
    "selector": ".pricing-table",
    "update_baseline": true
  }'

# Hosted monitor: CrawlForge checks the page every 15 minutes on its own
# scheduler and posts signed webhooks. Creating it costs nothing; each check
# bills 3 credits per compared target.
curl -X POST https://crawlforge.dev/api/v1/tools/track_changes \
  -H "X-API-Key: cf_test_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://competitor.com/pricing",
    "operation": "monitor",
    "selector": ".pricing-table",
    "schedule": "*/15 * * * *",
    "webhook_url": "https://example.com/hooks/crawlforge"
  }'

Ejemplo de respuesta

200 OK1,180ms
{
"success": true,
"data": {
"operation": "compare",
"url": "https://competitor.com/pricing",
"selector": ".pricing-table",
"changed": true,
"change_percent": 12.5,
"structural_similarity": 0.9713,
"added_count": 4,
"removed_count": 2,
"added_samples": [
"Pro $79 / month",
"Includes 50,000 credits",
"Enterprise",
"Contact sales"
],
"removed_samples": [
"Pro $99 / month",
"Includes 25,000 credits"
],
"baseline_captured_at": "2026-08-01T12:00:00.000Z",
"compared_at": "2026-08-26T14:30:00.000Z",
"baseline_updated": false
},
"credits_used": 3,
"credits_remaining": 997,
"processing_time": 1180
}
Field Descriptions
data.changedVerdadero cuando el hash del contenido difiere del de la línea base: la comprobación más rápida si solo necesita un sí o un no.
data.change_percentLíneas añadidas más eliminadas como porcentaje del documento más grande, de 0 a 100.
data.structural_similaritySimilitud de marcado de 0 a 1. Null cuando la línea base es anterior a este campo.
data.added_samplesHasta 20 líneas añadidas, cada una truncada a 500 caracteres. No es la diferencia completa: use added_count para el total real.
data.removed_samplesHasta 20 líneas eliminadas, con los mismos límites que added_samples.
data.baseline_updatedSi esta llamada sobrescribió la línea base, reflejando el parámetro update_baseline.
credits_used3 credits, cobrados por llamada exitosa. Las llamadas fallidas no se cobran.

Manejo de errores

No se encontró línea base (404 BASELINE_NOT_FOUND)

Llamó a compare antes de almacenar una línea base, o la línea base de 90 días expiró. Ejecute create_baseline para ese par exacto (url, selector) primero.

El selector no coincidió con nada (422 SELECTOR_NOT_FOUND)

El selector CSS no devolvió elementos. Verifíquelo contra el marcado en vivo: un selector que funciona en las herramientas de desarrollo después de ejecutarse JavaScript puede no existir en el HTML sin procesar que obtiene este endpoint.

Destino inalcanzable (502 FETCH_FAILED)

La página devolvió un estado distinto de 2xx. Los sitios con protección antibots suelen terminar aquí: obténgalos con stealth_mode en su lugar.

Parámetros inválidos (400 VALIDATION_ERROR)

URL mal formada, o un operation fuera de create_baseline, compare y monitor. El arreglo details de la respuesta nombra el campo que falla. Un schedule que no sea una expresión cron de cinco campos, o que se dispare con más frecuencia que cada 5 minutos, se rechaza con el mismo código.

Almacenamiento no disponible (503 STORAGE_UNAVAILABLE)

No se pudo acceder al almacenamiento de líneas base. Reintente: no se cobran credits por llamadas fallidas.

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.

Costo en credits

3 credits
3 credits por llamada
Tanto create_baseline como compare cuestan 3 credits. Las llamadas fallidas no se cobran. Llamar a monitor no cuesta nada; el monitor alojado que crea cobra 3 credits por destino comparado en cada comprobación programada, y los destinos bloqueados o con error son gratuitos. Con compare según su propio calendario, la frecuencia de sus comparaciones (y por tanto su costo) está totalmente bajo su control.

Desglose de costos:

create_baseline: 3 credits, una vez por par (url, selector), válido 90 días

compare: 3 credits por llamada

monitor: 0 credits al crearlo; 3 credits por destino comparado en cada comprobación programada

Ejemplo de costo de sondeo, por URL:

Cada hora: 24 llamadas/día = 72 credits/día

Cada 6 horas: 4 llamadas/día = 12 credits/día

Diario: 1 llamada/día = 3 credits/día

Recomendaciones por plan:

Plan Free: 1.000 credits de prueba únicos = unas 5 URL comparadas cada 6 horas durante un mes

Plan Hobby: 5.000 credits/mes = unas 13 URL comparadas cada 6 horas ($19/mes)

Plan Professional: 100.000 credits/mes = unas 276 URL comparadas cada 6 horas ($99/mes)

Herramientas relacionadas