Everyone repeats that it can miss files attached to modules. Nobody has published a number. Here is one, from 33 real courses, including the part that undercuts my own software.
Short answer
Measured across 33 real Canvas courses at one university, the widely repeated warning turns out to be the rare problem. In the eight courses where the Files tab worked, files attached to a module but absent from the Files tab came to 3 out of 358, or 0.8%, and only one course was affected at all.
The common failure is different. In 3 of the 11 courses that held any material, Canvas refused the Files listing outright with "user not authorised to perform that action", because an instructor had disabled the Files link in course navigation. Those courses held 246 files. And across all 33 courses the census counted 173 items that are not files at all - announcements, quizzes, discussions, assignments and Pages - none of which any zip has ever contained. Method and per-course figures below.
On this page
Every help desk warns that Download as Zip can miss files attached to modules. In 33 real courses that turned out to be the rare failure. The common one is that the button cannot be used at all.
Search for how to download a Canvas course and you will meet the same sentence everywhere, on university IT pages, in forum answers, on the sites of tools that compete with mine. Canvas's official route is to select files and download them as a zip, and that zip covers the Files tab, and the Files tab can be missing things, because a lecturer can attach a file to a module without it appearing there.
It is repeated as common knowledge and it is never quantified. Nobody says how often, or how many files, or whether it is worth acting on.
Worth noting before any of the numbers: Instructure does not document this anywhere. Searching their own knowledge base and community for it returns the modules guide, the file-download guide above, and threads of people asking, with no statement from the vendor either way. The claim is an oral tradition among help desks, which is part of why it has gone so long without anybody checking it.
This project drives a real Canvas account through an audit harness, and part of what that harness records is a census of each course: every file the Files tab lists, every file a module links to, and the difference. Those censuses have been accumulating for a year, so the question is answerable. Below is the answer, including the part that undercuts the software I build.
Method first, because a number without one is decoration.
For each course the harness asks Canvas directly for the Files tab listing and for every module and its items, then compares the two sets of file IDs. Nothing is inferred from what got downloaded. The comparison is between what Canvas says is in the Files tab and what Canvas says is attached to a module.
The sample is small and it is not random. It is 33 courses, all of them one student's enrolment at a single European university, censused through 2026. That is what the numbers describe. Anyone quoting them, including me, should say "in 33 courses at one university" rather than "in Canvas", because the second one would be a claim this data cannot support.
Two things about the sample are worth stating because they change how you read every figure below.
22 of the 33 courses hold no material at all. They are programme shells and unused course sites, and their censuses completed normally in two or three seconds. They are excluded from every count about files, and reported here so you can see the exclusion rather than take my word for the denominator. Eleven courses have files. Everything below is about those eleven.
Nothing was cherry-picked. Every course the harness has ever censused is in the table further down, including the seven where the answer is zero and the finding is that nothing is wrong.
Three of the eleven courses would not let a student open the Files tab. Canvas answered the request with a 403 and the message "user not authorised to perform that action".
Those three courses held 246 files between them. Two of them held 121 and 124, and every one of those was sitting in the course, linked from a module, perfectly downloadable one click at a time. The zip route to them simply did not exist.
This is a course setting rather than anything about the account, and that is checked rather than assumed: the same login succeeded on 29 of the same 33 courses within the same few minutes. The mechanism is ordinary. From Course Settings, on the Navigation tab, an instructor can drag Files into the disabled list. Plenty do, usually to keep students out of a folder of draft material, and the side effect is that the whole tab goes.
So the standard advice, the one on nearly every university help page, is open the course, click Files, select all, Download as Zip. In 27% of the courses here there is no Files link to click.
Now the part that goes against the tool I sell.
In the eight courses where the Files tab worked, one had files that a module linked to and the Files tab did not list. That course had three such files, out of 143. Across all eight working courses the total is 3 files out of 358, or 0.8%.
The famous failure is real. It is also small, and it happens in a minority of courses. If your Files tab opens, you are getting almost everything that is a file, and a guide telling you otherwise is repeating folklore rather than reporting a measurement.
I would rather publish that than not, because the alternative is quoting the 0.8% as though it justified installing something.
Both results above are about files, and files are the part of a course that everyone thinks about. Across the same 33 courses the census also counted what is not a file:
| Content type | Items | In a Files zip? |
|---|---|---|
| Announcements | 84 | No |
| Quizzes | 32 | No |
| Discussions | 20 | No |
| Assignments | 20 | No |
| Pages | 17 | No |
That is 173 items, none of which any zip of any Files tab has ever contained. One course alone held 22 quizzes and 16 announcements. Another held 36 announcements and 15 assignments.
Set that against the three files in result 2. The gap everyone argues about is 3 items. The gap nobody mentions is 173. There is more on what those categories are and how to get them in saving Canvas Pages, quizzes and discussions.
One smaller finding, since it surprised me. In the largest blocked course, 115 of its 124 files were reachable through modules and the remaining 9 were embedded in the text of assignments and announcements. Files can hide inside content, not only beside it.
The eleven courses that hold material. Course IDs are internal to one Canvas instance and identify nothing on their own. BLOCKED means Canvas refused the Files listing.
| Course | Files tab | In modules | Module only | Total files | Quizzes | Announcements |
|---|---|---|---|---|---|---|
| 43056 | BLOCKED | 0 | 0 | 1 | 0 | 4 |
| 43657 | 30 | 28 | 0 | 30 | 1 | 13 |
| 43658 | 2 | 0 | 0 | 2 | 0 | 0 |
| 43660 | 140 | 97 | 3 | 143 | 22 | 16 |
| 43665 | BLOCKED | 121 | 121 | 121 | 0 | 2 |
| 44428 | 21 | 21 | 0 | 21 | 1 | 0 |
| 45899 | BLOCKED | 115 | 115 | 124 | 8 | 36 |
| 46370 | 20 | 20 | 0 | 20 | 0 | 2 |
| 46386 | 95 | 94 | 0 | 95 | 0 | 1 |
| 46396 | 42 | 28 | 0 | 42 | 0 | 10 |
| 48000 | 5 | 5 | 0 | 5 | 0 | 0 |
Seven of the eleven are clean. That is the honest shape of it.
The practical reading is short.
If you are about to lose access to a course, the order to do things in matters more than the tooling, and that is in backing up a Canvas course before you lose access.
The analysis is a script in this project's repository,
scripts/measure_export_gap.py, and it prints every number on
this page including the per-course table. It reads the census files the
audit harness writes and does nothing cleverer than counting.
If you run a Canvas course and want the same figure for it, the two API
calls are /api/v1/courses/<id>/files and
/api/v1/courses/<id>/modules?include[]=items. Compare
the file IDs. That is the whole method, and I would rather hand it over
than be the only source for a number.
If you measure your own institution and get something different, that is a useful result and I would like to hear it. A sample of 33 courses at one university is a starting point rather than an answer.
Canvas Downloader reaches the categories no zip contains: Pages, announcements, discussions, assignments, and quizzes with their questions rather than just their titles. It works in courses where the Files tab is switched off, because it reads the modules. It also brings down Panopto lecture recordings, which live outside Canvas entirely.
Free and open source, Windows and macOS. If your Files tab opens and files are all you need, use Download as Zip and keep your afternoon.
No, and there are two separate reasons. It only ever covers the Files tab, so Pages, announcements, discussions, assignments and quizzes are never in it. And in a course where the instructor has disabled the Files link in course navigation, the button does not exist at all. In 33 real courses measured for this article, that was the case in 3 of the 11 courses that held any material.
In the eight courses measured here where the Files tab worked, 3 files out of 358, or 0.8%. Only one of those eight courses was affected. The widely repeated warning that a zip misses files attached to modules is real, but on this evidence it is small and uncommon. The far bigger gap is everything that is not a file.
An instructor has almost certainly disabled it. Course Settings has a Navigation tab where any item, Files included, can be dragged into a disabled list, usually to keep students out of draft material. The files are still in the course and still reachable through whatever modules or pages link to them. Only the tab is gone.
No, and it should not be quoted as one. It is 33 courses from one student's enrolment at a single European university. It is first-hand and the method is published, which makes it checkable, but a sample of that size at one institution describes those courses rather than Canvas in general. Quote it as "in 33 courses at one university".
Whatever is listed in that one course's Files tab at the moment you press it, as a flat zip of the folder structure. It does not span courses, and it holds no Pages, no announcements, no discussion threads, no assignment briefs, no quizzes and no feedback, because none of those is a file. They are rows in Canvas's database rendered into web pages.
Go through the modules. Everything a module links to is downloadable one item at a time, which is tedious but works, and it is what any API-based tool does automatically. In the two blocked courses measured here, 121 and 115 files respectively were reachable that way with nothing missing.
Two Canvas API calls and a set difference: /api/v1/courses/<id>/files for the Files tab, and /api/v1/courses/<id>/modules?include[]=items for what the modules link to. Compare the file IDs. The script used for this article is scripts/measure_export_gap.py in the project repository.
On these numbers, the content that is not a file. Across 33 courses the census counted 84 announcements, 32 quizzes, 20 discussions, 20 assignments and 17 Pages, a total of 173 items, none of which appears in any zip of any Files tab. Against that, the file-level gap everybody writes about was 3 items.