What Canvas's Download as Zip actually misses

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.

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.

The claim nobody has measured

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 and sample

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.

Result 1: often you cannot use it at all

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.

Result 2: when it works, it is nearly complete

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.

Result 3: the files were never the biggest gap

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 typeItemsIn a Files zip?
Announcements84No
Quizzes32No
Discussions20No
Assignments20No
Pages17No

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 per-course numbers

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.

CourseFiles tabIn modules Module onlyTotal filesQuizzes Announcements
43056BLOCKED00104
436573028030113
43658200200
436601409731432216
43665BLOCKED12112112102
44428212102110
45899BLOCKED115115124836
46370202002002
46386959409501
463964228042010
48000550500

Seven of the eleven are clean. That is the honest shape of it.

What to do with this

The practical reading is short.

  1. Check whether you have a Files tab before you plan around it. Open the course and look at the left-hand navigation. If Files is absent, no amount of selecting all will help, and the material is still there behind the modules.
  2. If Files opens, Download as Zip is a good answer for files. Nearly complete, nothing to install, already in front of you. The five built-in methods covers the rest of what Canvas can do unaided.
  3. Plan separately for everything that is not a file. That is where the volume is, and no zip has ever touched it.

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.

Check it yourself

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.

Built because of the 173, not the 3

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.

Common questions

Does Canvas Download as Zip include everything in a course?

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.

How many files does Download as Zip actually miss?

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.

Why can I not see the Files tab in my Canvas course?

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.

Is this a survey of Canvas?

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".

What does Canvas Download as Zip actually contain?

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.

How can I download a course when the Files tab is disabled?

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.

How do I measure this for my own course?

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.

What is the biggest thing missing from a Canvas course download?

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.

Who wrote this

BrkBuilds builds Canvas Downloader, the free open-source app this site is about. These guides are written from the engine side: what Canvas does and does not export is described from having implemented against the Canvas API, not from reading about it. The app's behaviour is documented in Under the Hood and the whole codebase is public on GitHub, so every claim on this page can be checked against the code that makes it.

It is a one-person project with no company behind it. Where a page is uncertain it says so, and where a built-in Canvas feature or somebody else's tool is the better answer, it says that too.