Margin and Moodle — how the calendar feed works
Margin supports Moodle through connected through the iCal calendar feed your school publishes, added once at setup — you paste your school's calendar feed URL once at setup, and upcoming due dates flow to your Todoist and dashboard. Moodle publishes that feed itself; the steps are below, from the official MoodleDocs Calendar page.
Finding your feed URL in Moodle
Open the Calendar, press Export calendar at the bottom of the page, choose which events and which time frame you want, then press Get URL address.
Source: the official MoodleDocs Calendar page, retrieved 2026-08-02. Moodle calls the feature “Export calendar”. Vendor interfaces change — if what you see differs, the vendor's own page is the authority, not this one.
What Moodle feeds carry, and what they don't
The URL is generated for the signed-in user, and covers the courses that user is enrolled in.
So one URL carries your whole enrolment. Moodle's own documentation notes there is no way to generate a URL for a single course.
Moodle asks you to choose a time frame when you export.
Pick the widest option available. A narrow export is the most common reason a Moodle feed looks like it is missing the end of term.
What calendar feeds can and can't carry
In building Margin's feed reader we learned calendar feeds have sharp edges. Here is where ours are, including the one we have not solved.
- All-day events end on an exclusive date. A deadline written as ending on the 5th actually ends at the start of the 5th. Margin reads that the way the spec means it, so an all-day deadline doesn't land a day late.
- Times with no timezone are ambiguous by design. The spec calls these “floating” and leaves them for the reader to interpret. Margin resolves them against your own computer's timezone — the reading the spec intends — and falls back to UTC only if your browser cannot report a timezone at all. Reading floating times as UTC is exactly what used to shift Moodle and D2L exports by your offset: on US Central that was enough to bump a 23:59 deadline onto the next day.
- Repeating events expand, up to a point. Margin expands weekly and daily repeats across the term, so a semester of weekly homework arrives as a semester of weekly homework. Less common patterns — monthly, yearly, and the rarer rules — come through as a single event rather than the whole series.
Why a feed, and not a direct reader
In building Margin we did not find a practical student-facing API for assignment data on Moodle, so we read the calendar feed your school already publishes — that's what Margin uses.
Schools
Moodle campuses are compatible pending verification — the feed format is standard, and we confirm a school once someone there has run it.