> ## Documentation Index
> Fetch the complete documentation index at: https://docs.firecrawl.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Supervisión de sitios web

> Rastrea un sitio web de forma programada y detecta cambios en todas las páginas descubiertas

La supervisión de sitios web abarca un sitio completo en lugar de una lista fija de URL. En cada comprobación, se ejecuta un `crawl` para la `url` objetivo, se hace scraping de cada página descubierta y se compara el resultado con la última instantánea conservada. Eso detecta páginas añadidas, modificadas y eliminadas, no solo cambios en páginas que ya habías indicado. Es la opción adecuada para sitios de documentación, blogs, registros de cambios, centros de ayuda y sitios de la competencia.

Esta página trata el objetivo `crawl`. La programación, los objetivos y la evaluación, el seguimiento de cambios, las notificaciones y los precios son comunes a todos los tipos de monitor. Consulta la [descripción general de la supervisión](/es/features/monitoring).

<div id="create-a-website-monitor">
  ## Crear un monitor de sitio web
</div>

Crea un monitor con un objetivo `crawl` para obtener un diff de cada página descubierta en cada rastreo durante cada comprobación:

<CodeGroup>
  ```python Python theme={null}
  from firecrawl import Firecrawl

  firecrawl = Firecrawl(api_key="fc-YOUR-API-KEY")

  monitor = firecrawl.create_monitor(
      name="Docs monitor",
      schedule={"cron": "7-59/15 * * * *", "timezone": "UTC"},
      goal="Notify me when docs pages add, remove, or materially change API behavior",
      targets=[
          {
              "type": "crawl",
              "url": "https://example.com/docs",
              "crawlOptions": {
                  "limit": 100,
                  "maxDiscoveryDepth": 3,
              },
          }
      ],
      webhook={
          "url": "https://example.com/webhooks/firecrawl",
          "events": ["monitor.page", "monitor.check.completed"],
      },
  )

  print(monitor.id)
  ```

  ```js Node theme={null}
  import Firecrawl from "@mendable/firecrawl-js";

  const firecrawl = new Firecrawl({ apiKey: "fc-YOUR-API-KEY" });

  const monitor = await firecrawl.createMonitor({
    name: "Docs monitor",
    schedule: { cron: "7-59/15 * * * *", timezone: "UTC" },
    webhook: {
      url: "https://example.com/webhooks/firecrawl",
      events: ["monitor.page", "monitor.check.completed"],
    },
    goal: "Notify me when docs pages add, remove, or materially change API behavior",
    targets: [
      {
        type: "crawl",
        url: "https://example.com/docs",
        crawlOptions: {
          limit: 100,
          maxDiscoveryDepth: 3,
        },
      },
    ],
  });

  console.log(monitor.id);
  ```

  ```bash cURL theme={null}
  curl -s -X POST "https://api.firecrawl.dev/v2/monitor" \
    -H "Authorization: Bearer $FIRECRAWL_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "name": "Docs monitor",
      "schedule": {
        "cron": "7-59/15 * * * *",
        "timezone": "UTC"
      },
      "webhook": {
        "url": "https://example.com/webhooks/firecrawl",
        "events": ["monitor.page", "monitor.check.completed"]
      },
      "goal": "Notify me when docs pages add, remove, or materially change API behavior",
      "targets": [
        {
          "type": "crawl",
          "url": "https://example.com/docs",
          "crawlOptions": {
            "limit": 100,
            "maxDiscoveryDepth": 3
          }
        }
      ]
    }'
  ```
</CodeGroup>

<div id="crawl-target">
  ## Objetivo de `crawl`
</div>

Un objetivo de `crawl` requiere `type` y una sola `url`. Usa `crawlOptions` para definir el comportamiento del crawl y `scrapeOptions` para indicar cómo se extrae cada página descubierta:

```json Crawl target theme={null}
{
  "type": "crawl",
  "url": "https://example.com/docs",
  "crawlOptions": {
    "limit": 100,
    "includePaths": ["/docs"]
  },
  "scrapeOptions": {
    "formats": ["markdown"]
  }
}
```

Campos comunes de `crawlOptions`:

* `limit`: Número máximo de páginas que una comprobación rastreará.
* `maxDiscoveryDepth`: Cuántos niveles de enlaces, a partir de la `url` inicial, se recorrerán para descubrir páginas.
* `maxDepth`: Profundidad máxima de rastreo.
* `includePaths`: Supervisa solo las URL que coincidan con estos patrones de ruta (por ejemplo, `/docs`).
* `excludePaths`: Omite las URL que coincidan con estos patrones de ruta.

Al igual que con los monitores de página, los scrape activados por monitores usan `0` como `maxAge` predeterminado, por lo que en cada comprobación se vuelven a extraer las páginas descubiertas, a menos que configures un `maxAge` distinto en `scrapeOptions`.

<div id="what-each-check-reports">
  ## Lo que informa cada comprobación
</div>

Una comprobación de rastreo coteja cada página descubierta con la comprobación anterior y registra un estado por página:

* `same`: La página se descubrió de nuevo y no cambió.
* `changed`: La página se descubrió de nuevo y cambió.
* `new`: La página se descubrió por primera vez.
* `removed`: Una página de la comprobación anterior ya no se volvió a descubrir.
* `error`: No se pudo comprobar la página.

Para generar alertas sobre campos estructurados específicos en las páginas rastreadas, añade un formato `changeTracking` a `scrapeOptions`. Consulta [Seguimiento de cambios](/es/features/monitoring#change-tracking).

<div id="shared-configuration">
  ## Configuración compartida
</div>

* [Programación](/es/features/monitoring#schedules): frecuencia con cron o en lenguaje natural, mínimo 5 minutos.
* [Objetivos y evaluación](/es/features/monitoring#goals-and-judging): alerta solo ante cambios relevantes.
* [Notificaciones](/es/features/monitoring#notifications): entrega por webhook y correo electrónico.
* [Resultados de las comprobaciones](/es/features/monitoring#check-results): inspecciona cada comprobación y sus diferencias por página.
* [Precios](/es/features/monitoring#pricing): 1 crédito por cada página descubierta en cada comprobación, más evaluación opcional.
