UNL Relay
Payroll journal entries, from Paylocity to QuickBooks Desktop.
UNL Relay takes the general ledger file Paylocity produces after each payroll, checks it, and posts it to QuickBooks Desktop as journal entries. Nobody re-keys a payroll, and a person is asked to look only when a file needs attention.
- Paylocity sends the file
A scheduled GL report arrives by SFTP
- Relay checks it
Within seconds of arrival, on Azure
- Queued or held
Queued with a reference number, or held with a reason
- QuickBooks pulls it
The Web Connector checks in every 5 minutes
- Posted and confirmedDone
Visible in the console, confirmed by email
How it works
Five steps. People step in only when something is wrong.
- 01
The file arrives
After each payroll, Paylocity drops one general ledger file per company by SFTP into Azure storage. An event starts Relay within seconds.
- 02
It's checked
File name, balanced entries, a known and active company, allowed accounts and classes, and no duplicate of an earlier payroll.
- 03
It's queued or held
A file that passes gets a reference number and becomes one journal entry per company and class. A file that fails is held, and an email goes out.
- 04
QuickBooks pulls
The QuickBooks Web Connector checks in on a schedule. Relay confirms each reference number isn't already there, then adds what's missing.
- 05
People watch
The console shows files, entries and check-ins. Someone steps in only for held files and posting errors.
Safeguards
Built for the one job where a mistake is expensive.
Payroll touches every employee and every period close. Relay is designed so that a bad file stops before it reaches QuickBooks, and a good one only ever posts once.
Checked before it posts
Every entry must balance, the company must be known and active, and every account and class must be on the allowed list.
Never posts twice
Duplicate files are caught on arrival, and QuickBooks is asked whether a reference number already exists before anything is added.
Held, not dropped
A file that fails is kept with a reason code. Fix the cause and re-send it, or mark it resolved with a note.
Nothing connects in
The QuickBooks Web Connector on the customer's server reaches out to Relay. No inbound access to the office is needed.
Amounts stay out of alerts
Emails, logs and console lists never show dollar amounts or employee data. Amounts appear only on an entry's detail view and in the CSV export.
Every change audited
Re-sends, retries and edits to companies or allowed names are written to an audit log with who did them.
The console
Everything visible at relay.unl.dev.
A web console with Microsoft sign-in. Admins can act; view-only users can see every page and export CSV, but every change they try is refused.
- Files received, held files and their reasons
- Journal entries waiting, posted or in error
- Web Connector check-ins, flagged when they go quiet
- Re-send held files and retry failed entries
- The company list and allowed account and class names
- Email settings, recipients and a history of every email
Email alerts
Held file alerts
Sent right away when a file is held for review.
QuickBooks posting errors
Sent at the end of a sync when QuickBooks rejects an entry.
Posted confirmations
Sent when every entry for a reference number is in QuickBooks.
Morning check
Sent only when something needs attention. No email means nothing did.
Each type can be switched on or off, and each event is emailed once. A failed email never holds up payroll processing.
How it's built
Event-driven and serverless on Azure.
Two small function apps: one processes payroll files and talks to QuickBooks, the other serves the console. Both share the same tested core.
- Compute
- Azure Functions (Python), Flex Consumption
- Intake
- SFTP into Azure Blob Storage, triggered by Event Grid
- State
- Azure Table Storage for queues, settings and the audit log
- QuickBooks
- QuickBooks Web Connector and qbXML, posting to QuickBooks Desktop
- Sign-in
- Microsoft Entra ID, assignment required
- Resend, with a send-only key and idempotency keys
- Monitoring
- Application Insights and a daily morning check
- Quality
- pytest suite run against synthetic payroll files, never real ones
Running Paylocity and QuickBooks Desktop?
Tell us how payroll gets into your books today. Conversations start at Unleashed Technology.