Integration · People operations
How to build an HRIS to payroll sync
Somebody gets a pay rise in the HRIS on the day after the payroll cutoff and finds out in the next payslip. Here is how a sync that handles that actually works, the prompts that build it, and what running it demands.
Built with Tray Headless
- System Workday
- Step Effective-date the change
- Step Cutoff check
- Step Hold ambiguous
- System Gusto
Changes are effective-dated and the cutoff decides which cycle they land in, with anything ambiguous held instead of guessed at.
The short answer
What is an HRIS to payroll sync?
An HRIS to payroll sync comes down to four things: changes carried with their effective date rather than the date they were entered, a cutoff rule deciding which cycle each change lands in, a hold queue for anything ambiguous instead of a guess, and a reconciliation every cycle before payroll runs. Most of these come apart on the effective date. Syncing on the entry date pays a March rise in April or an April rise in March, and both are wrong in a way somebody notices immediately.
What matters here
- Sync the effective date, never the entry date. Backdated changes are normal and paying them in the wrong cycle is not.
- Handle the cutoff explicitly. A change entered the day after cutoff belongs in the next cycle with a retrospective adjustment.
- Hold anything ambiguous instead of guessing. A wrong payment is far more expensive than a delayed one.
- Reconcile before payroll runs, not after. Afterwards it is a correction and a conversation.
- Never sync a termination without a human confirming the final pay treatment.
Who this is for
You run people operations or payroll. Changes are made in the HRIS and rekeyed into payroll, the cutoff is a calendar entry somebody remembers, and corrections happen every cycle.
How it works in practice
From a change in the HRIS to the right amount being paid, in order.
- 1
Changes are read with their effective date
Not the date somebody typed them, because backdating is normal and routine.
- 2
The cutoff decides which cycle it lands in
Before cutoff goes in this run, after goes in the next with a retrospective adjustment.
- 3
Anything ambiguous is held, not guessed
A mid-cycle change with no clear proration, a missing bank detail, an unusual pattern.
- 4
Only clean changes flow to payroll
Everything else waits for a person, because a wrong payment costs more than a late one.
- 5
A reconciliation runs before payroll is committed
Headcount, changes applied, and anything in the HRIS not reflected in payroll.
- 6
Terminations always need a human
Final pay, accrued leave and notice treatment are decisions, not fields.
What the sync is made of
Four parts, and the first is the one that causes the most corrections.
Effective-dated changes
What changed and from when, carried through as data. Entry date is when somebody typed; effective date is what the person is owed.
A cutoff rule
Which cycle a change lands in, with retrospective adjustment where it missed. Nobody should be remembering this in a calendar.
A hold queue
Ambiguous changes waiting for a person, with the reason shown. Guessing produces a payment somebody has to claw back.
A pre-run reconciliation
Compare HRIS against payroll before the cycle commits. Afterwards it is a correction and an apology.
The Tray Headless prompts
Paste these into Claude Code or Codex with the Tray Headless plugin installed. Each stage runs on its own. The systems named in them are the worked example rather than a requirement, and every prompt says so.
Once per project, run
/tray-workflows:set-workspace
to pick the workspace these build in. Point it at a sandbox first.
- 1
Set up, then learn how each side dates a change
The two systems mean different things by date.
Headless skills
build-workflowUse build-workflow. The systems in play are Workday and Gusto, or whatever we run in those seats. I need worker records with compensation, employment status and cost centre, and specifically how each system represents an effective date versus an entry date. They will differ. Also tell me the payroll cutoff, the pay calendar, and how retrospective adjustments are represented. Everything in this build depends on those three.
- 2
Carry the effective date, always
The single most common cause of a wrong payslip.
Headless skills
build-workflowUse build-workflow. Read changes with their effective date and treat that as authoritative: Compensation changes Employment status changes Cost centre and manager changes Working pattern changes, which affect proration Leave without pay Never sync on the date the change was entered. A rise entered in April effective from March is owed for March, and a rise entered in March effective from April is not owed yet. Both are routine and both are wrong if you sync on entry date. For any change effective mid-cycle, compute the proration explicitly and show the working. A prorated amount nobody can explain generates a support ticket from the person it was paid to.
- 3
Handle the cutoff instead of hoping
Because the cutoff is currently a calendar entry somebody remembers.
Apply the cutoff explicitly: Effective date before the cutoff and entered before it: this cycle Effective date before the cutoff but entered after: next cycle, with a retrospective adjustment for the missed period Effective date after the cutoff: next cycle, normally Tell the employee and their manager when a change will land in the next cycle with an adjustment. The surprise is the problem, not the delay, and a message beforehand prevents almost every query. Never silently move a change into a later cycle without saying so.
- 4
Hold anything ambiguous
A wrong payment is far more expensive than a delayed one.
Headless skills
tray-gotchasUse tray-gotchas, then hold instead of guess. Send to a queue: A change with no effective date A compensation change above a threshold, which should be confirmed A worker with missing bank or tax details A change that would produce negative net pay Two conflicting changes in the same cycle Any termination, always Terminations never sync automatically. Final pay, accrued leave, notice and any clawback are decisions instead of fields, and getting one wrong is both expensive and personal. Show the reason and the proposed values in the queue, so approving is a glance instead of an investigation.
- 5
Reconcile before payroll runs
Afterwards it is a correction and a conversation.
Reconcile before every payroll commits, not after: Headcount in the HRIS against headcount in payroll Changes applied this cycle against changes expected Anybody active in one system and not the other Total compensation change against what the HRIS implies Anything held, still unresolved, with the cutoff approaching Send it to payroll before the run. After the run, every difference is a correction, a supplementary payment and a conversation with somebody whose payslip was wrong. Report per cycle: changes synced, held and released, adjustments raised, and corrections after the run. That last number should trend to zero.
- 6
Prove it works, then hand the rules to payroll
Because cutoff and threshold rules belong to payroll.
Run the per-step schema checks and the whole-workflow audit before this touches production. Run parallel for two cycles: compute everything, write nothing, and compare against what payroll did by hand. Then open the same workflow in Tray Build so payroll can adjust cutoff rules, approval thresholds and the hold reasons in the visual canvas.
What it connects to
Two systems of record for the same people, and money at the end of it.
Workday
Read workers, compensation, status and effective dates. The source of truth for what changed and from when.
Reads
Gusto
Write compensation and status changes with their effective dates, and read back what was actually applied.
Reads and writes
NetSuite
Read cost centres so a change lands against the right one, and push payroll cost for reporting.
Reads and writes
Slack
Tell somebody when their change lands in the next cycle, and route the hold queue to payroll.
Writes
Same build, other stacks
The design does not change if you run something else in one of these seats. The same prompts build it against SAP S/4HANA, Microsoft Teams, Azure Active Directory, SAP SuccessFactors, Oracle or Google Chat.
Named systems are the ones most teams run, not the only ones that work. Each is an authentication in your Tray workspace, referenced by name, so the workflow never holds a credential. Where we have a connector page, the name links to it.
Running it in production
This decides what people are paid. There is no failure mode here that is merely inconvenient.
It runs on the platform, not on your laptop
Cutoff-aware syncing and the pre-run reconciliation execute on the same engine, on the payroll calendar rather than when somebody remembers.
Every change is traceable
What changed, effective when, entered by whom, and which cycle it landed in. That is what a payroll query needs and what an audit asks for.
Credentials are held by the platform, never hardcoded
Payroll credentials can change what people are paid. They live in your workspace, scoped narrowly, and rotated on their own schedule.
Payroll owns the rules
Cutoffs, thresholds and hold reasons open in Tray Build, owned by the team accountable for the run.
Run it parallel for two cycles
Compute everything and write nothing, compared against what payroll did by hand. Nobody should trust this on its first live cycle.
Questions people ask
Why does the effective date matter so much?
Because backdating is routine. A rise entered in April effective from March is owed for March, and syncing on the entry date pays it in the wrong cycle, which the person notices immediately.
What happens to a change entered after the cutoff?
It lands in the next cycle with a retrospective adjustment, and both the employee and their manager are told beforehand. The surprise is the problem, not the delay.
Should terminations sync automatically?
Never. Final pay, accrued leave, notice and any clawback are decisions rather than fields, and getting one wrong is expensive and personal in equal measure.
Why reconcile before the run rather than after?
Because afterwards every difference is a correction, a supplementary payment and a conversation with somebody whose payslip was wrong. Before the run it is an edit.
How should a payroll integration go live?
Parallel for two cycles: compute everything, write nothing, and compare against what payroll did by hand. Nobody should trust a payroll integration on its first live cycle.
Vibe-coding app guides
Vibe-code an entire app with Helix
This moves the data between systems. It does not give anybody a screen to work in. Build that app in Claude Code, Codex or Cursor, then deploy and run it governed on Tray Helix. Same kind of guide, same kind of prompts.
How to build a headcount request tracker (opens helix.tray.ai in a new tab)
Related guides
People operations
How to build employee onboarding provisioning
Drive it from the HRIS, derive access from the role instead of a copied colleague, sequence around the start date, and prove it happened. The prompts that build it.
People operations
How to build employee offboarding deprovisioning
Revoke on the leave date, cover every system instead of the ones you remember, transfer what they owned, and prove it. The Headless prompts that build it.
People operations
How to build an org hierarchy sync
Propagate a reporting change everywhere it decides something, handle the reorganisation, and never leave an approval routed to somebody who left. The prompts.
People operations
How to build an ATS to HRIS sync
Move a signed offer into a worker record without rekeying, keep candidate data out of HR, and trigger onboarding from the start date. The prompts.
Last reviewed September 2026.