Naarvin reads approved monthly salaries from ZenHR into its payroll register, branch by branch: basic pay, other income, deductions, net pay and the social-security salary. It signs in through an OAuth app your own ZenHR admin creates, reads nothing until someone with payroll access switches the payroll register on, and never writes to ZenHR.
What does Naarvin read from ZenHR?
Each ZenHR branch is a company to Naarvin. For each branch it reads the branch's currency and country, the employee list, and one salary list per month.
| Payroll register field | From ZenHR |
|---|---|
| Employee code and name | The employment number (else ZenHR's internal id) and the short name in English or Arabic |
| Joining and leaving dates | The hiring and termination dates on the employee list |
| Basic pay | The basic salary, before any absence deduction |
| Other allowances | The net income on top of basic pay |
| Deductions | The net deductions plus the absence amount, so each line adds up to its net pay |
| Net pay | The total salary |
| GOSI contribution wage | The social-security salary of the branch's scheme |
Only salaries whose status is approved or sent to employee are loaded. Other statuses are counted by name in a sync warning, as are records in a currency other than the branch's and records that do not add up, which keep ZenHR's own total.
Why does ZenHR need an app of your own?
ZenHR's API signs in through an OAuth application that each customer creates inside its own ZenHR account. So the app belongs to you: your admin creates it, chooses its access, and can remove it. Naarvin asks for three read scopes: branches, employees and financial information.
You enter the app's name, UID and secret on the connect form, then sign in to ZenHR to allow it. The UID and secret are sealed with the connection and used only to sign in and renew access; they are never shown again or written to a log. Reconnecting later asks for them again.
Who can switch payroll on, and who sees it?
A new ZenHR connection reads nothing until the payroll register is switched on from its card. Only someone who manages connections and may see payroll detail for every company of the connection can do it, and the change is audited. Afterwards, only people with payroll detail access for a branch see its lines; warnings name months, never people.
Which months are read, and how often?
The first sync reads the last 12 months. Later syncs read again from the month before the last sync, so a salary approved late is picked up. ZenHR allows 15 requests every 4 seconds on production, and Naarvin waits when ZenHR asks it to slow down. A daily or weekly schedule, in your time zone, usually fits payroll.
Each month the connection reads replaces only what this connection loaded before. A month imported from a payroll file, or loaded by another connection, is kept, and the sync warns with the month.
What does the connection not do?
- It never writes to ZenHR.
- It does not split housing, transport or overtime out of other income: ZenHR's salary record does not carry them separately.
- It does not read employer contributions, the employee's social-security share, department, nationality or bank accounts.
- It reads nothing if the app lacks the scope for salaries; the sync then says which scope to add.
How do you connect ZenHR?
- Create the app in ZenHRA ZenHR admin with global admin rights opens /en/oauth/applications on your ZenHR address and adds a new application, with the redirect URL the Naarvin connect form shows, the Company data-access level, and read access to branches, employees and financial information.
- Add the connectionChoose your ZenHR address, app.zenhr.com or sa.zenhr.com, and enter the app name, UID and secret.
- Sign in and choose the branchesSign in to ZenHR to allow the app, then link each branch to its company in Naarvin. A branch's currency must match its company's.
- Switch on the payroll registerFrom the connection card, by someone with payroll detail access for every linked company.
- Run the first sync and compare a monthCompare one month per branch with ZenHR's payroll, and read the warnings on statuses and totals.
Questions people ask
Does each branch become a separate company?
Yes. Each ZenHR branch is linked to its own company in Naarvin, with its own currency.
Why are some salaries missing?
Only salaries approved or sent to employee are loaded. Others, and records in another currency, are counted in the sync warnings.
Can we revoke Naarvin's access in ZenHR?
Yes. The app lives in your ZenHR account, so your admin can remove it at any time. Syncs then stop until someone reconnects.
Official and primary sources, read on the date shown. Rules change: confirm with the authority or your adviser before you act.
- ZenHR: ZenHR APIs Documentation (OAuth applications, scopes, base URLs and rate limits) (read 9 October 2026)