Odoo eLearning Implementation
Courses, quizzes, certification and student progress.
Odoo eLearning publishes courses with video, quizzes and certification, either free or paid through eCommerce. Common uses are customer onboarding, partner enablement and internal training records.
Odoo eLearning is the website_slides app. It is LGPL licensed and ships in Community, not as an Enterprise upsell. A course holds sections, and sections hold content items: an uploaded PDF, an image, an article written in the Odoo editor, a video by link, a quiz, or a certification. Courses run on the same partner, product, invoice and portal records as the rest of the database. That is the reason most buyers pick it over a standalone LMS. The learner, the customer and the invoice are one record.
It is not a replacement for Moodle or a corporate LMS. There is no SCORM, xAPI or AICC player. Video is played from YouTube, Google Drive or Vimeo rather than stored in Odoo. A certificate carries no expiry date. What Odoo does well is training with a commercial or operational edge: customer onboarding that starts from a confirmed sale order, partner enablement behind a portal login, and internal training whose completion record sits beside the person it belongs to.
There are two course types and they behave differently. A Training course is an ordered set of lessons with a completion percentage per attendee. A Documentation course is a browsable library with no fixed order, where a nominated group can publish content directly. The choice changes how progress reads later, so make it before the catalogue is built.
Who Odoo eLearning is for
- → Software, equipment and machinery vendors who want customer onboarding to start on its own once an order is confirmed.
- → Companies running reseller or partner enablement, where the visible course list differs by audience and has to stay behind a login.
- → Training businesses selling to the public, who need a catalogue, checkout, tax handling and invoices rather than a course player alone.
- → Employers with recurring internal training obligations who need a defensible record of who completed what, on what date, with the answer sheet behind it.
- → Teams already on Odoo for sales or HR, where the value is the join between a course and a customer, an order or an employee, not the player itself.
- → Not for institutions that must run purchased SCORM packages, need proctored exams, or want hours of video hosted in the same system. Odoo provides none of the three.
Key features
- ✓ Course and lesson structure
- ✓ Quizzes and certification
- ✓ Paid courses through eCommerce
- ✓ Progress and completion tracking
- ✓ Certificates on completion
- ✓ Forum and Q and A per course
What Odoo eLearning actually does
Course structure and what actually uploads
A course holds sections and sections hold content items. Two things upload into the database: a PDF and an image. Everything else is a link, so an Office document arrives from Google Drive and a video arrives as a YouTube, Google Drive or Vimeo URL. Odoo reads an uploaded PDF and pre-fills the item duration from its page count, which is worth correcting by hand because those durations add up into the length advertised on the course. Items publish one at a time, so a live course can grow without being taken down, and the content list that spans every course is the fastest place to publish in bulk.
Quizzes, karma and what karma controls
A quiz attaches to any content item, with choice based questions, a correct answer flag and a comment shown to the learner after they answer. Karma is awarded on the first pass and drops on later attempts: the shipped defaults are 10, 7, 5 and 2 points for the first, second, third and every further attempt, each editable per item. Finishing the course awards a further amount set per course. Karma sits on the user record rather than the attendee record, it feeds ranks and badges, and the karma thresholds on a course decide who may review it, comment on a lesson or vote.
Certification through Survey
Certification is a Survey, joined to the course by a certification content item. The survey carries the required score, which defaults to 80 percent, an attempt cap that defaults to one, an optional time limit and random question selection per section. On a pass it can email the certificate and award a badge, both switches on the survey rather than development. Six certificate layouts ship, modern and classic in three colours, and anything beyond those is a report template. Each attempt is stored as a survey submission tied to the attendee, so the answer sheet survives an audit, not just the result. Survey and the bridge into eLearning are both Community.
Enrolment, visibility and the attendee record
Enrolment is Open or On Invitation, with On Payment appearing once the eCommerce bridge is installed. Visibility is a separate setting: Everyone, Signed In, or Course Attendees. Joining creates an attendee record holding a completion percentage and a status of invited, joined, ongoing or completed. An invited record that never turns into progress is cleared by the autovacuum after about three months. A course can also auto enrol the members of a user group, and one course can be set as a prerequisite for another, which is the nearest thing to a learning path.
Selling courses
Set enrolment to On Payment and the course points at a service product sold through the normal checkout, with pricelists, coupons, taxes and fiscal positions behaving as they do for any other product. Confirming the order adds the ordering partner to the course. The revenue, the invoice and any credit note stay in the accounting already in use, so finance is not reconciling a second platform against the bank. One course line enrols one person, so selling a block of seats to a company is a decision to take before the pricing page is written.
The public catalogue
The course list is a website page, themed and edited like any other page rather than a separate portal skinned to match. Courses carry tags, tags sit in groups, and the groups become the filter blocks a visitor uses to narrow a large catalogue. Individual content items can be flagged as a preview, which lets a visitor read a real lesson before signing up and gives search engines something to index beyond a marketing description. Reviews and comments are per course and gated by karma, so a fresh account cannot post the moment it lands.
Reporting and evidence
Attendee records can be filtered and grouped by course and status, each carrying a completion percentage. That number is recomputed rather than kept as a historical fact: it is completed items over published items, so it moves whenever the course moves. For anything that has to stand up later, the durable record is the survey submission with its date, score and stored answers, which no change to the course structure rewrites.
How we configure Odoo eLearning
Fix the content model before anything is uploaded
Completion is stored per content item and is deleted with it, so restructuring a live course removes the history recorded against the items you drop. Publishing works the same way in reverse. Completion is completed items over published items, so adding one lesson to a finished course pushes every attendee below 100 percent, flips them back to ongoing and reverses the karma awarded for finishing. Decide granularity, naming, and the rule for adding content later. The usual answer is a new course per intake rather than edits to a course people have already completed.
Decide where the video is hosted
A video item takes a URL and nothing else. The accepted sources are YouTube, Google Drive and Vimeo, and there is no upload path for a video file, so hosting is settled outside Odoo before the first lesson is built. Unlisted or domain restricted links keep content semi private, but check the player is reachable from the networks your learners actually sit on, including corporate proxies and countries where a given platform is blocked. PDF uploads are the part that touches infrastructure: they pass through the reverse proxy, so the nginx body size limit and the Odoo request timeout both need raising, and every file lands in the filestore and in the backup.
Design the certification before building it
Write the survey first: the question pool, the points per answer, the passing score, the attempt cap and the time limit. The defaults are 80 percent to pass, one attempt and a ten minute limit, and each deserves a decision rather than acceptance. Settle whether a pass emails the certificate and whether it awards a badge, since both are configuration on the survey. Then agree who may read failed attempts, because that answer changes the record rules on survey submissions and it is an uncomfortable thing to tighten after managers have already seen the report.
Paid enrolment, tax and payment methods
The course product needs the correct tax, a fiscal position for learners in other countries, and a payment provider carrying the methods local buyers actually hold. Digital training changes where tax is due in most of the markets below, so build the fiscal positions before the catalogue rather than after the first cross border order. Refunds are the other thing to settle early: crediting an invoice does not remove anyone from a course, so agree who withdraws access, on what trigger, and what happens to the completion record when they do.
Migrating from an existing LMS
The files are the simple part. Learners have to be matched to existing partners by email first, or the import splits one person across two records and the history follows the wrong one. Then decide how much history to carry. Item level completions need a matching content item in Odoo, which rarely survives a restructure, so the workable compromise is one completion record per course plus the old certificate stored as an attachment on the partner.
Where Odoo eLearning projects go wrong
Assuming SCORM will run
Odoo has no SCORM, xAPI or AICC player. Content bought from a library, or authored in Articulate or iSpring, will not play. Two routes work: rebuild the material as Odoo lessons with quizzes, or keep the old LMS as the player and write completion into Odoo over the API so the training record still sits with the customer or the employee. This single question moves scope more than anything else on an eLearning project, so ask it in the first meeting rather than during the build.
Treating karma as a grade
Karma is a gamification score. It rises with quiz passes and course completion, it is reversed when an attendee is set back to not completed, and it is shared with the forum. It is not a mark anyone should defend to an auditor. Where someone needs a pass or fail with a date and an answer sheet, that is a certification survey, which is a different object holding different data.
Completion that nobody assessed
A learner can mark an item complete without opening it. The self mark button is withheld only on items that carry questions, so a course built from PDFs and videos produces completion records that prove a toggle was clicked. Where the evidence has to mean something, put questions on the items that matter and a certification at the end. Compliance reviewers ask how completion was established, and clicked is a poor answer.
One attempt, one failure, one support ticket
The certification attempt cap defaults to a single try. A learner who fails is then locked out, and the ways back are raising the cap or deleting the attempt, which destroys the record the certification exists to produce. Set the cap deliberately, decide in advance who may grant a retake, and where failures have to stay visible, raise the limit rather than clearing submissions.
Portal signup left on invitation only
Enrolment attaches a partner to a course, but the learner still needs a portal user to log in and read it. If the website customer account setting is left on invitation only, a buyer who has paid cannot create an account, and the access sits on a partner nobody can use. Either open free signup on the site carrying the catalogue, or send portal invitations as part of the enrolment flow. Test that path with a real external address before launch.
The course nobody can see
Five settings, checked in this order: the course is unpublished, individual content items are unpublished, visibility is set to Signed In or Course Attendees, the enrolment policy is On Invitation when public was intended, or on a multi website database the course belongs to the other website. Most reports of a broken course are one of those five, set for a different audience than the one complaining. Logs come later.
What it works with
- + Website, which eLearning depends on, for the public catalogue and the pages around it
- + eCommerce, which adds the On Payment enrolment option and the course product line
- + Survey, where certification, scoring, attempt limits and the certificate layout live
- + Gamification, installed underneath eLearning, which supplies the ranks and badges karma feeds
- + Forum, for per course questions that would otherwise arrive as support tickets
- + Email Marketing for announcements, with Marketing Automation on Enterprise for enrolment triggered follow up
- + Employees, for internal training, where an onboarding plan can raise an activity pointing a new hire at a course in their first week
- + CRM, when a free course is the lead magnet and a signup should raise an opportunity against the same partner
Odoo eLearning by country
Saudi Arabia (KSA)
Course sales to individuals are simplified tax invoices under ZATCA Phase 2: 15 percent VAT, a QR code carrying the seller, the VAT number, the timestamp and the totals, and reporting to Fatoora within 24 hours of issue. Sales to a business are standard invoices needing the buyer VAT number and clearance before they are handed over. The split matters because a public catalogue and a corporate training deal run through the same product and the same checkout.
United Arab Emirates
The Electronic Invoicing System covers B2B and B2G, so a consumer course sale sits outside it while the same course billed to a company does not. Filing runs through an Accredited Service Provider rather than direct to the authority, and go live is staged by taxpayer size, so confirm the date that applies to the entity rather than the one announced first. Course products carry 5 percent VAT, and an electronically supplied service follows the customer for place of supply, so fiscal positions for learners outside the UAE belong in the build.
India
An online course sold to Indian consumers is an OIDAR supply, so GST follows the recipient location and the invoice line needs its service accounting code. Business customers above the e-invoicing turnover threshold need an IRN and a signed QR code from the portal before the invoice counts. Odoo's Indian e-invoicing modules handle that once the GSP credentials are configured, but they sit on the accounting side and nothing inside eLearning triggers them.
Pakistan
Sales tax on training services is provincial rather than federal, so the rate and the registration follow the province, usually the Sindh Revenue Board or the Punjab Revenue Authority, while FBR digital invoicing governs the goods side. Checkout decides more than tax here. JazzCash and Easypaisa are what most buyers hold, Odoo ships a provider for neither, so a paid catalogue needs that integration answered before launch.
Turkey
A course sold to a consumer is an e-Arsiv document reported to GIB, while a sale to a registered taxpayer goes out as e-Fatura over the same UBL-TR flow, both signed with a financial seal through a licensed private integrator. Odoo ships no Turkish e-invoicing connector in either edition, so that link is custom work costed separately from the eLearning build. Archived invoices have to stay retrievable inside Turkiye, which is a hosting decision rather than a setting.
United Kingdom
Education is VAT exempt only where an eligible body supplies it, so a commercial online course is normally standard rated, and a course delivered with minimal human involvement counts as an electronically supplied service for place of supply. VAT records must be kept digitally and filed under Making Tax Digital. The HMRC submission lives in Odoo's Enterprise accounting reports, so a Community deployment keeps the records in Odoo and files them through other software.
Germany
Course completion data is employee performance data, so the works council holds co-determination rights over any system recording who finished what and when. Agree the reporting scope with them before go live rather than after the first manager report circulates. Paid course invoices fall under GoBD record keeping, with the retention period for accounting vouchers now eight years, and the tax adviser will expect a DATEV export.
France
A provider seeking CPF or other public funding needs Qualiopi certification, and the audit asks for evidence per course: attendance or connection records, assessment results and learner feedback. Attendee records and survey submissions cover that if the evidence set is agreed before the courses are built, because a later restructure loses item level history. Paid course invoices also fall under the e-invoicing reform, phased from September 2026 for large companies and September 2027 for smaller ones.
Odoo eLearning FAQs
Does Odoo eLearning need Enterprise?
No. eLearning, Survey and the certification bridge between them are Community, and so is paid enrolment through eCommerce. The Enterprise apps you might want nearby buy a different function rather than a better LMS: Marketing Automation for enrolment triggered journeys, Sign for a training agreement, Studio for adding fields without a developer, and the accounting reports that file some countries' VAT returns.
Do learners need paid Odoo user licences?
No. Attendees are portal users or public visitors, and Odoo charges per internal user. A thousand learners on portal logins add nothing to the subscription. The licences you pay for are the people building courses, reviewing submissions and reading the back office reports.
Can we import our existing SCORM courses?
There is no player for the package format, so a SCORM file will not run. Where the material is text, slides and video, rebuilding is usually less work than it sounds. Where the library is large or licensed from a vendor, keep the current LMS as the player and have it write results into Odoo over the API: create the attendee on the course, mark the matching items complete, store the score. Budget that bridge as integration work with its own test cycle, not as a setting.
Can we keep the course videos private?
Only as private as your video platform makes them. Odoo stores a URL and embeds the player, so there are no signed links, no expiring URLs and no DRM on the Odoo side, and a learner who copies the address can pass it to someone who never enrolled. Restrict at the platform instead, with unlisted or domain locked playback. For high value material the practical deterrent is watermarking and account discipline rather than a technical lock.
Can we sell a course to a company and enrol their whole team?
Not without a decision up front. Odoo grants the course to the buyer named on the order, and one course line produces one enrolment. Three routes are common: the buyer contact sends invitation links from the attendee list, your team creates the portal users during onboarding, or a short extension reads the seat count from the order line and enrols the named colleagues. The third is the only one that holds up past a handful of corporate clients.
Does a certificate expire, and can we run annual refresher training?
Odoo does not track certificate expiry. The pattern that works is to store the certification date and an expiry date, keep the survey submission as the permanent proof, and use a scheduled action to notify the learner and re-enrol them. Setting an attendee back to not completed overwrites their progress and reverses the completion karma, so capture the evidence before the reset rather than after.
Can the certification score written answers?
A free text answer is stored with the submission, but scoring in Survey works on the suggested answers of choice questions, so written text carries no points and cannot pass or fail anyone by itself. Two shapes work: score the choice questions and treat the written part as evidence a reviewer reads, or set an automatic pass mark and record the human sign off separately. Decide which before the question bank is written, because it changes the passing score.
Can one database serve courses in Arabic and English?
Yes for the interface and the website, including right to left layout. No for your content: a PDF, a video or an article is one file in one language. In practice you publish parallel courses per language and filter the catalogue by language or by website, which also lets pricing and the payment provider differ by market.
How do we show a course to some partners and hide it from others?
Set visibility to Course Attendees so only enrolled people reach the content, then control who becomes an attendee. Invitation links, auto enrolment for members of a user group, and membership created by a confirmed order all work. The group option keys off user groups rather than partner tags, so a tier held as a field on the contact needs a small automation to put the right people in the right group, and to take them out again when the tier changes.