Scheduled Jobs¶
Jobs run on two separate schedulers with different trust and cost profiles: supercronic
on the Coolify VPS (see Deployment), and Windows Task Scheduler on the
separate scrape box. See Data Pipeline for how these
jobs fit into the overall pipeline DAG.
VPS / Coolify (via supercronic, all times UTC)¶
| Time | Job | Purpose |
|---|---|---|
| 12:00 daily | Web-form job | Forms-first outreach campaign |
| 13:00 daily | Warmup job | Mailbox deliverability warmup |
| 14:00 + 15:00 daily | Commission-confirmation job | Commission A/B email sends (two runs for timezone gating) |
| 15:00 daily | Metrics job | Refreshes dashboard snapshot tables |
| continuous, ~every 5 min | Reply daemon | Polls IMAP for new replies, ingests, drafts responses |
| every 10 min | Refresh drain worker | Drains the on-demand refresh queue (see Data Pipeline) |
| every 30 min | Refresh cadence planner | Enqueues buildings due for cadence-based refresh |
Windows scrape box (Task Scheduler)¶
| Task | Schedule | Cost | Purpose |
|---|---|---|---|
| Weekly leads/enrichment | Sundays 06:00 | Free | Warehouse migration check + enrich_sweep.py + quality gate, per metro |
| Refresh drain (warm standby) | Every 15 min | Free when idle | Same purpose as the VPS refresh worker, kept as a standby; bounded so it can safely run alongside the VPS worker |
Manual-only (never scheduled)¶
Run by an operator when needed:
- A full paid unit-sweep pass across metros (bounded budget, several hours, meaningful cost — up to ~$20/run across 4 metros).
- Metro discovery sweeps (~$30–40/metro).
Note
The refresh-worker guardrails (≤100 ids/request, 6h per-property cooldown, ≤20 queue
admissions/hour/key, ≤50 paid resolutions/day, $8/day soft budget rail) live in
Internal API's /refresh reference and
Data Pipeline — not repeated here.