# Supervisión de páginas (/es/features/monitoring-page)

<!-- agent-signals: reading_time_min: 4 · est_tokens: 1620 · updated: 2026-07-30 -->
Related: [Búsqueda](/es/features/search.md), [Highlights de búsqueda](/es/features/search-highlights.md), [Índice de investigación](/es/features/research.md), [scraping](/es/features/scrape.md), [Scraping más rápido](/es/features/fast-scraping.md), [Raspado en lote](/es/features/batch-scrape.md)

La supervisión de páginas vigila URL que ya conoces. En cada comprobación se hace scraping de cada URL del objetivo, se compara con la última instantánea guardada y se informa si la página está `same`, `changed`, `new`, `removed` o `error`. Es la opción adecuada para páginas de precios, registros de cambios, páginas de documentación, ofertas de empleo, páginas de estado o cualquier URL conocida en la que un pequeño cambio sea importante.

Esta página cubre el objetivo `scrape`. La programación, los objetivos y la evaluación, el seguimiento de cambios, las notificaciones y los precios se comparten entre todos los tipos de monitor. Consulta la [visión general de la supervisión](/es/features/monitoring).

<div id="create-a-page-monitor">
  ## Crea un monitor de página [#crea-un-monitor-de-página]
</div>

Crea un monitor con un objetivo de `scrape` que incluye una o varias URL explícitas:

<CodeGroup>
  <CodeBlockTabs defaultValue="Python" groupId="curl+node+python">
    <CodeBlockTabsList>
      <CodeBlockTabsTrigger value="Python">
        Python
      </CodeBlockTabsTrigger>

      <CodeBlockTabsTrigger value="Node">
        Node
      </CodeBlockTabsTrigger>

      <CodeBlockTabsTrigger value="cURL">
        cURL
      </CodeBlockTabsTrigger>
    </CodeBlockTabsList>

    <CodeBlockTab value="Python">
      ```python  
      from firecrawl import Firecrawl

      firecrawl = Firecrawl(
        # Los endpoints de supervisión requieren una API key:
        api_key="fc-YOUR-API-KEY",
      )

      monitor = firecrawl.create_monitor(
          name="Hacker News AI monitor",
          schedule={"text": "every 30 minutes", "timezone": "UTC"},
          goal=(
              "Alert when a new Hacker News story related to AI enters the top 10. "
              "Ignore changes to stories that are not about AI. "
              "Do not alert on changes outside the top 10."
          ),
          targets=[
              {
                  "type": "scrape",
                  "urls": ["https://news.ycombinator.com"],
              }
          ],
          notification={
              "email": {
                  "enabled": True,
                  "recipients": ["alerts@example.com"],
                  "includeDiffs": True,
              }
          },
      )

      print(monitor.id)
      ```
    </CodeBlockTab>

    <CodeBlockTab value="Node">
      ```js  
      import Firecrawl from "@mendable/firecrawl-js";

      const firecrawl = new Firecrawl({
        // Los endpoints de supervisión requieren una API key:
        apiKey: "fc-YOUR-API-KEY",
      });

      const monitor = await firecrawl.createMonitor({
        name: "Hacker News AI monitor",
        schedule: { text: "every 30 minutes", timezone: "UTC" },
        goal:
          "Alert when a new Hacker News story related to AI enters the top 10. Ignore changes to stories that are not about AI. Do not alert on changes outside the top 10.",
        notification: {
          email: {
            enabled: true,
            recipients: ["alerts@example.com"],
            includeDiffs: true,
          },
        },
        targets: [
          {
            type: "scrape",
            urls: ["https://news.ycombinator.com"],
          },
        ],
      });

      console.log(monitor.id);
      ```
    </CodeBlockTab>

    <CodeBlockTab value="cURL">
      ```bash  
      curl -s -X POST "https://api.firecrawl.dev/v2/monitor" \
        -H "Authorization: Bearer $FIRECRAWL_API_KEY" \
        -H "Content-Type: application/json" \
        -d '{
          "name": "Hacker News AI monitor",
          "schedule": {
            "text": "every 30 minutes",
            "timezone": "UTC"
          },
          "goal": "Alert when a new Hacker News story related to AI enters the top 10. Ignore changes to stories that are not about AI. Do not alert on changes outside the top 10.",
          "notification": {
            "email": {
              "enabled": true,
              "recipients": ["alerts@example.com"],
              "includeDiffs": true
            }
          },
          "targets": [
            {
              "type": "scrape",
              "urls": ["https://news.ycombinator.com"]
            }
          ]
        }'
      ```
    </CodeBlockTab>
  </CodeBlockTabs>
</CodeGroup>

También puedes crear monitores desde la CLI de Firecrawl:

```bash title="CLI"
firecrawl monitor create --name "Hacker News AI" \
  --schedule "every 30 minutes" \
  --goal "Alert when a new Hacker News story related to AI enters the top 10. Ignore changes to stories that are not about AI. Do not alert on changes outside the top 10." \
  --page https://news.ycombinator.com
```

<div id="scrape-target">
  ## Objetivo de scrape [#objetivo-de-scrape]
</div>

Un objetivo `scrape` requiere `type` y un array `urls` con al menos una URL. Las opciones de scrape se pasan a los trabajos de scrape subyacentes. En los scrapes activados por el monitor, `maxAge` tiene el valor predeterminado `0`, por lo que cada comprobación realiza un scrape nuevo, a menos que establezcas explícitamente un `maxAge` diferente.

```json title="Scrape target"
{
  "type": "scrape",
  "urls": ["https://example.com/pricing"],
  "scrapeOptions": {
    "formats": ["markdown"],
    "maxAge": 0
  }
}
```

<div id="detecting-field-level-changes">
  ## Detectar cambios a nivel de campo [#detectar-cambios-a-nivel-de-campo]
</div>

De forma predeterminada, un monitor de página compara el markdown de la página. Para alertar solo cuando cambie un **campo específico**, como un precio, un titular, un indicador de disponibilidad o los elementos de una lista, añade un formato `changeTracking` en `scrapeOptions` del objetivo. Consulta [Seguimiento de cambios](/es/features/monitoring#change-tracking) para el modo JSON y el modo mixto.

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

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