Skip to content

When does each scheduled action fire?

A reference for staff who need to predict — or explain to a client — exactly when an automated action will happen. All times shown in the client's timezone unless noted; the cron jobs themselves run in UTC and translate per-client.

Payroll

ActionFires whenTriggered byRecipients
Cycle initiationThe client's local 09:00 on its defaultScheduleDay of the monthHourly cron — picks up clients whose local clock hits 09:00 in that hourAll active contacts with Can submit intake
Day-2 reminder48 hours after the cycle request email if the client hasn't submittedcheck-pending-submissions daily at 09:00 UTCSame submitter contacts; old token is invalidated, fresh 48-hour link sent
Day-5 reminder5 days after the cycle request emailSame daily checkSame submitter contacts
Day-7 reminder7 days after the cycle request emailSame daily checkSame submitter contacts
Approval requestWithin ~30 seconds of you clicking Generate export (when the client has an active approver)Synchronous from the export actionFirst active contact with Can approve, alphabetical by name
Approval reminder48 hours after approval request if not yet decidedDaily checkSame approver contact

NOTE

"Local 09:00" follows the IANA timezone on the client record. A client at Asia/Singapore initiates at SGT 09:00 regardless of UTC drift. If you change the client's timezone, the next cycle uses the new zone — already-scheduled cycles don't move.

Bookkeeping

ActionFires whenTriggered by
Folder sync (Drive / SharePoint / Dropbox)Configurable per channel; default hourlybookkeeping.folder-sync cron
Document classify-and-draftWithin ~30 seconds of a document landingPg-boss queue, runs as the OCR pipeline finishes
Reconciliation matcherTriggered by you, runs immediatelySynchronous from Run matcher click
Client portal dispatchTriggered by you, sends within ~30 secondsSynchronous from Dispatch unreconciled click

Cross-cutting platform jobs

JobCadenceEffect
Outbox dispatcherEvery 10 secondsDrains the outbox table, sends emails / fires webhooks
OCR processingOn-demand per fileVision + Claude pipeline, typically <30 s per page
Retention purge03:00 UTC on the 1st of the monthMoves cycles past the retention window from CLOSED to ARCHIVED, deletes raw uploads per the retention policy

Token lifetimes

Token typeTTLRefreshed by
Cycle request magic link48 hoursDay-2 / 5 / 7 reminders mint a fresh token; old one is invalidated
Approval request magic link48 hoursApproval reminder mints a fresh token
Bookkeeping client portal link48 hoursRe-dispatch from the reconciliation run
Staff session cookiePer session policy (see SLO)Re-login

How to figure out "when will the next email fire for this client?"

  1. Open the client's Cycles page.
  2. Look at the most recent cycle's status and last reminder sent timestamp on the audit tab.
  3. Match it against the table above. Example: if the cycle is REQUESTED and the last reminder was 2 days ago, the next reminder will fire on the next 09:00 UTC daily check, day-5.

If the client says "I haven't received anything", see Verify an email was sent.

Internal use only — BreezyCorp