Skip to main content

Hi, I’m brand new to Docebo. My company is in the middle of onboarding and we are working on moving our data from another LMS.

I searched on the KnowledgeBase but couldn’t locate what I’m looking for.

 

Is there a way to upload a CSV with a list of users and courses they completed previously? This would be helpful so that data transfers to our Docebo LMS without having to enroll them and mark them complete manually.

Hello!

We don’t offer this in-platform currently, as we think it can compromise data integrity and open the door to a host of other problems if not done correctly. We do offer migration services through our professional services team, and we also expose APIs for performing various types of migrations. 


@msiegel When we changed LMS we exported our completion reports from our prior system and added them all as External Training. We did this using CSV files. I’d be happy to go into more details if  you need but if you go into the External Training, there is a Template you can download, test with just a few users/courses at first because it is picky, but once you get it, you will save A LOT of time and energy! If you need to report on this the only down side is you can’t pull eLearning and External Training reports in the same report, (could combine them in Excel afterwards though). 

If you do choose to mass enroll them via a CSV upload for an eLearning or Classroom session know that you can mass update enrollment as well. You are able to select the users you wish, then in the bottom corner of the page, click Edit Enrollment and change to “completed”. 

Tracking as External Training is just a bit different, but completely reportable and trackable, this would be my suggestion!  Good luck and welcome to Docebo! You are going to love it!


@msiegel When we changed LMS we exported our completion reports from our prior system and added them all as External Training. We did this using CSV files. I’d be happy to go into more details if  you need but if you go into the External Training, there is a Template you can download, test with just a few users/courses at first because it is picky, but once you get it, you will save A LOT of time and energy! 

Tracking as External Training is just a bit different, but completely reportable and trackable! Worked very well for us! Good luck and welcome to Docebo! You are going to love it!

Stephanie,

Thank you for that! I was just messing with the External Training to see if that might be an option. Glad to know I’m not reinventing the wheel there.


Hello!

We don’t offer this in-platform currently, as we think it can compromise data integrity and open the door to a host of other problems if not done correctly. We do offer migration services through our professional services team, and we also expose APIs for performing various types of migrations. 

I’ve never seen an LMS not allow completions to be loaded via CSV - let’s face it, just about everything superadmins do could compromise the data integrity if we didn’t do it correctly. 


According to the knowledgebase, this can be done using the Automation App, but the instructions are not clear on how exactly to do this. 


Hello!

We don’t offer this in-platform currently, as we think it can compromise data integrity and open the door to a host of other problems if not done correctly. We do offer migration services through our professional services team, and we also expose APIs for performing various types of migrations. 

I’ve never seen an LMS not allow completions to be loaded via CSV - let’s face it, just about everything superadmins do could compromise the data integrity if we didn’t do it correctly. 

I totally agree with what is said. I have worked on more than 6 LMSs and in all i was able to import completions via CSV being an admin. APIs are not known by all and it poses a challenge for most. Docebo should rethink about bringing it to SUPERADMIN role.


Hello!

We don’t offer this in-platform currently, as we think it can compromise data integrity and open the door to a host of other problems if not done correctly. We do offer migration services through our professional services team, and we also expose APIs for performing various types of migrations. 

I like several others would like to talk more about this decision. All other platforms we have use have allowed this, and it would be a huge benefit.  If the decision makers need more understanding of how beneficial this could be I am sure several of us would be willing to talk through it with them. While I appreciate you looking out for the integrity of the platforms, this is something that I believe has far more pros than cons. 


Hello!

We don’t offer this in-platform currently, as we think it can compromise data integrity and open the door to a host of other problems if not done correctly. We do offer migration services through our professional services team, and we also expose APIs for performing various types of migrations. 

Yeah I would like to point out that every other LMS that I have had experience with has the ability to upload enrollment data via a CSV. And this is not even superadmin access in most, it is learning administrators. I have encountered many situations in which a company may only have a list of learners that are taking a course and that comes from a third party so it needs to be loaded in. Most now days are via API but the backup plan should always be the ability to CSV upload.

 

And it should also be where one CSV can handle multiple courses/sessions and not the current setup where you have to have a separate CSV for each course you want to enroll multiple people.


Hello!

We don’t offer this in-platform currently, as we think it can compromise data integrity and open the door to a host of other problems if not done correctly. We do offer migration services through our professional services team, and we also expose APIs for performing various types of migrations. 

I agree with my fellow LMS admins above. All of the LMS systems I have previously worked on (Cornerstone, Successfactors, Netdimensions, Skillport, etc.) offer this functionality and it is critical to have as an LMS admin. I agree that it can be easy to use incorrectly and cause data integrity issues, which is why it should be a permission that is available to Superadmins and optional for power users. The beauty of this feature is, if a mistake is made, then you can re-upload a corrected CSV file to fix it :wink: Additionally, most smaller companies do not have the resources to successfully use API functionality.

Here are a few example scenarios of why this functionality is necessary: 

  • Learners completed a course in a 3rd party LMS and the information needs to be added to Docebo for compliance/reporting purposes. The learners have varying completion dates and scores, so the mass actions option to edit enrollment is not ideal. 
  • Learners are UNABLE to complete the ILT course within Docebo due to a lack of access to technology and/or Internet. Therefore, attendance and scores are tracked within an Excel file. With the current setup, the LMS admin needs to individually enroll and mark each learner complete.
  • A new Docebo feature is launched which converts the ILT functionality to UTC time. The admins are unaware of this and record the attendance in the wrong time zone. An admin needs to go through the enrollments and manually update the completion dates. 

 


Just out of curiosity, I have built a pretty simple setup using the api to do this role of thing for some of our admins, if this was offered as a tool add-on our service for your instance, would groups be interested?


Hi @Bfarkas, possibly, yes - I would definitely be interested, but I can’t speak for others on my team.

I will say that most admins (including myself) that I have encountered in my many years with LMS systems come from a training/HR background, so there would likely need to be some extra training involved with APIs and how they work. Generally this is why LMS systems allow CSV uploads because they are user friendly :)  

 


Totally understand, I should have been more clear. I understand this background, most of the members of my team are similar, so what I do is build tools for them that allows them to use things like CSVs to do what they need. I have done this for updating enrollemnts, completion status, add bulk users to manual groups, etc. For them I have a shared sharepoint site which they simply upload their file to and then it is processed in the background using the APIs and they are notified when complete and of any errors. I was thinking last night if this could be abstracted and packaged as a service for others.


@Bfarkas heck yes!!!! and Docebo should pay you for it :)


@msiegel When we changed LMS we exported our completion reports from our prior system and added them all as External Training. We did this using CSV files. I’d be happy to go into more details if  you need but if you go into the External Training, there is a Template you can download, test with just a few users/courses at first because it is picky, but once you get it, you will save A LOT of time and energy! If you need to report on this the only down side is you can’t pull eLearning and External Training reports in the same report, (could combine them in Excel afterwards though). 

If you do choose to mass enroll them via a CSV upload for an eLearning or Classroom session know that you can mass update enrollment as well. You are able to select the users you wish, then in the bottom corner of the page, click Edit Enrollment and change to “completed”. 

Tracking as External Training is just a bit different, but completely reportable and trackable, this would be my suggestion!  Good luck and welcome to Docebo! You are going to love it!

Agree on the bulk enrollment update, when we did that main historical data migration docebo helped us with the large files that needed to include start date, completion date, score, time, etc. but for the smaller cleanup files that we just wanted to show completion, I loaded the users via csv and then bulk updated the enrollment status to complete. 


Hi @msiegel I’m in exactly the same boat as you. Any updates? :grinning: Did you manage to import the user scores/ course completion succesfully? 

Thanks! 


Where I can sincerely understand concerns with data integrity (heck I have lived with an LMS showing problems with its data - #hotmess)?

There needs to be some give on this one. Not being able to import course completions via CSV with completion dates and times (that are not external learning) needs to be thought through a bit more carefully...the “productized” solutions need to be expanded to meet the ongoing need as well as historical loading.

My game for the next few years is going to be helping people “see the light” and bringing them towards an implementation that involves migrating records as a one off as well as scheduled job.

Is there someway to resurface this idea and bring it back up?


@Nazneen Halim we did not find a workaround for this. There was a suggestion thread on it, I’ll see if I can find for you to vote on. 


Thanks @angel.maenza 


We definitely need to be able to do this.

We ‘paid’ for the historic migration service, but there are now other lists we need to import and not being able to set a ‘completion date’ when bulk enrolling makes me thing its less about data integrity and more about losing a paid service. 

Right now i have to decide whether to bulk enrol 1200 people on to a course and manually spend a day inputting each completion date manually, or accept i have to report out of 2 different systems.  Come on Docebo - this should be a standard feature.

 

 


We definitely need to be able to do this.

We ‘paid’ for the historic migration service, but there are now other lists we need to import and not being able to set a ‘completion date’ when bulk enrolling makes me thing its less about data integrity and more about losing a paid service. 

Right now i have to decide whether to bulk enrol 1200 people on to a course and manually spend a day inputting each completion date manually, or accept i have to report out of 2 different systems.  Come on Docebo - this should be a standard feature.

 

 

Well put...loading historicals now-a-days is a pretty standard function….


Totally understand, I should have been more clear. I understand this background, most of the members of my team are similar, so what I do is build tools for them that allows them to use things like CSVs to do what they need. I have done this for updating enrollemnts, completion status, add bulk users to manual groups, etc. For them I have a shared sharepoint site which they simply upload their file to and then it is processed in the background using the APIs and they are notified when complete and of any errors. I was thinking last night if this could be abstracted and packaged as a service for others.

This would be utterly fantastic!!


I’ve had to do this a couple of times and this is the way I’ve found that’s a few extra steps than having a CSV uploader would be, but still saves a lot of manual effort. Before figuring out this process, I hadn’t really even known that APIs existed, so I hope that most of us LMS admins without technical backgrounds won’t be intimidated by this!

NOTE that this only works if users haven’t been enrolled already. If you need to do this for specific learning objects instead of just the course level, you can do almost the exact same thing but with the call Batch insert of Tracking for Learning Objects and updating your CSV headers accordingly.

 

Historical Load Process using API:

  1. Create course shell with unique Course Code

     

  2. Create CSV file with the following headers: course_code, username, status, enrollment_date, completion_date, score
  3. Fill out the columns with the data you need to import with a few notes:
    1. username - make sure it’s the docebo username, not the old username. sounds obvious but i’ve messed that up a few times.
    2. status should be “completed”
    3. enrollment_date needs to be in YYYY-MM-DD hh🇲🇲ss format
    4. completion_date needs to be in YYYY-MM-DD hh🇲🇲ss format
    5. score is a number between 0 and 100, also adding the score is optional. If you don’t need it just leave this column out.
  4. Fill in the CSV with each record as a new row

     

  5. If you have a CSV splitter tool, use that to split this file into many different files with 100 lines and have the headers in each file. Otherwise do this manually :( 
  6. Open the API explorer in one tab/window. Scroll down to Enrollment > Batch import enrollments.
  7. Authenticate by clicking OAUTH button and following the prompts
  8. Click on the body sample so that it fills out the box, and then remove most of the body so that it looks like this
    {
      "items": 
    }

     

  9. Open this CSV to JSON converted in another tab/window https://www.convertcsv.com/csv-to-json.htm
  10. Upload your first file into the converter and then copy the output.

     

  11. Paste the output after "items": in the API explorer

     

  12. Click TRY
  13. Hopefully if all goes well, it will tell you that it worked! If it gives you a syntax error, ask for help from someone who understands programming if you have to 😞

     

  14. Repeat steps 7-11 until you’ve run all of your CSV files. Put on some nice music and mindlessly click for a while - it will take less time than you think!

 

 

I have found this process super useful, hope this helps someone else :)


I’ve had to do this a couple of times and this is the way I’ve found that’s a few extra steps than having a CSV uploader would be, but still saves a lot of manual effort. Before figuring out this process, I hadn’t really even known that APIs existed, so I hope that most of us LMS admins without technical backgrounds won’t be intimidated by this!

NOTE that this only works if users haven’t been enrolled already. If you need to do this for specific learning objects instead of just the course level, you can do almost the exact same thing but with the call Batch insert of Tracking for Learning Objects and updating your CSV headers accordingly.

 

Historical Load Process using API:

  1. Create course shell with unique Course Code

     

  2. Create CSV file with the following headers: course_code, username, status, enrollment_date, completion_date, score
  3. Fill out the columns with the data you need to import with a few notes:
    1. username - make sure it’s the docebo username, not the old username. sounds obvious but i’ve messed that up a few times.
    2. status should be “completed”
    3. enrollment_date needs to be in YYYY-MM-DD hh🇲🇲ss format
    4. completion_date needs to be in YYYY-MM-DD hh🇲🇲ss format
    5. score is a number between 0 and 100, also adding the score is optional. If you don’t need it just leave this column out.
  4. Fill in the CSV with each record as a new row

     

  5. If you have a CSV splitter tool, use that to split this file into many different files with 100 lines and have the headers in each file. Otherwise do this manually :( 
  6. Open the API explorer in one tab/window. Scroll down to Enrollment > Batch import enrollments.
  7. Authenticate by clicking OAUTH button and following the prompts
  8. Click on the body sample so that it fills out the box, and then remove most of the body so that it looks like this
    {
      "items": 
    }

     

  9. Open this CSV to JSON converted in another tab/window https://www.convertcsv.com/csv-to-json.htm
  10. Upload your first file into the converter and then copy the output.

     

  11. Paste the output after "items": in the API explorer

     

  12. Click TRY
  13. Hopefully if all goes well, it will tell you that it worked! If it gives you a syntax error, ask for help from someone who understands programming if you have to 😞

     

  14. Repeat steps 7-11 until you’ve run all of your CSV files. Put on some nice music and mindlessly click for a while - it will take less time than you think!

 

 

I have found this process super useful, hope this helps someone else :)

Theoretically could do this with live sessions too right??! Amazing! I haven’t played with the API or batch jobs yet but I’m definitely going to try! I wish it would work for people already enrolled, but I suppose for those cases I could bulk unenroll with the same file in the csv section and then re enroll with all the correct data! 


@gfenton never tried it for ILT but if you poke around in there, there’s lots of calls regarding sessions. Also there is a call to “Update enrollment of users to courses (Multiple update)” but it’s waaaay less nice 😞 You need the user IDs, not usernames, and works to update multiple records but with the same information - so you would need to run it for every day where a completion happened. I would definitely go for starting fresh if it’s possible.


Can I just give a GREAT BIG shout out to @rebeccam !

Thank you so much for sharing this with such great instructions. I have been puzzling through trying to work out how to do this in the best way all week. This worked first try and will do exactly what we need.  I agree with everyone else comments that this should be standard functionality as it is in most LMS systems. Is there an idea someplace we can all add our votes to?

 

Have a great weekend.

Best,

Aimee


Reply