# Stream vs URL Watch

> Firehose monitors the web two ways — Stream matches the whole crawl against your rules, URL Watch tracks a fixed list of pages. Pick the right one.

Firehose gives you two ways to monitor the web, and they answer different questions:

- **[Stream](/stream/overview)** — "Tell me about **any** page on the web that matches this pattern."
- **[URL Watch](/url-watch/overview)** — "Tell me when **these specific pages** I already know about change."

The difference comes down to one thing: **who decides which pages get looked at.**

## How each one sees pages

A **Stream tap** sits on top of Firehose's continuous web crawl. It evaluates pages **as the crawler
reaches them**, on the crawler's own schedule — the crawler decides when any given page is visited. That
makes it ideal for discovery across the whole web, and the wrong tool for watching one page you care
about, because nothing makes the crawler fetch that page on demand.

**URL Watch** works the other way around. You hand it a **specific list of URLs**, and it re-crawls
each one on a **cadence you choose**, recording the diff between crawls. The pages looked at are
exactly the ones you named, on a schedule you set.

## At a glance

| | Stream | URL Watch |
| --- | --- | --- |
| What you monitor | The whole web, by pattern | A fixed list of URLs you choose |
| What you define | Rules (queries) on a tap | URLs + a crawl frequency |
| What triggers a check | The crawler reaching a page | Your chosen cadence |
| How you receive results | Live SSE stream (and the dashboard feed) | Crawl history with diffs in the dashboard |
| Billing | Per match | Per check, against a monthly quota |

## A common pitfall

Pointing a Stream rule at one URL (`url:"https://example.com/pricing"`) does **not** make Firehose
fetch that page — it only narrows *which crawled pages* match. If the crawler hasn't re-crawled that
page, a change to it never reaches your stream. To watch a known page for changes, that's exactly what
[URL Watch](/url-watch/overview) is for.

## Next steps

<CardGrid>
  <Card title="Stream overview" href="/stream/overview">
    Monitor the whole web for a pattern with rules and a live stream.
  </Card>
  <Card title="URL Watch overview" href="/url-watch/overview">
    Track a specific list of URLs for changes on a schedule.
  </Card>
</CardGrid>
