Collecting and analyzing data with H5P — and opening up education maybe

Transparency note: I, the author of this post, have been an advocate of initiatives such as the OER movement for many years. Meanwhile, I have also become an employee of Joubel. Joubel provides the core team that’s developing the open source software H5P used for creating teaching and learning materials. However, this post is still a personal view.

Educational Data Mining (EDM) and Learning Analytics (LA) are among the top buzzwords of the EdTech scene right now. Both are all about storing and evaluating the content and meta data that has been produced by students. Why? You can e.g. recognize progress in learning. Some people also dream about predicting future performance or problems, while others even want to build platforms that can be adjusted to the learners. Throughout that process, while EDM has a rather reductionist focus and a tendency towards automation, LA favors a holistic view and human decision making and interventions. (cmp. Baker & Inventado, 2014, p. 62).

Both approaches share the need for data. One supplier for those could be the software H5P. It is an authoring tool which enables you to create a wide range of interactive tasks for the web. It spans from multiple choice quizzes or clozes over interactive videos and speaking excercises for pronunciation. Additionally, H5P offers several ways to gather data. This does not only mean to record the results of tasks that students have completed, but also to make note of small experiences such as seeking to a position in a video or switching from one answer option to another.

H5P was designed for creating Open Educational Resources (OER), so the developers try to avoid making technical decisions that could impede openness (cmp. Wiley, n.d.). Consequently, the software is free and the source code is openly licensed — and H5P offers several ways to handle data.

Get the data directly using plugins

You can use H5P on the software’s designated website, but many organizations and individual persons prefer to use it on their own technical infrastructure. Currently, there are plugins for Drupal, moodle, and WordPress. With those, you can record the results of many interaction types. This approach is convenient for moodle in particular, because the learning management system offers a gradebook that will be used for storing data. In consequence, you can use all the tools for analysis that moodle has in stock.

If you’re using WordPress, then you could have a look at the plugin H5PxAPIkatchu. It allows you to store quite detailed reports in a table, but it does not offer any features for analysis. This job is left to specialized software, and you can export data into a CSV file for transfer. It can then be used in spreadsheet programs easily, but you could also go for tools that are commonly used for data analysis, e.g a combination of Python, Jupyter, and scikit-learn or R.

For Drupal, there’s also a plugin to help you out. It bears the simple name Quiz. It will add some functionality for reportingto the content management system, and it can be used for H5P content.

Tapping the Experience API and …

While the aforementioned plugins offer basic functionaly, there’s a more versatile approach which is called Experience API (xAPI). It’s a standardized interface that is supported by H5P, and it was actually specifically designed for keeping record of students’ learning experiences. Furthermore, it can handle both: online based exercises or something that happens on-site — although for the latter it can be very tedious or even impossible to register what’s going on. In that case, you could e.g. use sensors or video recordings that can be interpreted automatically (cmp. Ochoa & Worsley, 2016, pp. 214-215). However, you should not forget to consider ethical implications and privacy issues (cmp. e.g. Ferguson, Hoel, Scheffel & Drachsler, 2016).

In xAPI, each dataset has the same basic structure. It always contains information about the actor or group of actors, a verb for describing what happened and an object that is dealt with. Some simple examples in common language are:

  • Student A answered multiple-choice question X.
  • Student group B watched 80 % of video Y.
  • Person C  attended seminar Z.

In addition to these plain data, there can be plenty more depending on the verb and object, e.g. dates, time periods, options chosen, answers given, scores, etc.

… push the data to a learning record store

When one of these xAPI statements has been created and wrapped up, H5P can forward it to a Learning Record Store (LRS) of your choice. That’s a platform which is specialized in handling the data that can become “big”. Also, it will provide you with different options for retrieval, visualization and analysis.

For Drupal, moodle and WordPress, there’s a plugin that you can use to send data to an LRS using xAPI:

Basically, all you have to do given one of these solutions, is to enter the address of the LRS and your credentials. Then the system can begin its duty right away. I already hinted at the fact that there are multiple LRS that you can choose from. For example, there is:

  • Grassblade: Commercial software, which needs to be installed on your own server or used as a service, e.g. via Scorm Cloud that offers several features on top.
  • Learning Locker: Free open source software with numerous features. Can be installed yourself or used as a paid service.
  • Watershed: Commercial Software, which is offered as a service only, but it’s free in the basic version. The extensive funtionality for evaluation is reserved for paying customers however.

Getting everything served on one plate

Shortly, the first version of will be completed and released. It will not only provide some more hosting capabilities than offers for free today — and will continue to do so.

Using, you will also be able to interleave H5P with many learning management systems that didn’t have this option before, e.g. Blackboard or Canvas. This is made possible by  LTI. It will no longer be necessary to use a plugin for a specific platform. Nevertheless, you will be able to seamlessly create content within your system and to retrieve and evaluate the results.

Using can also be useful if you don’t have your own learning management system but still want to know more about how your content is used. In the future, you will be able to use some tools for analysis, too, and it is also planned to make use of Learning Record Stores.connections to

Opening up education with data?

With all the ongoing hype around gathering data in so many fields, I wonder why they are seldomly given to those who actually produced them in the first place. Learning Analytics is no exception. I am not even arguing from a perspective of transparency as an idealist value, but from the perspective of Open Educational Practices. Among several other aspects, these embrace taking responsibility for one’s own learning process — yet without being left on one’s own (cmp. Mayrberger & Hofhues, 2013, p. 63). So, why are students often being patronized instead of giving them access to the data that were collected about them?

Students could be empowered to also reflect upon their learning process based on data and aggregated data. For example, seeing a meaningful visualization of their own procrastination could be more effective than recurring reminders by teachers. Also, having the means to track and think about their progress themselves will better help them to become a self-reliant person than constantly being told when to do what by a teacher or even by a computer system.

Based upon the access to the flow of data, the students could even build their own motivational system that suits themselves best. The tools to achieve this are basically in front of our noses already. The only thing left to do is make them talk with each other. One linking pin could be the software “If This Then That” (IFTTT) or a clone. It can read data from numerous services on the internet and trigger many actions of other services based on rules that you can define. A simple example could be to automatically store all the tweets that you like in a Google Spreadsheet. It doesn’t stop there though. Instead of services, you could also think of sensors of a smartphone or home automation devices.

Given the xAPI data provided by H5P you could imagine automated scenarios like these that students could set up for themselves:

  • If course completed, order video game at BestBuy.
  • If not done anything within five days, tweet “I desperately need your ideas for motivation. Now!”
  • If learning activity takes place at 2 AM, make coffee.

Yes, those are behaviorist measures that not everyone is going to like, but still there’s a difference to common scenarios: the students themselves decide voluntarily to bind themselves in the future. While those ulysses pacts are not necessarily free of paternalistic or external influence (cmp. e.g. Reamer, 1983), they can still enable learning settings that are more open than today’s.


The software H5P offers different ways to collect and evaluate data about the learning experiences of students. The most flexible and powerful option is to use the standardized Experience API. On the other hand, it still requires some effort for installing, configuration and maintenance. In consequence, it is rather suited for organizations or ambitious individuals. However, if you bother to use it, you do not only enlarge the data pool for Educational Data Mining and Learning Analytics. If you also provide students with the data and the right tools, too, you can also have a share in opening up the world of education.




The text and the illustration are licensed under a CC0 license. Feel free to do with it whatever you want to.

24 Replies to “Collecting and analyzing data with H5P — and opening up education maybe”

  1. Hey Oliver–great post, thanks for sharing. Wondering if you’re aware of any plans on Joubel’s part to add support for Caliper Analytics 1.1 statements? Caliper is IMS Global’s spec (, and while similar to xAPI in many respects, introduces a controlled vocabulary for actions, which has the benefit of making them comparable across tools (highly attractive to institutions running their own LRSes and trying to get an accurate picture of actors’ behaviors across multiple tool providers).

  2. Hi Oliver,

    Can you give an update on dialogue cards. The last update on the indiegogo page is 23 days ago and it says,
    “Dear contributors,

    the code required for the resume feature — and thus spaced repetition — has been reviewed by the core team and merged into the official repository today. The one step that’s left is releasing the update, so I hope that you’ll be able to use the H5P Hub to update your Dialog Cards content type very soon.”

    So can you tell me if this update has been rolled out? I am keen to use this. Also would like to know, the dialog card progress is saved to the WP user profile right? So if i clear cookies or log in with different computer or device my progress will still be saved right?

    Thanks for your work!

    1. Hi Callum!

      I just checked with Joubel, and they are planning to release it next week. Sorry for the delay.

      You are correct. The state is saved inside the host system’s database, so you will be able to access it from a different device or after wiping cookies. The only catch is that the state will be reset by the H5P core if the author changes the content, e. g. adds a card.


  3. Thanks Oliver.

    Question, when you say that the state will be reset by the core if the author changes the content by adding a card, is that the case if they create ANY new set/deck on a different part of the website? Or only if they add a card in the original deck ?

    Also, I read a comment on the indiegogo page with a request for you to make the same feature with Flashcards. I need this for the same reason as the author expressed, that it takes the temptation to cheat away. What would it take for you to make this for Flashcards? How much budget would this task be?


    1. Hi Callum!

      The reset is per content type, of course. Changing one deck of cards (one DialogCard content) will not cause all other decks (DialogCard contents) to be reset.

      I’d have to check the code of FlashCards first in order to get a good estimate. You’d have to add the repetition mode that could build upon what has already been done for DialogCards, you’ll have to add the results/buttons to the final screen, you’d have to implement the save content state feature, and you’ll have to add some options to the editor. I assume it would take two days at least, but it could also be four if there are some things that you’ll have to work around. The price tag for 2-4 days can really differ internationally.

  4. Thanks Oliver for your reply!

    OK thanks for investigating those things. Actually the ideal H5P content type for me to use spaced repetition would be the single choice quiz type

    Unlike flashcards and dialogue cards, there is existing xAPI support in here, which means I can integrate it easier inside my Learndash LMS (e.g. to trigger a lesson as complete upon completion of the quiz).

    To replicate what you did on dialogue cards on single choice quiz is it the same difficulty of work? or more obstacles? In summary, the preference would be this type, followed by flashcards in 2nd (and dialogue cards although useful, would be 3rd in usefulness because of the fact i mentioned about student honesty/reliability issues)

    Pls do get a quote when you get time and if I cannot afford to pay myself as I don’t have much budget, perhaps you could launch another Indiegogo campaign to fund it? I know there would be interest!


    1. Hi Callum!

      There is xAPI support for FlashCards, although it’s not documented on the example pages of The content type emits “interacted” and “completed” statements (but without a responce property it seems).

      The complexity should be about the same. You’ll have to do the same things (and Single Choice Set already has some form of a result screen, too), but the logic that’s required will vary.

      If I am supposed to work as a freelance contractor, I need to charge around 500 € per day (plus VAT if there’s no reverse charge rule). I know, if you’re not familiar with the business, that may sound way off the chart, but actually it’s rather on the lower end of what you will have to pay for a freelance developer in Germany — There’s a brief article on why, and there’s also a simple site for comparing rates globally.

      So, you should really consider your options if that’s beyond your budget. You could place a fund raising campaign yourself and use the money to hire someone (could be me, could be someone else). You can also find plenty of sites that allow you to offer fixed bounties for projects, there are sites for reverse auctions, etc.

  5. Many thanks for this great post!

    Regarding Moodle, there is a new plugin that catches the H5P xAPI events and send them to an LRS.
    It’s called “TRAX Logs” and it’s available here:

    There is a page dedicated to H5P in the documentation :

    The project page (currently in French):

    I would love to hear your feedback!


    1. Hi Sébastien!

      Thanks for reaching out! I am not much of a moodle expert, but I’ll checkout the plugin and add it to the list as soon as I come around to it.


  6. Hi oliver ,,,

    I am using H5P in Thinkific platform to teach my student. but I do not know how to store the data for their progress …

    Can you help me in that, since i do not have any coding background.

    1. Hi!

      It’s not possible to store data if you are embedding H5P content in other sites.

      Thinkific would have to implement H5P into their site, or someone would have to create an interface for embedding and Thinkific would have to support that. already features such an interface (using LTI, not common embedding).


  7. Hi,

    the wordpress-plugin wp-h5p-xapi that you mention is not available any longer (September 2021, closed due to “guideline violations”). Do you know of any alternative in order to send h5p-xapi data to a LRS like Watershed or to ScormCloud? I found wp-experience-api, but this plugin hasn’t been updated for 6 years by now and furthermore depends upon JSON-Api, which has also been closed due to “security issue”.

    By the way: Thank you very much for your great contributions!

    Michael from Hameln

    1. Hi Michael!

      That plugin is still on github: The “guideline violation” was that the plugin is not updated anymore – which in fact would be necessary as it has a couple of issues. In particular, if you want to run it from github, you’ll have to change a couple of lines of the code (see or to rename the folder inside the .zip file that you download from github to wp-h5p-xapi before installing.

      And no, sorry, I don’t know alternatives. Well, I “know” the plugins to send H5P’s xAPI statements to Grassblade, but they require you to use LearnDash, LifterLMS, GamiPress or WPCourseWare and I have never tested them myself.


      1. Thank you, Oliver, your answer helped me to download the plugin and make it work (by renaming the folder). I wonder wheter it will remain stable. Thanks again!

          1. Just one more question if you’ve got time for it. I installed your h5pxapikatchu plugin a while ago. It worked very smoothly until recently, when I decided to delete the statements (well over 3000 by then) as a cleaning-up. The deletion was an option in the backend. After that the plugin never worked again. Instead of xapi statements there is a message reading: Es sind keine xAPI-Informationen gespeichert. – I followed your suggestions in the faq (logging out, making sure that “Alles aufzeichnen” is checked, not firing from the backend), but to no avail. Strangely, the Watershed LRS does receive the xapi statements. So I uninstalled and reinstalled the h5pxapikatchu, but again, to no avail. Have you got any further suggestions for me or procedures I could follow? Thank you very much in advance.

  8. The message that you receive (“Es sind keine xAPI-Informationen gespeichert”) is to be expected, as there are now no statements stored.

    Have you already consulted the FAQ on that question?

    If yes: Any informative messages in the developer console (usually opened with F12)? Any error messages in the PHP server log?

  9. I get the following message in the console:

    POST 500

    The page is

    Maybe a memory limit error? I don’t know how much memory your plugin could consume. My provider contract allows for 512M. I set 512M in the php.ini. On the other hand, the webserver error log file does not contain any error messages.

    Confused :-/

    Best wishes, Michael

    1. In theory, the bug I just fixed (for PHP 8.0 and above) should not lead to a 500, but you could try to update to the latest version that I released today. Best I can suggest without getting some PHP error log.

  10. The HTTP response code 500 is just a general error than can be caused my manifold things. The server is simply telling you “I failed, but I don’t know why”.

    It’s clearly triggered by trying to in insert data via AJAX, but I the URL to the AJAX endpoint seems to be fine and the data sent is not malformed or something similar. I can’t say what’s going on.

    What “webserver error log” have you been checking? I assume the PHP error log might provide some more information.

Leave a Reply

Your email address will not be published. Required fields are marked *