- Overview
- Key Features
- Setting Up the Integration
- Sync Modes: How Your Accounts and Branches Line Up
- The Initial Sync
- Ongoing Sync
- Data Field Mappings & Source of Truth
- Monitoring and Troubleshooting
Overview
The Administrate-Docebo Integration eliminates manual work by syncing ILT/vILT operations (scheduling, planning, resources, learners, compliance) in real time, while keeping Docebo as the sleek, single front-end for learners.
- For Admins: Run all instructor-led classroom management, training operations, scheduling, planning, and communications in Administrate — no double entry, no errors.
- For Learners: A polished Docebo experience with always-accurate enrollments, progress tracking, and content access.
Key Features
1. People Sync: Always up-to-date user data
- Initial setup pulls users and branches from Docebo into Administrate.
- Ongoing bi-directional sync keeps Contacts and Accounts aligned.
2. Course, Event & Session Sync (Administrate → Docebo)
- Automatically sync ILT, vILT, and e-learning courses.
- Real-time updates for schedules, sessions, and instructors.
3. Content Metadata Sync (Docebo → Administrate)
- Training content remains in Docebo while metadata syncs back to Administrate.
4. Learner Provisioning (Bi-Directional)
- New Docebo users provision as Contacts in Administrate.
- New Administrate Contacts provision as Docebo users.
5. Enrollment & Completion Sync (Bi-Directional)
- Enrollments sync instantly.
- Completions, cancellations, and attendance update in real time.
6. Resources
- Resources sync to Docebo as classrooms when a session that books them is synced.
- Existing Docebo classrooms are reused where the name and Location match, so you don't get duplicates.
- Configure which room types sync as classrooms in Integration Settings.
Setting Up the Integration
Setup happens once, in four steps, and finishes with a one-time initial sync. Read Sync Modes before you start — you choose your sync mode during setup, and it is not something you can change yourself afterwards.
Before You Start
You will need:
- Docebo Superadmin access. Creating the OAuth2 app and the API user both require it.
- Administrate Super User access. The LMS Integration pages are restricted to Super Users.
- At least three free webhook slots in Docebo. Docebo allows a maximum of ten active webhooks per instance, and the integration creates three of them. If there aren't enough free slots, Administrate refuses the connection with the error "Could not verify available Webhooks slots to complete the setup." Retire unused Docebo webhooks and try again.
- The Administrate public key. Download it from Control Panel → LMS Integration.
Step 1 — Create the OAuth2 App in Docebo
- Go to Control Panel → API & SSO → Manage in Docebo.
- Add an OAuth2 app.
- Set the Redirect URI to
https://lms-integration.administratehq.com/oauth/callback. - Upload the Administrate public key you downloaded above.
Step 2 — Connect Administrate to Docebo
- Go to Control Panel → LMS Integration in Administrate.
- Select Vendor: Docebo.
- Enter your Docebo domain — the host name only, with no
https://prefix. - Enter the Client ID from the OAuth2 app and the username of a Docebo Superadmin.
- Check the notification emails. These addresses receive alerts when the integration hits a problem it can't resolve on its own. Administrate pre-fills the list with your Super Users; adjust it to whoever actually monitors the integration.
- Submit.
Administrate authenticates against Docebo straight away. If the credentials or permissions are wrong you'll see "Could not authenticate with API. Make sure the user has correct permissions." and nothing is saved.
On success the connection moves to the Pending Field Map status and you're taken to the settings step.
Step 3 — Choose Your Integration Settings
This page holds every decision the integration needs before it can run.
| Setting | What it does |
|---|---|
| Sync Mode | Determines whether Docebo branches and Administrate Accounts mirror each other. See Sync Modes. Set once, during first-time setup only. |
| Default Branch | Shown only for All Accounts in One Branch. The Docebo branch every Administrate Contact is placed into. You can change this later. |
| Docebo Classroom Sync | The Administrate Resource Types that are allowed to sync to Docebo as classrooms. Leave it empty and no resource ever becomes a Docebo classroom. |
| Virtual Meeting Link Host | Which system owns virtual classroom configuration — Administrate or Docebo. See Virtual Meeting Link Host. |
| Custom Field Mapping | Which custom fields sync, across Users, Branches, Courses, Sessions and Enrollments. Split into Required and Optional tabs. Only fields you map here ever sync. |
Sync Mode is a one-time decision. After the initial setup the Sync Mode control is disabled, because switching it would change how every Account, Contact and branch is interpreted. If you need to change it later, contact Administrate Support.
Step 4 — Save and Let the Initial Sync Run
Saving this page for the first time starts the initial sync. The connection moves to Initializing and the page tells you "This can take a few minutes. You can leave this page and check later." That's accurate — you can close the tab. The status updates on its own, and the detail is written to the Integration Logs as it goes.
When the initial sync finishes, the integration creates its webhooks in both systems and the status becomes Connected. Real-time syncing starts at that moment, not before.
Connection Statuses
| Status | Meaning |
|---|---|
| Not Configured | No connection exists yet. |
| Pending Field Map | Connected to Docebo, but the settings and field mapping haven't been saved, so nothing is syncing. |
| Initializing | The initial sync is running. Webhooks don't exist yet, so no real-time syncing happens. |
| Connected | Everything is live. |
| Error | Something failed that the integration couldn't recover from. Check the Integration Logs; your notification email addresses will usually have been alerted. Scheduled maintenance can return the integration to Connected on its own once the underlying problem clears. |
Sync Modes: How Your Accounts and Branches Line Up
Docebo organizes people into a branch tree. Administrate organizes them into an Account hierarchy. Sync Mode decides whether those two structures mirror each other or stay independent.
This is the setting that matters most if you train multiple companies, clients or departments out of one Administrate instance.
Branch Per Account
Each Administrate Account has its own Docebo branch, and vice versa. The two structures are kept in step in both directions.
- Docebo branch → Administrate Account. Every branch becomes an Account, with the parent relationship preserved. The branch code is stored on the Account so the two records stay linked.
-
Administrate Account → Docebo branch. Creating or renaming an Account creates or renames the branch in Docebo. If the Account's parents don't exist in Docebo yet, the integration creates the whole chain. A branch created this way gets the code
ADM-<Account ID>unless the Account already carries a branch code. - Contacts land in the matching Account. A Docebo user in the Acme North branch becomes a Contact on the Acme North Account.
- Users on the Docebo root branch become individual Contacts in Administrate — Contacts not attached to any Account. The reverse is also true: an individual Contact in Administrate syncs to the Docebo root branch.
- A Docebo user belongs to exactly one branch, so the mapping is one-to-one. The Contact's Account is set from the user's branch. Administrate is the more flexible of the two here — a Contact can also be a member of additional Accounts — but those extra memberships have no equivalent in Docebo and are not synced.
- Deleting works in one direction only. Deleting an Account in Administrate deletes its Docebo branch. Deleting a branch in Docebo leaves the Administrate Account in place.
- Branch custom field mapping applies. This is the only mode where it does anything.
All Accounts in One Branch
Docebo's branch structure and Administrate's Account structure are kept completely independent. Everyone is placed into a single Docebo branch that you nominate.
- No Accounts are created from Docebo branches, and no branches are created from Administrate Accounts. Your Account hierarchy is yours alone, and your Docebo branch tree is untouched by the integration.
- Every Contact created from a Docebo user is an individual Contact — not attached to an Account — regardless of which branch the user sits in.
- Every Contact synced from Administrate to Docebo goes into the Default Branch, no matter which Account it belongs to.
- Account changes in Administrate are ignored. Creating, renaming or deleting an Account does nothing in Docebo.
- Branch changes in Docebo are ignored, with one exception: if the Default Branch itself is deleted in Docebo, the integration logs an error and alerts your notification email addresses, because it no longer has anywhere to put new users.
- Branch custom field mapping does nothing in this mode.
Side by Side
| Branch Per Account | All Accounts in One Branch | |
|---|---|---|
| Docebo branches become Accounts | Yes | No |
| Administrate Accounts become branches | Yes | No |
| Where a synced Docebo user lands | The Account matching their branch | Individual Contact, no Account |
| Where an Administrate Contact lands in Docebo | The branch matching their Account, created if missing | The Default Branch |
| Account renamed in Administrate | Branch renamed in Docebo | Nothing happens |
| Account deleted in Administrate | Branch deleted in Docebo | Nothing happens |
| Branch created or renamed in Docebo | Account created or renamed | Nothing happens |
| Branch deleted in Docebo | Account left in place | Nothing happens (unless it's the Default Branch) |
| Branch custom field mapping | Applies | Ignored |
| Can be changed after setup | No — contact Support | No — contact Support (the Default Branch itself can be changed) |
Worked Example: A Multi-Company Setup
Say your Docebo instance looks like this, with three users sitting directly on the root branch and the rest distributed through the tree:
Root (3 users)
├── Acme Corp (2 users)
│ ├── Acme North (40 users)
│ └── Acme South (35 users)
└── Globex (60 users)
With Branch Per Account, after the initial sync Administrate contains:
- An Account for Acme Corp, with Acme North and Acme South as its child Accounts, and an Account for Globex.
- 40 Contacts on Acme North, 35 on Acme South, 2 on Acme Corp and 60 on Globex.
- The 3 root-branch users as individual Contacts, on no Account at all.
From that point the structures track each other. Create an Account called Initech in Administrate and a branch called Initech appears in Docebo with the code ADM-<Account ID>. Add a sub-branch Globex EMEA in Docebo and a child Account appears under Globex in Administrate. Enroll a Contact from Acme South in a course and, if they don't exist in Docebo yet, they're created inside the Acme South branch.
With All Accounts in One Branch and a Default Branch of Learners, after the same initial sync Administrate contains:
- No new Accounts. Your existing Account structure is exactly as you left it.
- 140 Contacts, all of them individual Contacts.
From that point, enrolling a Contact who belongs to your Acme Corp Account provisions them into the Learners branch in Docebo — not into an Acme Corp branch. Renaming or deleting Accounts in Administrate has no effect in Docebo, and reorganizing your Docebo branch tree has no effect in Administrate.
Which Mode Should You Choose?
The question underneath both modes is which system owns your organizational structure.
Branch Per Account treats the two systems as co-owners. A change on either side propagates to the other, so the Docebo branch tree and the Administrate Account hierarchy converge on the same shape. Choose it when:
- You train distinct client companies or business units and each one needs its own space in Docebo — separate catalogs, separate reporting, separate administrators.
- You want your Administrate Account hierarchy to be the organizational chart in both systems.
- You're happy for Account changes in Administrate to reshape the Docebo branch tree, and for branch changes in Docebo to reshape your Accounts.
All Accounts in One Branch assumes your organizational structure is owned upstream of Docebo and flows one way — typically HRIS → Administrate → Docebo, or simply Administrate → Docebo. Administrate holds the hierarchy, fed by your HR system or maintained directly, and Docebo is the delivery front-end rather than a source of organizational data. People who belong to an Account are created upstream and provisioned into Docebo from there. Choose it when:
- Your organizational structure is maintained in your HRIS or in Administrate, and you don't want Docebo's branch tree feeding back into it.
- Your learners are one population — typically internal employee training — and branch-level separation inside Docebo adds nothing.
- You already have a Docebo branch structure you want to manage in Docebo, independently of Administrate.
- Your Administrate Accounts exist for commercial or billing reasons that shouldn't be reflected in the LMS.
That upstream-owned model is why users arriving from Docebo sync in as individual Contacts in this mode. Where the hierarchy is owned upstream, anyone who genuinely belongs to an Account is created in your HRIS or in Administrate first and provisioned out to Docebo, so their Account is established on the way in. A user who exists only in Docebo has no upstream Account to inherit, and the integration doesn't infer one from the branch tree it has been told not to mirror.
If you're unsure, talk to your implementation contact before you save the settings page. Changing your mind afterwards is not self-service.
The Company Field and Multi-Company Instances
If your Administrate instance uses Companies to scope records, it's worth knowing exactly how the integration treats that field.
The integration never reads or writes the Company field. It isn't part of what syncs, in either direction or in either sync mode. When a Docebo branch updates an existing Account, only the name and the parent relationship are sent — the Company on that Account is left exactly as you set it. No sync, initial or ongoing, changes it.
Company can't be mapped. Field mapping covers custom fields on Users, Branches, Courses, Sessions and Enrollments. Company is a standard field, so it isn't available to map.
To control the Company on your Accounts, create them before the initial sync runs. During the sync, the integration looks for an existing Administrate Account whose name exactly matches the Docebo branch. If it finds one that isn't already linked to a branch, it links the two records together instead of creating a second Account. From that point the branch resolves to your Account, and its Company is preserved on every subsequent sync.
For a multi-company setup, the reliable sequence is:
- Create your Accounts in Administrate with the correct Company set.
- Name each one to match its Docebo branch exactly. Administrate requires Account names to be unique, so this is a clean one-to-one match.
- Complete the integration setup and let the initial sync run.
If a Docebo branch has no matching Account, the integration creates one, but it doesn't specify a Company when it does. Where a particular Company matters for a branch, create that Account ahead of the sync or set the Company afterwards.
Contacts that sync in as individuals have no Company. Contacts don't carry a Company of their own — they take it from their Account. So an individual Contact has no Company at all. That's every root-branch user in Branch Per Account mode, and every synced user in All Accounts in One Branch mode.
The integration needs Account access across every Company. Administrate checks Account permissions against the Company of the Account being created or updated. If the integration's access is restricted to particular Companies, syncs touching Accounts outside that scope fail with "This user is not authorised to update an Account" and the failure is recorded in the Integration Logs. If you see that error on a multi-company instance, contact Administrate Support.
The Initial Sync
The initial sync is the one-time job that establishes the baseline between the two systems. It runs once, when you complete setup.
What Triggers It
Saving the Integration Settings and Field Mapping page for the first time — that is, while the connection is in the Pending Field Map status. Saving the same page later, to adjust a field mapping or the Default Branch, does not re-run it.
Only one initial sync can be in flight at a time. A second attempt while one is running is rejected and logged as already in progress.
What It Does — and What It Doesn't
The initial sync runs two jobs:
| Job | Direction | What it covers |
|---|---|---|
| Locations | Administrate → Docebo | Every active Administrate Location is created or updated in Docebo. |
| People | Docebo → Administrate | Your Docebo branch tree and every Docebo user. |
When both are done, the integration creates its webhooks — three in Docebo, and one per event type in Administrate — and the status becomes Connected.
What the initial sync does not do, and this is the single most common surprise:
- It does not push your existing course templates, events or sessions to Docebo. Course and event data starts flowing at the moment the integration goes live. A template that is published (or edited) after go-live syncs; a template that has sat untouched for a year does not, until something changes on it.
- It does not backfill enrollments, attendance or results. Historical learner records stay where they are. Only activity from go-live onwards syncs.
- It does not pull Docebo locations into Administrate. Location sync is one-directional, Administrate → Docebo. See Location Sync & Country Handling.
- It does not sync anything in real time while it runs. The webhooks that drive real-time syncing are created at the very end. Changes made in either system during the initial sync are not picked up as they happen.
If you need historical course or enrollment data in Docebo, plan that as a separate data exercise with your implementation contact.
How the People Sync Walks Your Docebo Org Chart
The people sync starts at the Docebo root branch and works down the tree:
- Fetch the child branches of the current branch, 50 at a time.
- In Branch Per Account mode, create or update an Administrate Account for each of those branches, preserving the parent relationship. In All Accounts in One Branch mode this step is skipped entirely — the branches are still walked, but only so their users can be found.
- Sync the users who are direct members of the current branch, 50 at a time. Users in a sub-branch are handled when the sync reaches that sub-branch, not before.
- Repeat for every child branch, down to the leaves.
- Once the whole tree has been walked, fetch every user in the Docebo instance and sync any that weren't seen along the way. These are the users who sit only on the root branch.
Branches are processed in parallel, so a large tree doesn't have to be walked one branch at a time. If a branch fails to create in Administrate, its children are skipped rather than being orphaned, and the failure is written to the logs.
How Users Are Matched to Contacts
For each Docebo user, the integration works down this sequence:
- Already linked? If an Administrate Contact already carries that Docebo user ID, the Contact is updated in place.
- Match on email. Otherwise the integration looks for an Administrate Contact with the same email address: - Exactly one match, not yet linked to any Docebo user → the two records are linked. No duplicate Contact is created. - More than one Administrate Contact shares that email → the user is skipped and flagged in the logs. The integration will not guess which Contact you meant. De-duplicate the Contacts in Administrate and the user syncs on their next update. - The only match is already linked to a different Docebo user → the user is skipped and flagged in the logs. Two Docebo users cannot map onto one Administrate Contact.
- No match → a new Contact is created.
A few details worth knowing:
- Docebo's built-in
staff.supportaccount is deliberately skipped. - Which Account the new Contact lands on is decided entirely by your sync mode.
- Name matching works in the other direction only. When an Administrate Contact with no email address is pushed to Docebo, the integration searches Docebo for a user matching the full name and links to it if there is exactly one match. Coming from Docebo into Administrate, matching is on email.
Because of this, de-duplicating email addresses in Administrate before you run the initial sync is the highest-value piece of preparation you can do. Every duplicate is a user who silently doesn't sync until you fix it.
How Long It Takes and What You'll See
Duration scales with the number of branches and users. Small instances finish in a few minutes; instances with deep branch trees and tens of thousands of users take longer. You don't need to stay on the page.
When it finishes, a summary is written to Settings → Integration Logs → LMS Integration recording:
- Branches processed
- Users processed on the root branch
- Users processed on other branches
- Total sync duration
If the sync fails, an entry is logged with the failing task and error, and your notification email addresses are alerted.
Ongoing Sync
Once the status is Connected, changes flow through webhooks in both directions, usually within seconds.
What Syncs, and Which Way
| Entity | Direction | Triggered by |
|---|---|---|
| Branches ↔ Accounts | Bi-directional (Branch Per Account only) | Branch or Account created, updated or deleted |
| Users ↔ Contacts | Bi-directional | User or Contact created or updated, or a user assigned to a branch |
| Locations | Administrate → Docebo | Location created, updated or deleted |
| Resources → Classrooms | Administrate → Docebo | A resource of a configured type is booked on a session |
| Course Templates → Courses | Administrate → Docebo | Template created or updated. ILT and Blended templates become Instructor-Led courses; a draft template syncs as an unpublished Docebo course, and publishing it publishes the Docebo course |
| Self-paced (LMS) Events → Courses | Administrate → Docebo | Event created or updated. These become e-learning courses in Docebo |
| Events → Sessions | Administrate → Docebo | Event created, updated or cancelled |
| Sessions → Events | Administrate → Docebo | Session created, updated, cancelled or deleted |
| Enrollments | Bi-directional | Learner added or cancelled in Administrate; enrollment created, updated or deleted in Docebo |
| Attendance & Results | Bi-directional | Attendance marked or a result recorded in either system |
| Training material metadata | Docebo → Administrate | Training material created, updated or deleted |
Provisioning People On Demand
The integration provisions people as it needs them, so you rarely have to sync a person manually:
- Adding a learner in Administrate whose Contact has no Docebo user creates that user in Docebo first, then enrolls them. Where they land follows your sync mode: the branch matching their Account hierarchy in Branch Per Account (creating branches if needed), or the Default Branch in All Accounts in One Branch.
- A Contact with no email address is given a username built from their first and last name.
Two things will stop an enrollment from syncing, and both are logged rather than retried:
- The event's course template isn't in Docebo yet. There's no Docebo course to enroll into. Publish or update the template so it syncs, then re-save the learner.
- An enrollment made in Docebo for a user who has no linked Administrate Contact. The integration can't tell which Contact to attach the learner record to, so nothing happens in Administrate. Check why the user hasn't synced — a duplicate email is the usual reason.
Self-Healing and Pause Healing
The integration corrects drift on its own. When something changes in Docebo that Administrate owns — a session date edited directly in Docebo, say — the integration puts the Administrate value back and records what it did. A scheduled maintenance job also re-enables any integration webhook that has been disabled, and can move a connection from Error back to Connected once the underlying problem clears.
If you're running a bulk import into either system, ask Administrate Support to pause healing first. While paused, maintenance won't re-enable webhooks and drift correction is suppressed, so an import doesn't set off a cascade of corrections. It stays paused until it's explicitly turned back on.
Data Field Mappings & Source of Truth
Standard Field Mappings (Administrate → Docebo)
When Course Templates and Events are synced from Administrate to Docebo, the following standard fields are mapped:
- Course Title → Docebo Course Name
- Course Code → Docebo Course Code
- Language → Docebo Course Language
- Course Category → Docebo Course Category
- Max Places (Event level) → Docebo Session capacity
- Course Description → Docebo Course Description
ILT and Blended Course Templates sync as Instructor-Led Courses in Docebo. Sessions in Administrate sync as Sessions within the corresponding Docebo Course.
Event Mapping (Event = Session in Docebo)
- Code → Session 'Code'
- Title → Session 'Name'
- Maximum Students → Session 'Maximum enrollments'
- Virtual Classroom → Event collaboration tool. See Virtual Meeting Link Host below.
Session Mapping (Session = Event in Docebo)
- Code → Administrate requires a code for each session. This code is typically the same as your event's code and is automatically set when you create an event. This field does not sync to Docebo because Docebo doesn't support a code on events
- Title → Event 'Name'
- Start Date/Time → Event date & Event start time
- End Date/Time → Event end time
- Location → Event venue location
- Time Zone → Event Time Zone
- Instructor → Event instructor
- Resource (room type) → Event classroom. See Classroom Sync.
- Resource Capacity → Classroom seats (new classrooms only; defaults to 1 if unset)
Virtual Meeting Link Host
Control Panel → LMS Integration → Virtual Meeting Link Host decides which system owns virtual classroom configuration. Set it to whichever system your team actually uses to create meeting links.
Administrate (the default)
- Administrate is the source of truth. When a virtual classroom is set on an Administrate event, its link is pushed to Docebo and overwrites whatever is there.
- A virtual classroom configured directly in Docebo is not pushed back to Administrate.
- Because Administrate owns the value, virtual classroom fields it doesn't send are cleared by Docebo on update.
Docebo
- Docebo is the source of truth. The integration preserves the webinar configuration set in Docebo and never overwrites it with the Administrate value.
- Use this when your instructors or LMS administrators create meeting links inside Docebo.
Custom Field Mapping
The integration supports mapping of Custom Fields across the following entities:
- Users
- Branches (only applicable if the Sync Mode is set to Branch Per Account)
- Courses
- Sessions
- Enrollments
Custom Field mappings are configured in:
Control Panel → LMS Integration → Field Mappings
Only fields explicitly mapped in this configuration will sync between systems. Mapped fields must be of compatible types — the page rejects a mapping between, for example, a text field and a date field.
Source of Truth by Entity
- Courses & Sessions: Administrate is the source of truth for scheduling, capacity (Max Places), instructors, and structural course data.
- Training Content: Docebo is the source of truth for e-learning content assets.
- Users: Bi-directional. Updates may originate in either system.
- Branches / Accounts: Depends on your sync mode. In Branch Per Account, both systems can originate changes. In All Accounts in One Branch, neither structure is synced at all.
- Completions & Enrollments: Bi-directional in real time.
- Locations: Administrate only.
- Classrooms: Administrate on first sync only. After a Resource is linked to a Docebo classroom, later changes to its name or capacity are not pushed. See Classroom Sync.
- Virtual classroom links: Whichever system you nominate as the Virtual Meeting Link Host.
Location Sync & Country Handling
Location synchronization is one-directional:
Administrate → Docebo
Locations created in Docebo do not sync back to Administrate during the initial sync or ongoing integration.
Creating Missing Locations
If a location exists in Docebo but not in Administrate, you must:
- Create the Location in Administrate manually.
- Set the Docebo Location ID as the
docebo_location_idexternal ID on the Administrate Location record.
Country Field Requirements
Docebo requires the Country field to be populated for all Locations. Administrate does not require this field.
When syncing a Location from Administrate to Docebo:
- If the Location has a value in the Country field (from the Edit Location modal), that value is used.
- If no Country is defined in Administrate, the integration currently defaults the Country to United Kingdom, unless a different default has been set for your connection.
The Region field in Administrate is not used during Docebo location synchronization.
To avoid unintended country defaults, ensure all Administrate Locations include an explicit Country value before syncing.
Classroom Sync
Administrate Resources sync to Docebo as classrooms. This happens as part of session sync — a resource is never synced on its own, only when a session that books it is synced.
When a Resource Syncs
A booked Resource becomes a Docebo classroom only when all of the following are true:
- The Resource's type is one you selected under Docebo Classroom Sync in the integration settings. If you selected none, no resource ever syncs as a classroom.
- The Resource has a Location.
- That Location has synced to Docebo — in other words, it carries a
docebo_location_idexternal ID. - The Resource's Location is the same Location as the session's. A room recorded at a different Location than the session it's booked on is skipped, even when both Locations have synced.
If a resource of a configured type is booked but one of the other conditions fails, the integration records why in the Integration Logs rather than failing the session sync. See When a room doesn't appear in Docebo.
Because classroom sync runs as part of session sync, a room booked on a brand new session usually appears in Docebo on the session's next update rather than the moment the booking is made.
If a session books more than one eligible room, only one of them becomes the classroom on the Docebo event — the earliest booking wins. Docebo events hold a single classroom, so a session occupying two rooms can't be represented in full.
The docebo_classroom_id External ID
When a Resource is synced, the integration stores the Docebo classroom's ID on the Administrate Resource as a docebo_classroom_id external ID. This is the classroom equivalent of docebo_location_id on Locations, and it's the record of the link between the two systems.
You can use it directly:
-
To adopt an existing Docebo classroom, set its Docebo ID as the
docebo_classroom_idexternal ID on the Administrate Resource. The integration will use that classroom instead of creating one. -
To force a re-sync, clear
docebo_classroom_idfrom the Resource. The next session sync re-runs the matching below from scratch.
Reuse, Link, or Create
Before creating anything, the integration checks whether the room already exists on the Docebo side. It works through three steps in order and stops at the first one that answers:
-
Does the Resource already carry a
docebo_classroom_id? If so, that classroom is used and nothing else happens. - Is there a Docebo classroom at the same Location with exactly the same name? If so, the integration links to it and records its ID on the Resource. No new classroom is created.
- Otherwise, a new classroom is created in Docebo and its ID is recorded on the Resource.
| What the integration finds | Creates a classroom in Docebo | Sets docebo_classroom_id
|
Appears in Integration Logs |
|---|---|---|---|
| The Resource is already linked | No | No — already set | No |
| A classroom with a matching name and Location | No | Yes | No |
| No match | Yes | Yes | Yes |
Two things follow from this that are worth planning around:
- Name matching is exact. If you already have classrooms in Docebo and want the integration to adopt them rather than create duplicates, the Administrate Resource name must match the Docebo classroom name character for character, and both must sit at the same Location. A trailing space or a different capitalization produces a second classroom.
- New classrooms take their seat count from the Resource's Capacity. A Resource with no Capacity set produces a Docebo classroom with a single seat. Set Capacity on your room Resources before their first sync.
What Classroom Sync Doesn't Do
Unlike most of the integration, classroom sync links once and then leaves the classroom alone.
-
Changes aren't pushed after linking. Renaming a Resource in Administrate, or changing its Capacity, does not update the classroom in Docebo. To correct a linked classroom, either edit it in Docebo directly, or clear the
docebo_classroom_idexternal ID on the Resource so the next sync re-matches or recreates it. - Deletions aren't pushed. Deleting a Resource in Administrate leaves its classroom in place in Docebo. Remove it there if you no longer want it.
When a Room Doesn't Appear in Docebo
If a session books a room of a configured type but nothing reaches Docebo, the integration writes a warning against the session in the Integration Logs explaining which condition failed. The entry counts the bookings by cause:
| Log detail | What it means | What to do |
|---|---|---|
| Resource Bookings of Eligible Type | How many booked rooms passed the resource type check. | If this is zero, the type isn't selected under Docebo Classroom Sync. |
| Missing Location | The Resource has no Location in Administrate. | Assign the room to a Location. |
| Missing Docebo Location External ID | The Location exists but hasn't synced to Docebo. | Check the Location's sync — see Location Sync & Country Handling. |
| Incompatible with Session Location | The room's Location isn't the session's Location. | Correct whichever record is wrong. |
The entry also lists the first few bookings by name and ID, so you can identify the record without re-running anything.
Category Handling
Docebo allows a Course to belong to a single Category. If multiple categories exist in Administrate, only the mapped category will sync.
Top level categories map to top level Docebo categories, and subcategories map to subcategories.
There is one thing to know about top level categories. Docebo gives each instance one main company category at the very top. In Administrate, you cannot pick a top level category once it has children beneath it. So to map a course to the top level Docebo category, create a subcategory in Administrate with the same name as that top level category. The integration spots the matching name and syncs it to the top level Docebo category for you.
Deeper Category Levels
Administrate and Docebo handle nesting differently. Administrate gives you one level below a parent, so you get a parent and its children. Docebo goes much deeper, so a child can have its own children, and those can have children too.
To handle this, the integration flattens the deeper Docebo levels into the subcategory name. It joins the names with a slash so you keep the full path in one subcategory.
Say Docebo holds this structure:
ParentCategory
- child
- sub-child
- sub-sub-child
Administrate maps it like this:
parent
- child/sub-child/sub-sub-child
The parent stays the parent. The deeper levels combine into a single subcategory name that shows the full path. This keeps the meaning of the Docebo structure even though Administrate only allows one level of nesting.
Automatic Corrections
During synchronization, the integration may automatically correct data mismatches to maintain consistency between systems. Examples include:
- Updating language fields to match supported Docebo values
- Aligning course categories based on current mappings
- Normalizing session capacity to reflect Administrate Max Places
These adjustments are logged in the Integration Logs for audit visibility.
Monitoring and Troubleshooting
Integration Logs
Administrators can review integration activity and diagnose issues by navigating to:
Settings → Integration Logs → LMS Integration
Logs include:
- Sync direction
- Payload details
- Error messages (if applicable)
- Status of automatic retries
The initial sync writes its own summary entry here, including the number of branches and users processed and how long it took. When something goes wrong that the integration can't resolve, the addresses in your notification email list are alerted as well.
The integration also creates webhooks in Administrate itself. Don't disable or delete them — scheduled maintenance will attempt to re-enable them, but the integration is not syncing while they're off.
Common Questions
A Docebo user didn't become a Contact. Why?
Almost always one of three reasons, all of which are recorded in the Integration Logs: more than one Administrate Contact shares that email address; the matching Contact is already linked to a different Docebo user; or the user is Docebo's staff.support account, which is skipped by design. Fix the duplicate in Administrate and the user syncs on their next update.
Why is a synced Contact not attached to any Account?
Either the Docebo user sits on the root branch (in Branch Per Account mode), or you're in All Accounts in One Branch mode, where every synced Contact is an individual Contact by design.
I created Accounts in Administrate but no branches appeared in Docebo.
You're in All Accounts in One Branch mode, which never creates branches. In Branch Per Account mode, check the Integration Logs for the Account create event.
I deleted a branch in Docebo but the Administrate Account is still there.
That's intentional. Branch deletions in Docebo are not propagated to Administrate. Account deletions in Administrate are propagated to Docebo.
A course template isn't in Docebo.
The initial sync doesn't push existing course templates. Edit or publish the template and it syncs. Also check that the template is ILT or Blended — self-paced content is driven by the event, not the template.
A learner enrolled in Docebo didn't appear in Administrate.
The Contact isn't linked to that Docebo user, so the integration has nothing to attach the learner record to. Resolve the user sync first.
Will the integration change the Company on my Accounts?
No. The Company field is never read or written by the integration, and it can't be mapped. See The Company Field and Multi-Company Instances.
Can I re-run the initial sync?
Not from the interface. Contact Administrate Support if you believe the baseline needs rebuilding.
Can I change my Sync Mode?
Not yourself. Contact Administrate Support. The Default Branch used by All Accounts in One Branch mode can be changed from the settings page at any time.
I renamed a room in Administrate but Docebo still shows the old name.
Classroom sync links a Resource to a Docebo classroom once and then leaves it alone — renames and capacity changes aren't pushed. Either rename the classroom in Docebo, or clear the docebo_classroom_id external ID on the Administrate Resource so the next session sync re-matches or recreates it.
A room synced to Docebo with only one seat.
New classrooms take their seat count from the Resource's Capacity in Administrate, and fall back to 1 when Capacity is empty. Set the seat count in Docebo, or set Capacity in Administrate and clear the Resource's docebo_classroom_id external ID so it syncs again.
I already have classrooms in Docebo. Will the integration duplicate them?
Not if the names line up. Before creating anything, the integration looks for a Docebo classroom at the same Location whose name matches the Administrate Resource exactly, and links to it if it finds one. Names that differ by so much as a trailing space produce a second classroom.
I'm about to run a large data import. Anything I should do first?
Yes — ask Support to pause healing for the duration, so the import doesn't set off a cascade of automatic corrections.