Sources return nothing
Two different symptoms, two different causes:
| Outcome | Meaning |
|---|---|
collection-failed |
Every source threw an error. Something is broken or unreachable. |
no-candidates |
Sources ran fine and returned nothing. Usually extraction, not connectivity. |
The run record stores a per-source error message for the first case, and collection counts (attempted, collected, extracted, failed) for both.
collection-failed — errors
Section titled “collection-failed — errors”| Error text | Cause | Fix |
|---|---|---|
404, 403 |
The URL moved, or the site blocks automated fetches | Update the URL; try the feed or a mirror |
UND_ERR_CONNECT_TIMEOUT, ETIMEDOUT |
The site is slow or down | Usually transient — the watch stays due and retries at the next opportunity |
ENOTFOUND |
Bad hostname | Fix the URL |
| Anything mentioning legacy renegotiation or SSL | An old portal with outdated TLS | Set hints: { legacyTls: true } on that source |
TAVILY_API_KEY is required |
A search source with no key configured |
Add the key, or change the source type |
no-candidates — nothing extracted
Section titled “no-candidates — nothing extracted”This is the JavaScript problem in most cases.
Work through these in order:
1. Look at what a plain fetch returns.
curl -sL "https://example.com/notices" | head -c 2000If the interesting text is not in that output, Watcher cannot see it either — it does not run a browser.
2. Enable the reader tier. It renders JavaScript-heavy pages into clean text:
- type: page value: "https://example.com/notices" hints: { reader: true }It is opt-in per source because it draws on a shared free tier.
3. Find a better source. In order of preference: an RSS feed, a JSON or API
endpoint the page itself calls, a printer-friendly or archive version, or a
search source that finds the news wherever it is published.
4. For feeds that only publish a summary, fetch the linked article too:
- type: rss value: "https://example.com/feed.xml" hints: { followLink: true }Checking extraction health over time
Section titled “Checking extraction health over time”GET /collection/stats — and the panel’s collection dashboard — aggregate recent
runs into attempted, collected, extracted and an extraction rate. A rate well
below 1 means items are being collected but yielding too little text, which is
precisely the JavaScript-portal symptom.
Search sources returning nothing
Section titled “Search sources returning nothing”- The query is too narrow. Test it by hand in a search engine.
officialDomainspins results to those domains — if the news is published elsewhere, the search cannot see it.recencyDaysis too tight for a slow-moving story.
The panel’s draft preview (POST /watches/draft/preview) runs the search once
and shows you the top results, which is the fastest way to test a query without
waiting for a run.