Skip to main content

Schedules

A schedule automatically runs scrape jobs at specified intervals or cron times. Schedules are perfect for monitoring websites for changes without manual intervention.

What is a schedule?

A schedule combines:
  • A strategy: What to extract
  • A URL: Where to scrape
  • A timing rule: When to scrape (interval or cron)
  • Optional webhook: Where to send change notifications
Once created, schedules run automatically, creating jobs at the specified times.

Creating schedules

Interval-based schedules

Run jobs at regular intervals:
Common intervals:
  • 15 minutes: 900 seconds
  • 1 hour: 3600 seconds
  • 6 hours: 21600 seconds
  • Daily: 86400 seconds

Cron-based schedules

Use cron expressions for precise scheduling:
Use crontab.guru to build and test cron expressions.

Webhooks

Receive real-time notifications when jobs complete:
Meter will POST job results to your webhook URL. See the webhooks guide for payload details and implementation.

Webhook types

Meter supports two webhook formats: standard (full JSON payload) and slack (formatted for Slack incoming webhooks). The type is auto-detected from the URL — Slack URLs are automatically detected.

Webhook metadata

Attach custom JSON metadata to every webhook payload. This is useful for routing, tagging, or identifying schedules:

Webhook secrets

Every schedule with a webhook URL gets an auto-generated secret (prefixed whsec_). The secret is sent in the X-Webhook-Secret header on every delivery, allowing you to verify requests are from Meter. The secret is returned once when the schedule is created — store it securely. If compromised, regenerate it:
See the webhooks guide for verification examples.

Pull-based change detection

Instead of webhooks, poll for changes:
Set mark_seen=False to preview changes without marking them as read.
This is useful for:
  • Batch processing: Check for changes once per hour, process in bulk
  • Webhook alternatives: When webhooks aren’t feasible
  • Manual review: Preview changes before processing

Managing schedules

Listing schedules

Updating schedules

Deleting schedules

Deleting a schedule doesn’t delete past jobs. Use list_jobs() to access historical data.

Monitoring schedules

Check recent runs

Detect failures

Best practices

Balance freshness with cost and load:Every 15-30 minutes:
  • Stock prices, sports scores
  • Time-sensitive monitoring
  • High-value data
Every 1-6 hours:
  • E-commerce products
  • News articles
  • Job listings
  • Most monitoring use cases
Daily:
  • Documentation, policies
  • Blog posts
  • Low-frequency content
Webhooks are ideal when:
  • Changes need immediate action
  • Building real-time systems
  • Triggering downstream workflows
Pull-based is better when:
  • Batch processing changes
  • Webhooks aren’t feasible (firewall, no public endpoint)
  • Manual review before processing
Set up alerts for schedule failures:
Temporarily disable schedules when doing maintenance:

Change detection workflow

Schedules automatically compare jobs to detect changes: When you call get_schedule_changes(), Meter returns only jobs where content actually changed.

Troubleshooting

Possible causes:
  • Schedule is disabled
  • Cron expression is incorrect
  • Server issues
Solutions:
  • Check enabled field: client.get_schedule(schedule_id)
  • Verify cron expression at crontab.guru
  • Check next_run_at to see when it’s scheduled
Problem: get_schedule_changes() returns 0 results but you expect changesPossible causes:
  • Content genuinely hasn’t changed
  • Changes already marked as seen
  • Looking at wrong schedule
Solutions:
  • Use mark_seen=False to check without marking
  • Compare jobs manually: client.compare_jobs(job1_id, job2_id)
  • Verify schedule ID is correct
Problem: Webhooks aren’t being receivedSolutions:
  • Verify webhook URL is publicly accessible
  • Check endpoint responds with 200 OK within 30 seconds
  • Test webhook with tools like webhook.site
  • Switch to pull-based if webhooks aren’t working

Next steps

Change Detection

Learn how Meter detects content changes

Webhooks Guide

Implement webhook endpoints for real-time updates

Pull-Based Monitoring

Use the changes API for batch processing

Python SDK Reference

Explore all schedule methods

Need help?

Email me at mckinnon@meter.sh