Weekly reports now run per-user, isolated from each other

Weekly and monthly report delivery has been moved off the single shared-budget Lambda and onto a per-user fan-out. One slow user can no longer push later users past the time budget, and a timeout mid-run no longer locks a user out of that week's report.

The weekly digest of your traffic, crawler activity, errors and trends used to be sent by a single Lambda invocation that iterated every user in turn. That worked at small scale, but as we added customers and Athena work per site, last few Mondays were spending 8–9½ minutes of the Lambda's 10-minute budget. On 2026-05-04 the run actually hit the late-budget guard with 29 seconds left and stopped early, at least one user was silently skipped, and because their idempotency slot was already claimed before the stop, they weren't picked up by any later tick either.

Architecture is now per-user, mirroring the alert-digest fan-out we shipped earlier today:

  • An hourly scheduler still runs once daily at 08:00 UTC. On report days (Mondays for weekly, 1st-of-month for monthly) it enumerates eligible users and pushes one SQS message per user. No emails are sent in the scheduler itself.
  • A worker Lambda picks one message off the queue, sends that user's reports across all their sites, and stops. Each invocation handles exactly one user with its own time budget.
  • The per-(user, period) idempotency slot is now claimed by the worker just before sending, a worker timeout no longer locks a user out of that period's report. The slot still prevents any duplicate sends on retry.

If you were due a report on 2026-05-04 and noticed it never arrived, that gap is now explained, and won't recur.

← Anomaly detection and storage rollups now run per-site tooTry Salience with one click, anonymous live demo →
← All changelog entries