Field note

Payroll virtual accounts break on the real-world edge cases

A clean virtual-account hierarchy looks simple until an HCM client asks you to reverse payroll for 200 employees across three states from three weeks ago. Multi-entity payroll is where account architecture meets 50 sets of wage law - and where instant rails do not yet fit.

Sep 16, 2025 · Navin Agrawal · Architecture · 3 min read

Payroll virtual accounts break on the real-world edge cases

Visual brief

Visual brief

Payroll virtual accounts break on the real-world edge cases

As of September 2025

Your HCM client just called. They need to reverse payroll for 200 employees across three states, from three weeks ago. Your virtual-account system either handles that gracefully or operations spends the weekend doing it by hand.

A virtual-account hierarchy that mirrors business reality - client companies on top, cost centers beneath, employees at the bottom - reads as simple on a whiteboard. Then come mergers, employee transfers between entities, and retroactive corrections that cross fiscal boundaries, and the simple structure becomes a compliance maze.

The stakes are not small. The PEO industry alone runs into the hundreds of billions in gross revenue - payroll dollars plus service fees bundled together - and a single client managing workers across all 50 states drags 50 sets of wage law into one account structure. The data model that survives is the boring one: entity relationships with effective dates, an audit trail for every balance movement, and settlement rules that know operating funds from tax escrow.

Payroll virtual accounts break on the real-world edge cases (as of September 2025): the PEO industry runs roughly $300 billion in gross revenue, payroll plus service fees rather than software alone (NAPEO, 2023); one HCM client can span 50 states of different wage law against the same account structure; payroll disbursement still runs on ACH batch, so instant funding is easy but instant disbursement is a full rebuild; and the practical answer is a hybrid model where clients fund via instant rails while payroll keeps flowing through ACH on rail-agnostic master accounts.
The hard part is not the happy path. It is mergers, transfers, and three-week-old reversals across fiscal boundaries.

Funding is the easy half

Instant deposits land in the same master accounts the ACH processors already monitor, so RTP and FedNow funding needs no real architecture change. A client can push money in on instant rails today and nothing downstream has to move.

Disbursement is the rebuild

Payroll goes out through dedicated ACH processors built around employee data and regulatory reporting, and those systems do not do instant transactions. Moving disbursement to RTP means rebuilding that processing layer, not flipping a flag.

Clients can fund on instant rails while payroll keeps flowing through ACH batch. The master accounts have to be rail-agnostic, and disbursement stays batch-oriented for now.

Was this useful?

Choose once.

Related Posts

View All Posts »
BRICS does not need to kill SWIFT to change cross-border architecture

BRICS does not need to kill SWIFT to change cross-border architecture

The interesting BRICS payments question is not geopolitics. It is architecture: when a US company pays a supplier in a BRICS country, does the payment still default to USD correspondent banking, or does the hub choose the corridor before release? A mature local-currency corridor adds a routing decision, and that decision is middleware, policy, liquidity, and evidence rather than a new button in the portal.

The 11:47am question real-time rails ask of your ledger

The 11:47am question real-time rails ask of your ledger

What was the cash position at 11:47am? On a snapshot-based model the honest answer is an interpolation between two saved states. Real-time rails turned that guess into a liability, and the fix is to stop storing a position at all and fold an immutable event log into the answer. The event log is not free, and most teams have not put the bill on the budget.

A multi-rail exception mesh, not best-effort dedupe

A multi-rail exception mesh, not best-effort dedupe

A duplicate payment in production is not an edge case. It is the control plane showing you what you never modeled. A retried request can land as a final success on one rail and a settlement reject on another, look clean on the dashboard, and still move two accounts twice. Best-effort dedupe is not a control.

A name check just became a priced control

A name check just became a priced control

The Fed's 2026 pricing notice introduces Payee Name Verification at two cents a transaction, starting on FedACH. It works by comparing a submitted payee name against names previously seen on that account. From an architect's view that is not a yes-or-no check - it is a new control point that reshapes routing, exceptions, and reconciliation.