Your Moodle Stays. The Manual Work Goes.
OpenEduCat connects directly to your Moodle LMS and handles the work in between: student account provisioning, course structure sync, grade collection, and attendance reconciliation. Your faculty keep teaching in Moodle. Your administrators stop re-entering the same data in two systems.
8
Sync services
27
WS functions used
8
OEC models extended
8
Cron jobs
4.5+
Moodle compatibility
4
Retry backoff steps
Familiar Problems for Anyone Running Both Systems
Most institutions that run Moodle alongside a student information system eventually hit the same walls. These are the ones the integration eliminates.
Creating accounts twice
A new student gets added to your SIS, then someone manually creates their Moodle account. When they transfer or graduate, you hope someone remembers to clean up both systems.
Typing grades from Moodle into your SIS
Faculty submit grades in Moodle. An admin exports to spreadsheet. Another admin imports into the student records system. This happens every term, for every subject.
Attendance tracked in two places
Moodle records online attendance. Your SIS holds the official register. They never agree, and reconciling them at term end takes days.
Course setup is a copy-paste operation
You create subjects in your SIS, then recreate the same structure in Moodle. Rename a department in one system and nothing updates in the other.
How It Works
The integration uses a deliberate authority model. Each system owns the data it is designed to manage, and the two never fight over the same record.
OEC holds the administrative record
Students, faculty, departments, courses, and enrollment data live in OpenEduCat. This is the system of record for everything administrative. Moodle never overrides it.
Moodle receives what it needs
Each time a student or faculty record is saved in OEC, a background job pushes the change to Moodle within seconds. Course structures, batches, and enrolments follow the same path on an hourly schedule.
Grades and activity data flow back
Every 15 minutes, the integration pulls gradebook scores, assignment grades, and quiz results from Moodle into OEC. Attendance records sync on a 30-minute cycle. Moodle owns learning data. OEC owns the student record.
Conflicts are resolved by design, not by guessing
The authority model is explicit: OEC wins for administrative data, Moodle wins for learning data. There are no merge conflicts, no overwrites, no guessing which system is current.
- Students and faculty account creation
- Courses, programs, and departments
- Subjects as individual Moodle courses
- Batches as Moodle groups
- Enrolments and teacher assignments
- Gradebook scores every 15 minutes
- Assignment submission grades
- Quiz best-attempt results
- Course completion status
- Attendance: pull from Moodle (default)
- Or push OEC attendance to Moodle
- Or bidirectional with last-write wins
- Timetable sessions to Moodle calendar
What You Get in Practice
Concrete capabilities, not vague promises.
15 min
Grade sync frequency
Moodle grades arrive in OEC automatically every 15 minutes. No exports, no re-entry.
Real-time
Student account sync
A student saved in OEC triggers an immediate Moodle account provision via background job.
27
Moodle WS functions used
Covers users, courses, categories, groups, enrolments, grades, assignments, quizzes, attendance, and completion.
8
Automated cron jobs
Full push sync, grade pull, attendance sync, health check, orphan detection, retry queue, and more.
5-step
Exponential backoff retry
Failed API calls retry at 5 min, 30 min, 4 h, 24 h, then flag for review. Nothing silently drops.
Zero
Moodle data deleted
Withdrawn students are suspended, not deleted. Their grades and submissions stay in Moodle permanently.
Go Deeper on Any Part of the Integration
Eight topic pages covering every aspect of the sync, from data flows to configuration to migration planning.
Grade Sync
Pull Moodle gradebook scores, assignment grades, and quiz best-grades into OEC automatically.
Learn moreCourse & Enrolment Sync
OEC courses auto-provision matching Moodle courses; student enrolments mirror in real time.
Learn moreStudent Roster Sync
OEC SIS records drive Moodle user account creation, updates, and suspension.
Learn moreAttendance Sync
Moodle Attendance plugin sessions map to OEC attendance registers. Configurable direction.
Learn moreQuiz & Exam Import
Import Moodle quiz best-grades and assignment scores into OEC exam management records.
Learn moreSingle Sign-On
One login for both systems via SAML 2.0, shared LDAP, or OEC as identity provider.
Learn moreMigration Guide
Moving from a Moodle-only setup to OpenEduCat + Moodle. Phases, timeline, and checklist.
Learn moreOEC vs Moodle: Do You Need Both?
OEC is an ERP/SIS; Moodle is an LMS. Understand the overlap, the gaps, and when to run both.
Learn moreWho Gets the Most Out of This
Not every institution needs both systems. Here is who benefits most.
Universities that built Moodle first
Your faculty have been teaching in Moodle for years. Courses are built, students know the interface. You need to add the ERP layer โ admissions, fee collection, payroll, formal transcripts โ without touching a single Moodle course.
IT admins managing student data manually
You spend hours each semester manually provisioning Moodle accounts, sending grade exports to your registrar, and reconciling attendance records across two systems. This integration eliminates all of that.
Campuses with multiple Moodle instances
Each faculty or satellite campus runs its own Moodle. OpenEduCat provides a single administrative layer across all of them, with per-instance sync configuration and unified student records.
Schools moving off spreadsheet-based SIS
You track students in spreadsheets and keep Moodle separate. The integration gives you a proper SIS that connects to your existing LMS rather than replacing it.
Entity Mapping Reference
Every OEC model that syncs to Moodle, what it maps to, and which system is authoritative.
| OEC Record | Becomes in Moodle | Direction | Notes |
|---|---|---|---|
Departmentop.department | Course Category | push | Hierarchical; parents synced before children via topological sort |
Course / Programop.course | Course Sub-Category | push | Sub-category under department category |
Subjectop.subject | Moodle Course | push | One Moodle course per (subject, program) pair |
Batchop.batch | Moodle Group | push | Groups created within the subject's Moodle course |
Studentop.student | Moodle User (student role) | push | Email as username; createpassword=1 on create |
Facultyop.faculty | Moodle User (teacher role) | push | Enrolled via enrol_manual_enrol_users with teacher roleid |
Enrollmentop.student.course | User Enrolment | push | Uses enrollment.subject_ids, not course.subject_ids |
Gradebook Gradegrade_grades (Moodle) | โ op.result.line / gradebook.line | pull | Community โ op.result.line; Enterprise โ gradebook.line |
Assignmentmod_assign (Moodle) | โ op.exam.attendees | pull | Grades via mod_assign_get_grades |
Quizmod_quiz (Moodle) | โ op.exam.attendees | pull | Best grade via mod_quiz_get_user_best_grade |
Attendancemod_attendance (Moodle) | โ op.attendance.line | configurable | Requires local_wsattendance plugin |
Designed for Production, Not Just a Demo
The sync runs through Moodle's standard REST Web Services endpoint using token-based authentication. It requires 27 WS functions enabled on a named external service in Moodle. No Moodle plugins are required beyond the optional attendance plugin.
Every record carries a SHA-256 hash of its last-synced payload. If nothing changed, the record is skipped. The hourly cron is fast even for large institutions because it only calls the Moodle API for actual changes.
Failed API calls enter a retry queue with exponential backoff: 5 minutes, 30 minutes, 4 hours, 24 hours, then permanently flagged for review. A health-check cron pings Moodle every 4 hours and flags the instance as stale if syncs have stopped completing.
Sync transport
POST /webservice/rest/server.php
wstoken + wsfunction + moodlewsrestformat=json
Background execution
OCA queue_job, channel root.moodle
4 parallel workers; real-time triggers on record save
Change detection
SHA-256 payload hash
Unchanged records skipped; hash updated on success
Loop prevention
connector_no_export = True
Set during all pull operations; prevents push-back to Moodle
Moodle Integration Add-on
Available from $499 per year
Included in select OpenEduCat plans. Works with both cloud and on-premise deployments. Compatible with Moodle 4.5 and newer.
- Unlimited students and faculty sync
- All 8 sync services included
- Multi-instance support
- Full audit log and retry queue
Common Questions
Does my Moodle need any plugins installed?
The core integration requires no Moodle plugins. It uses the standard Moodle REST Web Services API with 27 built-in WS functions. Attendance sync requires the optional local_wsattendance plugin, but grade sync, student sync, course sync, and all other features work without it.
What version of Moodle is supported?
Moodle 4.5 and newer. The integration uses only WS functions available in the standard Moodle core from 4.5 onward. Earlier versions may work for most features, but are not officially supported.
Can I connect multiple Moodle instances to one OpenEduCat installation?
Yes. OpenEduCat supports multiple Moodle instance configurations, each with independent sync settings, credentials, and toggle controls. This is useful for multi-campus institutions where each campus runs its own Moodle.
What happens if Moodle is offline or unreachable?
Failed API calls enter an exponential backoff retry queue: 5 minutes, 30 minutes, 4 hours, 24 hours. A health-check cron runs every 4 hours and flags the Moodle instance as unhealthy if it cannot be reached. You see the issue in your admin panel before your end users do.
Will grades I enter manually in OEC get overwritten by the Moodle pull?
Yes, if the grade exists in Moodle too. Moodle is the authority for all learning data. The next grade pull will overwrite any manually entered score in OEC for that student and subject. If you need manual grade entry, enter it in Moodle and it will sync to OEC automatically.
Is student data deleted from Moodle when they leave the institution?
Never. Inactive students are suspended in Moodle, not deleted. Their account cannot log in, but all grades, submissions, forum posts, and activity history are preserved permanently. This protects your institution from accidental data loss and keeps historical records intact for compliance.
How long does the initial setup take?
Configuration typically takes an afternoon for an experienced IT administrator. You need to enable Moodle REST Web Services, create an external service, add 27 WS functions, generate an API token, and enter the connection details in OpenEduCat. A migration wizard handles the initial data reconciliation between existing Moodle records and OEC.
Ready to Transform Your Moodle Integration?
See how OpenEduCat frees up time so every student gets the attention they deserve.
Try it free for 15 days. No credit card required.