How to run Urlwatch on a schedule with cron
Schedule urlwatch with cron, configure jobs and notifications, and troubleshoot unattended runs. Includes a ScreenshotNeo option for website screenshots.
To run Urlwatch automatically, configure its jobs, then add the urlwatch command to the appropriate user’s crontab. Cron supplies the schedule; Urlwatch performs its normal check each time it runs. The official Urlwatch guidance recommends checking no more often than every 30 minutes, using */30 * * * * for that interval. Urlwatch quick start and scheduling guidance
1. Run Urlwatch and configure jobs
Run urlwatch once before scheduling it. Then open the job editor:
urlwatch
urlwatch --edit
The job list is stored in urls.yaml. Choose a job type based on the content you need to monitor:
- URL retrieval: Use this for ordinary pages when the response contains the relevant content.
- Browser job: Use browser navigation when the content only appears after JavaScript runs. Browser jobs use substantially more resources, so prefer ordinary URL retrieval when it works.
- Shell command: Use this to monitor the output of a command.
See the Urlwatch jobs documentation for job formats and options. Configure and manually invoke each job as appropriate before relying on unattended runs.
2. Configure settings and change reporting
Open Urlwatch’s settings and reporter configuration when you need to adjust them:
urlwatch --edit-config
Urlwatch compares each job’s current output with its previous result. When it finds differences, enabled reporters handle the change. By default, change information is written to standard output. With cron, where that output goes depends on the scheduler environment and its configuration; do not assume it will be delivered as email. Configure a reporter if you need a separate notification route. Some reporters require additional dependencies. The reporters manual describes the default output and reporter setup.
3. Add a cron schedule
Edit the crontab for the user whose Urlwatch configuration and files should be used:
crontab -e
Add one line with five schedule fields followed by the command. For the documented 30-minute interval:
*/30 * * * * urlwatch
The fields are minute, hour, day of month, month, and day of week. Here, */30 means minute 0 and minute 30 of each hour; the asterisks allow every hour, day, month, and weekday. Cron controls how often Urlwatch runs. Choose a less frequent schedule if you do not need changes detected as quickly. Urlwatch’s official recommendation is not to check more frequently than every 30 minutes.
Use an explicit executable path when needed
Cron may use a different environment and command path from your interactive shell. If it cannot find urlwatch, find the executable path in the environment where Urlwatch is installed and put that path in the crontab entry. For example, the form is:
*/30 * * * * /path/to/urlwatch
Replace the example path with the actual path for your installation. If Urlwatch depends on a particular runtime environment or configuration location, ensure the scheduled command runs with those same requirements. The exact setup is installation- and system-dependent.
Choose how cron output is handled
Decide where standard output and errors from scheduled runs should go. Cron’s handling varies by scheduler configuration, so verify it in your environment. If you want Urlwatch changes sent through a notification service, configure a Urlwatch reporter and confirm its required dependencies and credentials. A reporter is separate from the cron timing.
4. Check unattended behavior
- Run
urlwatchinteractively as the same user whose crontab you edited. - Confirm the jobs are configured in that user’s Urlwatch data and configuration.
- Confirm the cron command can locate Urlwatch and any dependencies it needs.
- Confirm the selected output route is usable: inspect scheduler output or verify the configured reporter’s destination.
- After the scheduled time, review the output or notification path for errors and expected change reports.
Cron only invokes the check. Urlwatch still needs its normal job configuration, stored comparison data, and any required browser or reporter dependencies.
Job and schedule choices
| Choice | Use it when | Trade-off |
|---|---|---|
| URL job | The needed content is available from ordinary URL retrieval. | Usually the simplest choice for a page that does not require browser rendering. |
| Browser job | The content depends on JavaScript-rendered page behavior. | More resource-intensive than ordinary retrieval. |
| Shell command | You want to track command output rather than retrieve a page. | The command and its dependencies must be available to the scheduled user. |
| 30-minute schedule | You want the interval shown in Urlwatch’s official example. | Urlwatch recommends not checking more frequently than this. |
| Less frequent schedule | Slower change detection is acceptable. | Changes may take longer to be noticed. |
Common cron problems
| Symptom | Likely cause | What to do |
|---|---|---|
| The job works in a shell but not from cron. | Cron may have a different command path or environment. | Use the Urlwatch executable’s actual path and check the runtime and dependencies expected by your installation. |
| No notification arrives. | Urlwatch’s default change output is standard output, and cron’s output handling depends on its configuration. | Inspect the scheduler’s configured output route or set up a Urlwatch reporter and verify its dependencies and destination. |
| The run reports missing browser support or fails on a dynamic page. | The job needs browser navigation and its required dependencies, or ordinary retrieval may be sufficient. | Use a browser job only when JavaScript rendering is needed; ensure its dependencies are available to the scheduled user. Otherwise use a URL job. |
| A job runs but does not report a change. | Urlwatch reports differences against its previous result; the current output may not differ, or the job may not capture the content you intended. | Review the job definition and its retrieved output, then confirm the reporter is enabled for changes. |
| The schedule runs more often than intended. | The cron expression does not match the desired interval. | Check the five fields in order: minute, hour, day of month, month, weekday. The documented half-hour expression is */30 * * * *. |
Performance, reliability, and cost
Each cron invocation runs Urlwatch’s normal checks, so the chosen interval affects how often jobs retrieve their targets. Browser jobs are more resource-intensive than ordinary URL jobs; avoid using them when URL retrieval gets the needed content. The source guidance establishes the recommended minimum interval but does not guarantee that a specific machine’s cron service will run through sleep, shutdown, or other host-specific conditions. Check the scheduler environment and output path on the system where you deploy it.
Urlwatch’s documented workflow is local software configuration. The cited setup does not require a particular paid product or hardware purchase; costs depend on the host and any separately chosen notification or browser dependencies.
Or skip the browser setup
If your goal is a screenshot of a website rather than change monitoring, ScreenshotNeo returns an image or PDF from one API request. It is a website screenshot API and MCP server for developers. Its capture flow accepts cookie and consent banners and removes more than 60 known consent platforms, newsletter popups, and chat widgets before the shot; each step can be turned off. Bot checks, CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed, and the response identifies the page verdict and billing status in headers. AI agents can use its MCP server, which provides take_screenshot, get_page_info, and capture_pdf.
Example cURL request (see the ScreenshotNeo API documentation):
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
It includes 1,000 screenshots per month free with no card; paid plans start at $5 for 3,000 screenshots. Sign up for 1,000 free screenshots a month, with no card required.
FAQ
Does cron configure Urlwatch jobs?
No. Cron determines when the command runs. Urlwatch’s job configuration remains in its job file, edited with urlwatch --edit.
Can I check every few minutes?
The official Urlwatch introduction recommends no more frequent than every 30 minutes. Use */30 * * * * for the documented interval.
Will cron email every change automatically?
Do not assume so. Urlwatch writes change information to standard output by default, and cron output delivery depends on scheduler configuration. Set up a reporter if you need a specific notification route.


