Scheduled Reports
Automated, recurring report delivery.
Scheduled Reports puts the reports your team already circulates by hand on a timetable. You choose the report, the period it covers, how often it should go out and who receives it — and Nexa People generates that exact report on the server and emails it as a CSV attachment, with a preview of the first hundred rows in the message itself.
The report a schedule sends is the report it names. The category, title, filters and column choices are saved with the schedule and replayed on every run, and a title the system cannot build is refused when you save it — not months later, quietly, at seven in the morning.
A schedule fires at the time you set, on the day you set, in your organisation's own timezone. Daily, weekly and monthly are all real: a monthly report anchored to the 31st arrives on the 28th in February and returns to the 31st in March, rather than drifting earlier every month.
Every run is recorded as what actually happened — which recipients received it, which did not, why, and how many attempts it took. The module is for HR and system administrators, gated through the role-template permission matrix, and every schedule and run belongs to your organisation alone.
How Scheduled Reports works
Choose the report, and the period it covers
The report picker is the reports catalogue itself — every title the Reports module can build, grouped by the section you would find it under. Choosing from a section is how the system knows which report you mean: a few titles exist in more than one place, and a schedule that paired the wrong two would send attendance records under a payroll heading. That pairing is checked when you save, when you edit, and again on every run.
Separately from the frequency, you choose the period the report covers: the previous day, the previous week, the previous month, month to date, or a rolling 7 or 30 days. Keeping the two apart matters — a weekly schedule might reasonably want last week, or the month so far, and guessing on your behalf is how a report quietly answers a different question.
A timetable the scheduler actually reads
Daily, weekly and monthly each carry the anchor they need: a time of day, a weekday, or a day of the month. A scheduler pass runs every fifteen minutes and fires only what is due, so a schedule set for 07:00 arrives at 07:00 in your organisation's timezone — not at a fixed hour chosen for somebody else's.
The timetable does not drift. Each next run is worked out from the run that was due, not from the moment the work happened, so a busy pass that starts late never makes every future run late. A schedule paused for three months fires once when you switch it back on and returns to its rhythm — it does not deliver ninety back-dated reports covering periods you have already seen.
Delivered as the same file you would download
Each run generates the report and attaches it as a CSV — byte for byte the file the Reports module downloads, so the copy in someone's inbox and the copy on your screen are the same document. The message body carries the first hundred rows as a table, the period covered, and the report's own summary figures.
Recipients are ordinary email addresses, validated when you save: lowercased, de-duplicated, and refused one by one with the offending address quoted so a typo takes a second to find rather than a hunt through twenty entries. Mail is sent under the sender display name from your organisation's Email Domain Setting.
Failure is recorded, and retried carefully
A run records each recipient individually. If two addresses receive the report and a third bounces, the run is marked partial — not success, and not failure — and the two who received it are never contacted again. A retry sends only to the addresses still outstanding, up to three attempts, backing off in between.
Where outgoing email is not configured, the run says so in plain words and is recorded as a failure. It is not recorded as a success with nothing sent.
Run History you can rely on
Every run writes one row: the report, the occurrence it was due at, the period it covered, how many rows it produced, its outcome, the recipients it reached and the ones it did not, any error, and when the next attempt is due. Rows are written by the scheduler and are not editable — a delivery outcome somebody typed in by hand is not evidence of anything.
Run due now fires everything currently due for your organisation using the very same code path the scheduler uses, and answers with counts: how many were delivered, how many partial, how many failed. If nothing is due, it says so rather than pretending to have done work.
Runs once, however many workers are running
Each due occurrence is claimed in the database before any work begins, and the claim is enforced by a uniqueness rule on the schedule and the occurrence together. A second worker — or the same worker restarted halfway through a send — cannot claim an occurrence that is already claimed.
That is what makes overlapping scheduler passes, restarts and retries safe: the guarantee is in the database, not in code that hopes to run only once.
Features
The report you chose, not a summary
Each schedule generates its own report with its own saved filters over its own period, attached as CSV. A title the system cannot build is refused when you save the schedule.
Every report in the catalogue
The picker offers every report the Reports module can build, grouped by section — not a short hand-picked list. Choosing from a section is also how the system knows which report you mean.
Daily, weekly and monthly — all real
Each frequency carries a proper anchor: a time, a weekday, or a day of the month. A monthly schedule on the 31st clamps to the last day of shorter months and returns to the 31st afterwards.
Your organisation's timezone
Schedules fire at the local time you set, using the timezone from Organization Settings — captured on the schedule when you save it, so changing it later cannot silently move existing schedules.
Nobody receives it twice
Each due occurrence is claimed in the database before work starts. Overlapping scheduler passes, worker restarts and retries cannot produce a second delivery.
Per-recipient delivery records
Runs record which addresses received the report and which did not. A retry contacts only the ones still outstanding, so a single bounce never re-sends to everyone.
Partial is its own outcome
Two delivered and one bounced is recorded as partial, with the failing address named. It is never rounded up to success, and a run that reached somebody is never reported as a total failure.
Pause without losing anything
A paused schedule keeps its report, period, cadence and recipients and never fires. Switching it back on re-arms it to the next occurrence ahead — it does not replay the pause.
Permission-gated, and enforced
Viewing, creating, editing, deleting and running are each gated on an enforced permission key. Run now requires edit rights, not merely view: reading the list is not consent to email a report.
Used by: HR and system administrators.
Works with the rest of Nexa People
The picker is the Reports catalogue itself, so anything Reports can build — HR, Attendance, Leave, Payroll or Offboarding — can be put on a timetable, with the same filters and column choices you would use interactively.
Timing comes from your organisation's timezone in Organization Settings, and delivery uses the shared email service with the sender display name from Email Domain Setting. There is no second timezone to keep in step: there is one, and the scheduler reads it.
Access follows the same role-template permission matrix used across Nexa People. Every schedule and every run is scoped to your organisation, and each create, edit, deletion and manual run is written to the system log — with the recipients named, because a scheduled report can carry salary data.
Frequently asked questions
What do recipients actually receive?
The report you chose, generated on the server for the period you chose, attached as a CSV file — byte for byte the same file the Reports module downloads. The message body shows the first hundred rows as a table along with the period covered and the report's summary figures, and says so when there are more rows than that.
When does a schedule run?
At the time and on the day you set, in your organisation's timezone. A scheduler pass runs every fifteen minutes and fires only what is due, so a schedule set for 07:00 arrives at 07:00 for you. If you do not want to wait, Run due now fires everything currently due using the same code path.
What happens to a monthly report set for the 31st?
It fires on the last day of shorter months — the 28th in February, the 30th in September — and returns to the 31st in the next month that has one. The anchor is kept rather than adjusted, so the schedule never drifts earlier over time. The form tells you this when you pick a day after the 28th.
If one recipient's address bounces, is the report re-sent to everyone?
No. Runs record delivery per recipient, so a retry contacts only the addresses still outstanding. Anyone who already received the report is never contacted again about that run. The run itself is recorded as partial, with the failing address named.
Can the same report be delivered twice?
No. Each due occurrence is claimed in the database before any work begins, and that claim is enforced by a uniqueness rule rather than by code. Overlapping scheduler passes, a restarted worker, or a retry cannot produce a second delivery.
What if the report is no longer available?
The run fails with the report named, and nothing is sent — it never falls back to a different report. The schedules list also flags a schedule whose report is no longer available, so you can see it before the next run rather than after. The same honesty applies where outgoing email is not configured: the run is recorded as a failure with that reason, never as a success with nothing sent.
Who can set up and run schedules?
Organisation roles granted the Scheduled Report permission keys — typically HR and system administrators. Viewing, creating, editing and deleting are gated separately, and Run due now requires edit rights rather than view, because it generates a report and emails it to real people.
Can reports go to people outside the organisation?
Yes — recipients are ordinary email addresses, so a report can reach an accountant or adviser who never signs in. Because a scheduled report can contain salary data, every recipient list is recorded in the system log when a schedule is created, and the form asks you to check the addresses.
Related modules
See Scheduled Reports in your own setup
We'll walk you through the modules you care about and email you login credentials to try it yourself.