AFAS Profit logoLinkedIn Learning logo

Training and certificates

AFAS to LinkedIn Learning integration: licences per job and unit, revoked after the termination date

With an integration between AFAS Profit and LinkedIn Learning, an employee from AFAS automatically gets a LinkedIn Learning licence according to the rules you set per job, unit or employer, with their unit and employer as groups for the reports. On the day after the termination date the integration sets the licence to inactive, so no paid seat is left behind.

What the integration does

Organisations that run HR in AFAS Profit and offer LinkedIn Learning to part of their employees often manage licences with a list HR and IT keep next to AFAS. New colleagues wait for an invitation, and leavers keep their licence until someone cleans up the list.

  1. You decide which jobs, units or employers get a licence.
  2. KoppelHet reads the changes from AFAS and builds a file in LinkedIn Learning's format.
  3. New employees are already in LinkedIn Learning before the start, without a licence and without a welcome email; on the start date the licence is switched on.
  4. KoppelHet sends the file to LinkedIn, follows the processing and reports rejected rows to HR.
  5. The day after the termination date the licence is set to inactive.
AFAS Profit → KoppelHet → LinkedIn LearningSOURCEAFAS ProfitTARGETLinkedIn LearningKoppelHetmapping · logging · monitoringAFAS Profit → KoppelHet → LinkedIn LearningSOURCEAFAS ProfitTARGETLinkedIn LearningKoppelHetmapping · logging · monitoring
Out: Learner with name, work email and employee number as unique ID · Licence: active or inactive · Job as work_title · Groups per unit and employer

What to watch for with AFAS Profit and LinkedIn Learning

  • LinkedIn Learning only supports SCIM from Entra ID and Okta, and AFAS does not deliver SCIM. Without an identity provider in between, KoppelHet uses LinkedIn's file delivery over HTTPS. In the manual mode of that delivery KoppelHet can follow the processing and read the number of errors per file.
  • LinkedIn sends a welcome email as soon as a learner with an active licence is added, and not for an inactive one. AFAS often knows the start date in advance. KoppelHet therefore first puts new employees in the file as inactive and switches the licence on on the first working day, so the invitation only arrives then.
  • According to LinkedIn the unique ID must exactly match the ID single sign-on uses, including capitals. If your organisation signs in with the email address from Entra ID, KoppelHet aligns the unique ID with that instead of sending the AFAS employee number, so sign-in and delivery hit the same learner.
  • A group in LinkedIn Learning appears automatically as soon as a group/<name> column is in the file. If an organisational unit in AFAS gets a new name, a second group would therefore appear next to the old one. In that case KoppelHet sets everyone in the old group to 0 and reports the new group to the administrator.
  • LinkedIn wants a value in every column sent for every learner and an email address per row. In AFAS the work email is sometimes missing for employees without a computer workstation. KoppelHet holds such rows back and reports them to HR, so the rest of the file is processed normally.
  • A licence rule in AFAS terms, for example only employees with a permanent employment or only certain jobs, is applied again by KoppelHet every day. If someone moves from a temporary to a permanent contract, they get a licence without manual work if your rule says so.
  • The token for the HTTPS delivery is created by an administrator with full rights in LinkedIn Learning, and LinkedIn shows it only once. KoppelHet stores it encrypted in the platform; if it expires or is revoked, the integration reports that at the first failed upload.

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 · Basic

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

Do completed courses come back to AFAS?

Not in the first version. LinkedIn has an API for learning activity; completed courses as a course on the employee in AFAS can be added later as an extension.

Why not through Entra ID with SCIM?

That works if AFAS already runs through Entra ID and the licence rules fit there. Without that intermediate step KoppelHet delivers directly from AFAS, with the rules in AFAS terms.

What if we already have learners in LinkedIn Learning?

Then we first set the unique ID on existing learners, based on the email address, in a separate upload. After that the daily delivery starts.

Technical details for IT

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

  • AFAS is read with a dedicated GetConnector on employees, employments and organisational units, filtered on change date, through an app connector with only that connector.
  • LinkedIn Learning HTTPS Org Sync - upload to api.linkedin.com/media/upload with media_type=enterprise_csv_upload and auto_notify=false, processing through enterpriseUploadJobs?action=processFile, status and resultStats (updatedCount, errorCount) through enterpriseUploadJobs/{id}, result file through resultMedia. CSV in UTF-8 with lowercase headers, group/<name> with 0 or 1 and the product's licence column.

Which fields are transferred

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

Field in AFAS ProfitField in LinkedIn LearningNotes
Medewerkerunique_user_idOr the value your single sign-on uses as ID; case-sensitive
E-mail werkprimary_email_address
Roepnaampreferred_first_name
Voorvoegsel + Achternaampreferred_last_name
Functie (omschrijving)work_title
Organisatorische eenheidgroup/<eenheid>0 or 1
Werkgevergroup/<werkgever>
Licentieregel, Datum in dienst, Datum uit dienstLicentiekolom van het product (active of inactive)

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.