Zoho People logoAFAS Profit logo

Payroll integration

Zoho People to AFAS integration: new hires and changes to Dutch payroll

With an integration between Zoho People and AFAS Profit, new employees from Zoho People arrive in AFAS with contract, schedule, salary and bank account, and changes and departures follow with their effective date. HR manages employees in Zoho People, payroll runs in AFAS and retypes nothing.

What the integration does

Organisations that already use Zoho software and chose Zoho People as HR system often run payroll for their Dutch employees in AFAS Profit. HR changes fields in Zoho People, and payroll copies those changes into AFAS by hand.

  1. HR records a new employee or change in Zoho People; a workflow sends a webhook to KoppelHet.
  2. KoppelHet fetches the full record, with its tabular sections, and translates the fields to AFAS.
  3. A new employee starts the onboarding process in AFAS with contract, schedule and salary.
  4. A change goes to the right part of AFAS with the effective date from Zoho People.
  5. Every hour KoppelHet fetches records changed since the previous round, in case a webhook did not arrive.
Zoho People → KoppelHet → AFAS ProfitSOURCEZoho PeopleTARGETAFAS ProfitKoppelHetmapping · logging · monitoringZoho People → KoppelHet → AFAS ProfitSOURCEZoho PeopleTARGETAFAS ProfitKoppelHetmapping · logging · monitoring
Out: Employee with personal details and address · Contract with start and end date · Schedule with hours per week · Salary with effective date · Department and cost centre

What to watch for with Zoho People and AFAS Profit

  • In Zoho People the employee is a form the administrator adjusts. Fields for hours, salary, BSN and IBAN are usually custom fields with their own name. At the start we record per customer which field goes where; if the administrator removes or renames a field, KoppelHet reports it instead of sending an empty field to AFAS.
  • A request in Zoho People returns at most two hundred records at a time and can filter on records added or changed after a timestamp. KoppelHet stores that timestamp after every round and next time only requests the difference.
  • Anyone sending more than four hundred requests per minute to Zoho People is locked out for five minutes. That also affects other integrations on the same environment. KoppelHet therefore stays well below that limit, also during the initial load of all employees into AFAS.
  • Data with history, such as salary rows, is often held in a tabular section of the form in Zoho People, with its own row id. KoppelHet reads all rows and writes the row valid on the effective date as salary in AFAS, so a rise from next month is also in AFAS with that date.
  • Webhooks in Zoho People run through a workflow on the form, and failed webhooks stay in Zoho with a button to resend them. KoppelHet does not rely on that alone and fetches the changes itself every hour, so a missed notification does not become a missed payroll change.
  • The Zoho People API is included in the Essential HR, Professional, Premium and Enterprise plans. At the start we check the plan, because otherwise AFAS cannot receive data from Zoho People.
  • Zoho People can look up an employee by employee ID or by email address. On the first connection we use that to compare every employee already in AFAS with Zoho People, so nobody ends up twice in AFAS.

How we build and run it

  • The integration runs on the KoppelHet platform, hosted in a data centre in the EU.
  • Every sync and every error is visible in the functional log; on an error your administrator is notified.
  • A change that cannot go through is not half-applied but queued for another attempt.
  • KoppelHet is ISO 27001 certified. Data travels encrypted and stays on the platform no longer than needed.
  • After go-live we manage the integration and adjust it when your process changes.
  • The integration fits next to your existing integration layer. Only the fields in the design are transferred; the platform keeps no register of its own.

Implementation, architecture and compliance

Implementation and price

This is not an app you switch on. We build the integration for your organisation on our platform, with building blocks we reuse on every project. So it is custom work that does not start from scratch.

A consultant prepares the intake and analyses both systems. We then record the mapping and exceptions field by field, test in the test or acceptance environment and go live at a moment you choose. Costs are a one-off amount for the setup and a monthly amount for platform, monitoring and support.

Price indication · Complex

Leave your work email and you see the price indication right away.

We only use your address to follow up on your question about this integration.

Frequently asked questions

Does the integration work with our own fields in Zoho People?

Yes. We read fields by their internal name and record at the start which ones go to AFAS. A new field is included when you ask for it.

Does leave from Zoho People also go to AFAS?

Not in the first version. Leave and attendance can be added later as an extension, if payroll needs them in AFAS.

Technical details for IT

For those who want to know how it works under the hood: APIs, fields and sources used.

  • Zoho People is read through the Zoho People API with OAuth 2.0 (Self Client in the Zoho Developer Console, header Authorization Zoho-oauthtoken, scope ZOHOPEOPLE.forms.READ). Records through GET /people/api/forms/employee/getRecords with sIndex, limit (at most 200) and modifiedtime (timestamp in milliseconds); search with SearchColumn EMPLOYEEID or EMPLOYEEMAILALIAS. Tabular sections come back in tabularSections. Threshold of four hundred requests per minute, then a five-minute lock.
  • AFAS is written through the HrOnboarding UpdateConnector for new employees and KnEmployee (AfasContract, AfasTimeTable, AfasSalary, AfasBankInfo) for changes.

Which fields are transferred

The key fields. The full mapping is agreed per customer.

Field in Zoho PeopleField in AFAS ProfitNotes
EmployeeIDMedewerker (EmId)Fixed key
FirstName, LastNameVoornaam, voorvoegsel en achternaamSplit the name prefix
Geboortedatum en adresveldenPersoonsgegevens en woonadres
Datum in dienstBegindatum contract
Employeestatus en vertrekdatumEinddatum contract
Afdeling (lookup)Organisatorische eenheid en kostenplaatsThrough a lookup table
Eigen velden voor uren, salaris, BSN en IBANRooster, salaris, BSN en bankrekeningField names per customer

Related

Which systems do you want to connect?

Tell us which systems you use and what should happen automatically. Together we define the smallest working solution, with a clear design and a quote before building.