Importing Rubrics from a Spreadsheet

Community Champion
77 109 54.6K

I've written an Rubric Importer user script that will allow you to copy a rubric from a spreadsheet like Excel or Google Sheets and paste it into a textbox inside Canvas and then automatically turn it into a rubric within Canvas. Many feature requests have asked for improving the rubric experience and  is currently in the Gathering Information stage.

Canvas rubrics only allow for simple designs. You can have a criterion, a longer description, and then a series of single line ratings and a point value. Point values must be in descending order and they can't be negative. The input box where you type the rating doesn't wrap and so if your rating description is longer than what will show, you have to scroll back and forth to see the whole thing. Moving rows around in a rubric is not possible unless you use a script like the one I wrote about in Sorting Rubrics Made Easy‌.

The Rubric Importer script allows you to design the rubric in a spreadsheet where you still have the same basic limitations as to layout, but now you can resize columns or rows and wrap text and move things around in the spreadsheet. Then when you're done, you just copy and paste the rubric into a form in Canvas and the script creates the form needed to turn it into a rubric.

The rubric creation form is an undocumented call. It is not part of the Canvas API and you need to be logged into the web interface of Canvas in order to use it. It is basically a wrapper around the Canvas form that takes a tab-delimited input and sends the data to Canvas to create the rubric.

Creating the Rubric in the Spreadsheet

Block Rubrics

This is a new feature for version 2 of the script.

It allows you to specify the points on one row and then use them for rows that come after that. Here is the rubric that originally took me 5 minutes to clean up to the original format. Notice that the ratings are in the wrong order since Canvas wants them in descending order (largest on the left to smallest on the right). The script automatically reverses them if necessary to put them into the correct order.  This block can be pasted into the script as-is without any modification.

Rubric Example

Are your rubrics a little more complicated and don't have everything exactly the same point values? The Block means that you can block your rubric into sections and have different point values and different number of ratings for each blocks. Any empty cells to the right of the block are skipped, and a block could have just a single row of ratings in it. The blocks are independent of each other, so some can be in ascending order and some can be in descending order. 

Here's another rubric that you could copy and paste directly into the script.

Rubric Blocks

You can even have sparse rubrics by leaving out ratings if they don't apply to that particular criterion.

Leave Out Ratings

None of these have a long description, but you could add it after the Criteria column. If there is something in that column then it will use it, if there isn't then it will be ignored.

You can also link to outcomes, although you'll have to look up the outcome IDs yourself. The simplest place to put them is at the right of the spreadsheet outside of any rating columns, but they can appear in other places. 

Here is the version of the block rubric that I used for testing purposes. Notice the heading row does not contain the point values and that there is nothing to the right of the point values.

Block Rubric Example

The highlighted cells reference outcomes. I don't recommend that you make your rubric this messy, I just wanted to test it with a bunch of different varieties.

Here are the guidelines.

  • The headings are completely optional and will be skipped if included in the first row of what you paste into the script.
    • The criterion name must be in the first column.
    • The long description is optional, but if you have it then it must come in the second column. You can omit long descriptions for any criteria that don't have it.
    • The rating point values need to come next and they must be the last thing on a row. They are not recognized as rating points if there is extra information after them on the line. There does not have to be anything before the rating points, but it is okay if there is (it's ignored).
    • The first rating point value must be on either the first or the second line and must come before you use it. If it hasn't found a rating points line by the second line, it decides the table is not in block form and moves on to the flexible form.
    • Outcomes should come last, making sure they don't exist in a column that is assigned a point value. Be careful if you're using tables with Excel and you add outcome information as Excel will add column labels for you and if your points are on the first line, those extra column names will cause the rating points to go undetected and you won't be able to import your rubric.
    • If the outcome ID is in the criteria name column or at the end with a blank criteria name, then the name of the criterion will be taken from the linked outcome. This is the way that Canvas does it, but it doesn't give you the chance to change it. If you specify a criterion name or long description and link to an outcome, then the information that you supply will be used instead of the information from the linked outcome.
    • If you use outcomes, you can specify whether or not to use that for scoring in the next cell to the right. A 1 means use that linked outcome for scoring and a 0 means do not use it for scoring. The default is 1, which matches Canvas' default.

    Before using the script, you will need to highlight (select) the text inside the spreadsheet. When you do this, you can skip the heading row (or include it). After selecting the text, copy it. The keyboard shortcut is Ctrl-C (PC) or Cmd-C (Mac).

    Flexible Rubrics

    A rubric is checked to see if it is in block form first and if a suitable points line cannot be found in the first two lines, it falls back to this method.

    The original release of this script required a fairly stringent form in the spreadsheet and did not support outcome associated criteria. Here is the example nonsensical rubric that it was originally tested with. This format still works.

    Flexible Rubric

    Here is the spreadsheet that version 2 was tested with.

    Rubric Spreadsheet Example

    The highlighted cells reference outcomes. I don't recommend that you make your rubric this messy, I just wanted to test it with a bunch of different varieties. The one thing I want to point out is the "Did you still feel tired ..." in line 16. It is in the Long Description column of the spreadsheet, but it came out in the Criteria column of the Canvas rubric. The column headings are completely ignored by the script, they are only there for you to help put some order to your rubric. I recommend not even copying them into the script.

    Here are the guidelines.

    • The long description is optional and may be omitted on a row-by-row basis. You don't have to include it at all and you do include it, you don't have to include it for every row. I could have even moved the ratings in the Grade row to the left one cell and it would still work, although I don't recommend that while designing the rubric.
    • The headings are completely optional and will be skipped if included in the first row of what you paste into the script.
    • Every rating has two cells and must come in pairs. The first cell (left) is the rating description and the second cell (right) is the point value. The point value should only contain the number, it should not have extra text like "pts" or "points" in it.
    • Rows can have different number of ratings in them. Any blank cells at the end of a row are removed and ignored.
    • The point values can be in ascending order or descending order and the script will put them into descending order, which is what Canvas requires.
    • You'll have to look up Outcome IDs on your own and put them into the system. They can come first in the row, replace the criterion name or the long description, come at the end of the row, or in some cases, be split between the front and end of the row.  For simplicity sake, I recommend the beginning or the end.
    • If you specify a valid outcome ID, then it is looked up and any ratings for that row are replaced by those from the outcome. If you have a criterion name or long description, it will use those instead of the values looked up from the outcome (Canvas replaces them with the information from the linked outcome and doesn't give you the option to change it). If you leave off the name or long description, then it will use the information from the linked name.
    • You may specify a 0 after an outcome to say make this worth zero points. This is the Canvas equivalent of ignoring the outcome for scoring in your rubric. The default is to include linked outcomes in the scoring.

    Although no limit on the number of ratings is enforced by the code, people have said there are problems with you have too many ratings in the rubric. This does not address that and if it doesn't look good or work right when you create it inside Canvas, then it won't here either.

    Before using the script, you will need to highlight (select) the text inside the spreadsheet. When you do this, you can skip the heading row (or include it). After selecting the text, copy it. The keyboard shortcut is Ctrl-C (PC) or Cmd-C (Mac).

    Importing Outcomes

    When the script was originally written, it didn't support linking outcomes. I argued that there was no easy way to tie the information in the spreadsheet to the outcomes in Canvas. Since then, I thought of a way to manually link them, but it requires that you look up the outcome ID inside Canvas and then transfer that number over to the spreadsheet manually.

    Of course, you don't have to use outcomes at all.

    Finding the Outcome ID

    Begin by going to the Outcomes page of your course or account. Then follow these two steps.

    1. Navigate through to find the outcome that you want to import.
    2. Mouse over the name of the outcome and look at the address of the hyperlink in your browser.

    Find Outcome ID

    If your browser doesn't show the address when you mouse over it, you can go ahead and click on the Outcome name and then get the outcome ID from the location.

    Find Outcome ID in URL

    Please be careful typing in the Outcome ID. The system does not show you what the rubric will look like before it sends it, so double check. The outcome will be imported into the course if it does not already exist, so putting in a wrong ID may bring in the wrong outcome.

    Use Criterion for Scoring

    When you import a criterion from an outcome using the Canvas interface, it asks you if you want to use this criterion for scoring. The default is checked, which means that the criterion will count in the rubric points. Sometimes you want to measure an outcome without having it directly affect the score, so you uncheck this box.

    Use Criterion for Scoring

    For the script, the default when you include an outcome is the same as it is Canvas. That is, by default, criterion linked from outcomes will be used for scoring. If you do not want this to happen, then you should enter in the cell to the right of the outcome ID. The script will pick that up and pass it on to Canvas.

    Although the default is to use the criterion for scoring, if you plan on using some for scoring and some for not scoring, I suggest that you be explicit with a 1 for scoring and a 0 for not-scoring. It will help keep the sheet more aligned and easier to understand.

    Overriding Outcome Information

    When you import a criterion through the web interface, it copies the name of the criterion, the long description, the rating descriptions, and the rating points over from the associated outcome. On top of that, you can't edit any of those.

    However, if you go through and rename the outcome or modify the long description, it does not change the name or description in the rubric. That gave me the idea to allow the user to specify a different name or long description than what the outcome had. Since we're using an undocumented non-API call to create the rubric, Canvas could change that behavior at any point and without notice. But for the time being, you're not stuck with the name on the outcome.

    For example, the name of the outcome above was "2.2a: Solve problems by performing deductive and inductive reasoning." and the long description was the same. I didn't come up with those, that's part of our cross-disciplinary outcomes. But let's say that I wanted to include it on a rubric and everything else was designed by me and has a short name for the criterion so it doesn't push the squish the rest of the rubric to the right. Using this script, I could rename it to be "Reasoning" and either leave the original long description that came from the outcome or change that as well.

    The basic rule is that if you put something in the name or long description fields of a linked outcome, then it will use what you put in there. If you don't specify that information, then it will use what comes over from the outcome.

    The ratings are transferred from the outcome and there is no way to stop that. Since mastery can be tied to the point values, I didn't want to mess with that part of it. You can leave off the ratings completely when you are specifying an associated outcome. A line with just a single number on it will be interpreted as a linked outcome that should be used for scoring.

    Detecting Outcome IDs

    The script looks for Outcome IDs by trying to match the text in a cell to positive integer. This means that if you're in a place where there might be an outcome ID, that you can't have a criterion with an integer ID. I doubt that many people do that anyway, but just in case you're in the habit of naming your criteria 1, 2, 3, etc., you're going to run into trouble trying to use the script as it's going to complain that it can't find outcome IDs 1, 2, or 3 when it runs. Spaces are trimmed from the beginning and end of all cells, but you could add a decimal point and call them 1., 2., 3., etc., or even #1, #2, #3, etc., and then it would not detect it as an attempt to link to an outcome. If you absolutely must have 1, 2, 3, etc., then you could create them with dots and then go through manually and edit the criterion names to remove the dots.

    The simpler you keep the script, the better job it will do at figuring out what you want it to do.

    Using the Script

    The script only runs from the rubrics page. For a course, this means you go to Outcomes, click the more icon on the right, and then choose Manage Rubrics. For an account, there is a Rubrics button in the navigation menu that will take you there. The location (URL) ends in /rubrics.

    It adds a new Import Rubric button underneath the Add Rubric button.

    Add Rubric

    Click the Import Rubric button to open the modal dialog box. I've resized it here, but it takes about 80% of the screen width.

    Import Rubric

    1. Type the name of the rubric into the Rubric Title box.
    2. Click in the Rubric Contents box and paste the rubric that you copied from the spreadsheet. The keyboard shortcut is Ctrl-V (PC) or Cmd-V (Mac). Note that it will not look right when you paste it, but it's okay.
    3. Click the Create button.

    Here's what my example looked like before I hit Create.

    Import Rubric Example

    If everything is successful, the page will reload and your new Rubric will appear in the list of rubrics.

    Course Rubrics

    The Canvas script shows the rubric on the page after you click their Create Rubric button. My script bypasses their form completely and just sends the information directly to the Canvas servers. The page must reload to list the rubric and the command to reload the page is automatically sent for you when the script successfully runs.

    You can then click on the rubric title to see the rubric, just like you can with any other rubric you have.

    A Demo Rubric

    What if it doesn't work?

    There are some error messages that may occur. They will definitely occur if you don't follow the guidelines. They will look like this after clicking the Create button.

    Rubric Error

    Here are some of the error messages you may see.

    • Only one rating found in line #. This happens if you're using the block rubric and only specify one rating.
    • Invalid content at the end of line #. This happens if you're creating a block rubric and have specified an outcome in the early part of a rubric and then you have information to the right of the ratings points. The program expects that this will be a 0 or 1 to indicate the scoring, but you have something else in there instead.
    • Rating without associated points at end of line #. You have an entry to the right the points block, but it's not an outcome.
    • Empty rating description in line #, column #. This happens in the flex form of a rubric and it's expecting a description for the rating, but the description is blank.
    • Second item in pair is not a number in line #, column #. This is a companion error to the empty rating description error. It is trying to find a point value, but it cannot find any.
    • Unbalanced rating/points at the end of line #. This happens in the flex form of the rubric when you have extra information on the right that cannot be tied to an outcome.
    • Conflicting directives for using outcome for scoring in line #. This happens in the flex form of a rubric when you tell it how to handle scoring of a linked outcome at the beginning and again at the end of a criterion line.
    • Unable to locate outcomes: #. You must manually look up the Outcome IDs for any outcome that you want to use. Sometimes we get it wrong as we transfer it over. This message will happen when Canvas is unable to locate the outcome. This could also happen if you're having a bad internet day as I've put a 3 second timeout on the lookup. I didn't want people to think the script wasn't doing anything and click the Create button a second time. This could also happen if you name your criteria using non-negative integers. See the section on Detecting Outcome IDs for more information on this.
    • You must provide a title for your rubric. This happens when you didn't enter a title in the form's Rubric Title input.
    • You must paste your rubric into the textbox. This happens if you left the Rubric Contents box empty.
    • All the information was supplied correctly, but there was an error saving rubric to Canvas. This error happens when there is a failure trying to submit the form to the Canvas servers for processing. You can try again later or you can look at the JavaScript console within the browser to try and see if you can find out why.

    There are also two errors that you should not get if you're running my code as intended. If someone modifies the code or installs it globally for an institution, then it might occur.

    • No association specified, refusing to create rubric object. The script tries to determine whether you're creating a course rubric or an account rubric and the ID that goes along with those. Normally, it has no problem because the only pages where the script runs are also the pages that supply that information. However, on the off chance that something dreadfully wrong should happen, it is impossible to create the rubric and you'll get this message.
    • Unable to determine where to place this rubric. This is the same error as No association specified, refusing to create rubric object. The only difference is where it's called internally. This one occurs when it tries to determine the association and the other is a check to make sure someone didn't call the script to actually process the input without also supplying the association. If you're using my script, the No association error should never be returned as this error will keep it from getting that far.
    • Unable to create criterion for line #. I think I have most of the error checking done before it ever attempts to create the criterion for a row, but this is just in case I missed something.

    If something does go wrong, then fix it in the spreadsheet and copy/paste it again. The textbox in the form is not suitable for editing.

    Version 2 of the script represents a major update that more than doubled the number of lines of code and made it considerably more complex than the original version. As you can see from the examples, I tested it with many variations, but there are probably cases I didn't try. Try to keep things as simple as possible. While specifying the outcome in the middle of the criterion line should work, it's more complicated than if you put it at the front or end. If you find something that isn't working and you can't figure it out, please let me know.

    Video Demonstrations

    Importing from Excel

    The rubric in this video was already in Excel, but it only had the total point values at the end of the rubric. Everything in the first column was full points, values in the second column were 50%, and ratings in the last column were worth 0. This video shows how to insert the needed columns, put in a formula to calculate the 50% of the values, and then copy/paste it into the script and create the rubric.

    The rubric has 19 criteria with 3 ratings for each. The total time to place the rubric in the proper format in Excel and then create the script was 1:07.

    Importing from Word

    Importing from Word is not supported directly, but you can copy/paste from Word into Excel and then make the changes in Excel.

    The rubric had 6 criteria with 4 ratings each and it took me 5:00 minutes to manually create the rubric from Word. Thankfully triple clicking will select the text in a table cell or it would have taken longer. It took me a while to get into the groove and originally forgot to change point values or put things in the wrong order. You know, all those things that happen when you manually create a rubric using the Canvas interface.

    I then created the rubric using my script. The rating values were in ascending order so that had to be reversed. The rubric entries had a row that had hard returns in them in Word that got broken into two rows when transferring to Excel. The rubric script will only accept and ignore a single header row at the top. I fixed the double rows, but didn't have to since copying the header is optional anyway. After bringing the rubric into Excel, I moved the columns around and added the point values to put it into standard format for the script. I then copy/pasted the table without the headers into the script and created the rubric. The total time from starting the copy from Word to clicking the Create button was 1:26.

    Note that the information in this video is now superseded by the ability to create block rubrics. This feature was not available in the initial release. It will be even faster now than this video shows.

    Known Limitations

    There are some known limitations with this script. It was designed to be a quick way to get a simple rubric into Canvas. Major changes happened with version 2 a week after the initial release that allow for some complicated behavior.

    Creation Only (no append)

    This script does not append rows to an existing rubric, it creates new rubrics. You would need to get the existing rubric into Excel and then add the news rows. You would then have to create a new rubric inside Canvas.

    No Editing / No Sorting

    This script creates rubrics. If you want to edit them, you'll need to use the built-in capability of Canvas. If you want to rearrange the rows in an existing rubric to move criteria around, then see the Sorting Rubrics Made Easy‌ script.

    Downloading Rubrics from Canvas

    You can highlight a rubric in Canvas and copy/paste it into Excel. However, the format it comes across is not compatible with the format of this script. User scripts run on certain pages and the page that the download would happen on is a different page than the page that handles the creation. That would need to be handled by another script.

    Creating Rubrics from Assignments

    This script does not allow you to import rubrics from an assignment page where you can add a rubric to an assignment. This script bypasses the form that gets created when you create an assignment and it doesn't handle the attaching to an assignment that would have to happen if it was done there. Instead, you'll need to go to the rubrics page and add it there and then attach it to the assignment after it's been imported.


    Quick Install

    For those power users who are impatient, here are the quick install steps.

    1. Install Tampermonkey for Chrome, Firefox, or Safari
    2. Install the Rubric Importer user script.

    If you run into problems, be sure to go back and read the instructions.

    Custom URLs

    The script automatically runs on any page that matches **/rubrics or **/rubrics. This are the main rubric pages for courses and accounts when your site is hosted by Instructure without a custom URL. If you have a custom URL, like, then you will need to modify the script to get it to work.


    To make this change in Tampermonkey, click on the Tampermonkey Icon, choose Dashboard, and then click on Rubric Importer. Then change the * in the // @include statements on line 5 and 6 to match your instance and save your script.

    Community Novice

    Thank you, James! I'm not comfortable playing with the script, but your explanation of why the way its set up won't import was incredibly helpful. We do have ranges set, so I think I'm going to import it with straight points and then go in and edit things manually. 

    Community Coach
    Community Coach

     @James ‌...

    I recently discovered something about the "Rating Title"/"Rating Description" text box fields for a criterion row that I thought I would share.  Here is an example of where I have used your Rubric Import Tool, and then I manually edited the rubric to move some text for each cell from the "Rating Title" field to the "Rating Description" field.

    Rubric Descriptions

    You can see that the "Rating Descriptions" are in italicized text compared to the other text in each cell.

    Now, take a look at how it appears to a student in the Canvas Student app:

    Mobile Rubric

    In the Canvas Student mobile app (iOS), it is stripping out the "Rating Description" and only displaying text in the "Rating Title" field.  I can't tap anywhere on the screen on any rating value to display more information (hoping to see the "Rating Description").  This is a bit concerning to me because students may not get all the information they need in order to know what the definitions of these words mean for this specific class.  I submitted a ticket to Canvas Support about this last week (Case #03067606).

    Again...this is more of an FYI for anyone reading this...something to be aware of...for now.

    Community Champion

    Looking at things in the mobile device is always good. I went through that with a course redesign project this semester and it was very enlightening. Things I thought they were seeing just weren't there.

    This kind of makes me glad I haven't started putting things into the rating long description field yet. If I understand you correctly, had you left everything in the rating title then the student would have seen it all?

    Community Coach
    Community Coach

    If I understand you correctly, had you left everything in the rating title then the student would have seen it all?

    Yup, that's correct.

    Community Coach
    Community Coach

     @James ‌ and anyone else reading...

    I received the following from Canvas Support yesterday regarding the "Rating Description" field in mobile:

    Thank you for your patience as we looked into this issue! It does look like the mobile apps aren't displaying rubric rating descriptions when they should be. I have gone ahead and created a ticket with our engineering teams so they can look into this further. I will go ahead and attach this ticket to the engineering ticket and we will be notifying you regarding this issue just as soon as any updates become available. Please don't hesitate to contact us if you have any additional questions or concerns. Have a wonderful day!

    Community Champion

    Thanks, Chris. I still haven't found a good way to separate titles from descriptions that would work for most of the people. Have you given it any more thought? The closest I found to something I liked was what  @pjunge   had with her questions from April 12. I even wrote the code there that would put them in, so if we could find a suitable format, we might be able to come up with something.

    Community Coach
    Community Coach

     @James ‌ be honest, I haven't.  In most course builds that I've been working on, I've just been relying on the "Rating Title" field to house all text.  It's only recently that I started using the "Rating Description" field...and that's when I stumbled upon the issue with mobile.  (Not sure if it's an issue with Android devices, too.)

    Community Champion

    There's a slight typo in the next to last paragraph:

    The specific steps to do this vary depending on your browser add-on. In Greasemonkey, click on the Greasemonkey pull-down, choose Manage User Scripts, find the Access Report Data, right click and choose Edit. In Tampermonkey, click on the Tampermonkey Icon, choose Dashboard, and then click on Access Report Data.

    Instead of Access Report Data the words should be Rubric Importer.

    TamperMonkey with Rubric Importer script

    And I stopped using Greasemonkey when it lost functionality in Firefox.

    (Feel free to delete this comment after the text is updated.)

    Cheers - Shar Smiley Happy

    Community Champion

    Thanks. Obviously I just copy/pasted and didn't catch it. I've updated it, but I can't delete your comments.

    Community Contributor

     @James ‌

    Very helpful, thanks for sharing!

    Community Contributor

    now that in theory we can create rubrics without points,point ranges etc - is there a way to import a rubric without points etc?

    Community Coach
    Community Coach


    I've talked with  @James ‌ a bit about this (even at InstCon 2018), and my "workaround" for the time being is to still use points.  For example, if I have 10 criterion with values of "Met" and "Not Met", I still need to assign 1 point to "Met" and 0 points to "Not Met" in James' spreadsheet.  Then, I import the rubric using his rubric import tool.  Finally, after adding the rubric to the assignment, select the checkbox to "Remove points from rubric".  That will switch over everything to just words, and you'll still be able to use the rubric in the SpeedGrader.  Unchecking "Remove points from rubric" brings the original point values back into view.

    Community Novice

    Hi Folks - I was following the thread for importing a rating title and a rating description. Was there a way to do this in the spreadsheet so it can be imported into Canvas?

    Community Coach
    Community Coach

    Hi  @adam_cooper ...

    It has been my experience that all text for a given criterion rating will get placed into the "Rating Title" text box.  No text will get put into the "Rating Description" text box from your Excel spreadsheet.  In a way, this is good because of the information I posted above about mobile users.  Mobile users cannot currently see "Rating Description" text within the Canvas Student app.  However, they can see the "Rating Description" text if they view the rubric via a web browser on a computer of via a mobile device's web browser.

    Community Novice

    Hi Chris,

    Thank you for the information and I'll bear it in mind. My rating

    information is rather thorough, so putting that information into titles can

    make the rubric a bit unwieldy to deal with.



    On Mon, Feb 11, 2019 at 9:01 AM <

    Community Champion

    Is there a fast way of getting a rubric OUT of canvas and into Excel? I tried just copy and pasting from the rubric in Chrome and that turned into a messy Excel file with merged cells and whatnot. 

    Community Champion

     @venitk ,

    That's one of those things that I started and never finished. My wife has begged for it ever since I wrote the script to do the import, but it's still not done. Okay, it's probably mostly done except for the interface that makes it usable. I wrote it as a part of a script that combined about 4 rubric scripts into one and then never got back to finish it.

    There's no quick way to get it out in the format that you want it out in. It's stored as a nested structure. There are criterion and each criterion has ratings and there can be different amount of ratings for each criterion. That's not the way Excel works by default. You need something to unroll it into Excel format.

    That can be done using a program and it wouldn't be terribly difficult if you could get access to the rubric in JSON format. The obvious contenders aren't as helpful as they sound. The Rubric API sounds like where you would want to go, but it doesn't return the contents of a rubric -- unless that rubric has been used for assessment and then it returns it for all assessments, not just a single copy. The normal way we (API programmers) get a rubric is as part of an assignment, meaning that the rubric must be attached to an assignment. If you have attached a rubric to an assignment, then you can get it, but if it's just a rubric you've created but not yet used, then it's harder.

    There is one way I can think of that doesn't require any programming, just some patience and tools found on most computers. I'm trying this on a course that has used its rubric, so I'm not sure if it gives unused rubrics. These instructions are for a PC running Windows and will be similar, but probably have different keystrokes for a Mac.

    1. Go to Course > Settings and choose Export Course Content.  Select a Course export and then Create the Export. Once it is done, you can download it and save it to disk as an .imscc file.
    2. An .imscc file is really a .zip file, so you can use software like 7-zip to extract it. If you rename the extension to .zip, then Windows Explorer should be able to navigate through it. Extract the contents to disk or open the archive if you feel comfortable navigating within an archive manager.
    3. Go into the course_settings folder and you should find a file called rubrics.xml. This contains all of the rubrics for your course. Right click the filename and choose Open With (when navigating within 7-Zip, I had to use Edit). Choose your favorite text editor. I use PSPad, but Notepad or Wordpad should also work and they come with Windows.
    4. XML files are structured. There is a <rubrics> container and inside of this, each rubric is found within a <rubric> container. You should have as many <rubric> elements as you have rubrics in the course. Under the <rubric> element should be a <title> and this is where you want to look for the right rubric to use. Once you find the correct rubric, then there is a <criteria> element that holds <criterion> containers. This holds the information about each criterion and then there is a <ratings> element that contains multiple <rating> containers.
    5. What you need to do is find the correct <title> and then select everything starting with the <criteria> element down through the ending </criteria> element. The next thing after the closing </criteria> will be </rubric>. Do not select the </rubric>. Make sure you stay within the same rubric.
    6. Copy that portion of the rubric in the text editor.
    7. Find an online XML to CSV converter. The first one that Google gave me was XML To CSV Converter, so I'll use it, but there are others and this is not intended as an endorsement.
    8. Paste your copied rubric into the text box where you get to Enter Data.
    9. Click on the XML to Excel button. Save the file and open it in Excel.
    10. If you go through and remove some of the columns, you'll have your rubric in Excel.
    Coach Emeritus

    For the record, the wife just had a birthday and still no rubric exporter... but she did get a really really nice re-gifted carpet shampooer. 😉

    Coach Emeritus

    LMAO!  @kona ‌!

    My wife tells me (and everybody else on Earth) that she only married me because I owned a vacuum!

    Coach Emeritus

    LOL... your wife sounds like good people! 😉

    Coach Emeritus

    You will likely meet her at InstCon this year, and watch out, she loves children and you have a couple of cuties!

    Community Novice

    Hi James,

    I love this tool and have often used it. However, it has stopped working. I no longer have the "import rubric" button despite having tampermonkey and the latest add on.

    Any ideas? Canvas help line don't want to know Smiley Sad

    Community Champion

     @d_jeffries ,

    I just checked and it's still working for me. That suggests that it's not something that Canvas has done.

    I would start with these things.

    1. Verify that you're on the correct page. You need to go to Outcomes > Manage Rubrics, not one of the rubrics that pops up when you attach a rubric to an assignment
    2. Verify that the script is running. There should be a number on the Tampermonkey icon when you go to the page above. That number indicates the number of scripts that are eligible to run on that page.
      1. If there is no number, then Tampermonkey isn't recognizing the page you're on. This might happen if you're not hosted at and your include line in the userscript header doesn't match the URL you're using. You can edit the script and double check what the include header is set to. There are actually two include headers, one for the course level and one for the account leve.
      2. If there's a number on the Tampermonkey icon and when you click the icon, it shows Rubric Importer and it's turned on, then something has changed that the script isn't working. This might be the case if your institution has modified the page.
    Community Novice

    Thanks James.

    I will check with my institution. They are always tinkering with it.

    Kind Regards,


    Dawn Jeffries

    Head of Science - Bairnsdale Campus

    Any email sent from OneSchool may contain information which is confidential and privileged. Unless you are the intended recipient you may not disclose, copy or use it; please notify the sender immediately and delete it and any copies. You should protect your system from viruses etc.; we accept no responsibility for damage that may be caused by them.

    Community Novice

    Hi James,

    Just to let you know that I changed the include lines in the script and it now works perfectly again. Thanks for your support.

    Community Champion

    I'm glad you were able to figure it out.

    Community Novice

    Thank you so much James. This has been so helpful and will revolutionise how I add my rubrics. Saved so much time!

    Sincere appreciation from me. 

    Kind regards,


    Community Champion

    Hi  @Chris_Hofer ‌,

    Good news! When they improved the assignment mobile screens and created a separate "tab" for rubrics, they also made it possible to see the rating title and description!

    I, too, was only using the rating title to house short-hand form of the full description, but today in trying to tell someone else how to setup the rubric in the spreadsheet to use this script, I realized.. hey! I can put things in the rating description after all.

    Android Student App. I got similar results in the iOS app as well.

    Canvas Student android view of rubric

    This rubric was used to do the scoring, so it shows the selected rating score followed by the rating title and the rating description.

    Now I'm going to edit my user script to put in the rating titles since we use the same ones for all our rubrics and send the description in the spreadsheet to the rating_description. The code changes are later in this same thread. 3 changes and I added comments to remind myself when I need to change it back. Smiley Happy

    And for what it's worth,  @James ‌, I like the idea of using pipe to separate the rating title from the description in the spreadsheet.

    Cheers - Shar

    Community Coach
    Community Coach

     @James ‌...

    I'm wondering if the new Feature Option to have "Rubrics" be its own button in course navigation affects your script at all?  Canvas Release Notes (2020-04-18)  I *think* the answer is "no".  In our "beta" environment, I enabled the Feature Option at the admin level to turn on the "Rubrics" button for all courses.  I then went to my own sandbox course.  I would normally navigate to "Outcomes" >> "Manage Rubrics" >> "Import Rubric" (your script).  But, now it looks like I can just go to "Rubrics" >> "Import Rubric" ... one less click.  Whoo hoo?!

    Community Champion


    I saw that announcement earlier and I don't think it affects it -- your testing seems to confirm that. The rubrics always have lived at /rubrics and that's the main thing. It was just that there was no navigation link to get there directly.

    Community Explorer

    Absolutely brilliant. you have saved me HOURS and HOURS of time, as we recently migrated and I have tons of rubrics to add! You're a lifesaver @James! Thanks!

    Community Explorer

    Thanks a lot, @James, for creating, sharing, and documenting your tool!

    I forked your project to make a version that imports rating descriptions as well as (or instead of) rating titles. Don't feel obliged, but I'd be really grateful if you (or another reader) told me what I did wrong in this PR. It adds a dictionary entry for rating_long_description, which seemed like the right field name, although I'm not a JS/HTML hacker. When I used it, I did not get any errors, but the long description was not added to the criteria.


    Community Novice

    The window to import is at the bottom of my screen and is not completely visible.  I do not have the "create" or "cancel" choices (I am completely at the bottom of the browser window in this image).  Any ideas?



    Community Champion

    Hi @ksimons ,

    Looks like there's a little handle in the lower right corner to resize that contents window. Try moving that and then see if your scroll bars allow you to scroll in that window.


    Cheers - Shar

    Community Novice

    Will save me so many clicks and so much frustration, thank you so much!

    Community Champion


    Adding the long description will take a substantial hack to the code as you will have to modify the way that it scans the pasted information. Right now, it only looks for 2 columns (points and title) so that would need modified before you could ever think about doing a long description.

    Reworking the script to add support for them was on my list of To Do things and like many of my projects, I got started on it, but then got pulled off to work on other things and never made it back to it. It was going to be a major rewrite in a way that is incompatible with the existing version, so it would be a separate script to allow people to keep using their existing material.

    Community Explorer

    Thanks for taking the time to reply, @James. I was going to split on a rare character, such as pipe (as suggested in a previous comment), so no new input columns would be needed.

    It's moot, though, since I decided to import everything as learning outcomes, and Canvas provides a way of doing that.

    Community Novice

    I want to import the user script. Well, I have imported the user script, but I am not getting the Import Rubric button in the rubrics section.

    Reading through the above, it looks like I need to substitute to get it to work. However, I do not know how to do that. I was hoping I could edit it in the TamperMonkey page, but it isn't working.


    Community Champion


    As long as your site is hosted at, you do not need to edit the script. You do need to make sure that Tampermonkey is enabled and that the script is enabled within Tampermonkey.

    Then make sure you're on the rubrics page not on an assignment page where you're adding the rubric.


    When you're on the rubrics page, then you should see a badge for Tampermonkey that says it's running 1 script (unless you have others installed). If you're not, then it's not even getting to the script and since you're at, the likely culprits are what I described above.

    Community Novice

    Thanks, @James for responding... and so quickly, too!

    I kept poking around and found a way to copy and paste the script into a new script on TamperMonkey and then run it. I had replaced * with and it worked.
    Although others who were in the training our distance ed director did on Friday tried it and it worked the first time for them. 
    I am not sure if it was a Mac or PC thing. (I am on a Mac.) 
    But it's working now and I am excited to have the option.
    Community Explorer

    Canvas! Use this information and make a built in rubric importer! 

    Community Member

    I am new to Canvas and all of the hoops that I need to jump through to make this work.

    I don't see or know how to access the Canvas script to which you refer. Could you point me in the right direction? 


    Community Champion


    There is an installation section near the bottom of the original post.

    Community Contributor

    I'm able to get the script to run. The Import Rubric button appears, the window opens, I can paste text into the box... but when I click "Create" nothing happens.  No error messages, nothing. It just sits there laughing at me.  What am I doing wrong? 

    Here's the text I'm using:

    Criteria LongDesc Rating1 Pts1 Rating2 Pts2 Rating3 Pts3 Rating4 Pts4 Rating5 Pts5 Rating6 Pts6
    Accuracy of the Explanation Of Descartes’ Claim (Part 1) The student showed an accurate understanding of the claim. 9 The student showed a few minor misunderstandings of the claim. 8 The student missed at least one important, relevant aspect of the claim. 5 The student missed multiple important, relevant aspects of the claim. 0 The student overlooked obvious, relevant aspects of the claim. 1 The students showed little or no understanding of the claim. 0
    Clarity of Explanation of the Descartes’ Claim (Part 1) A reader who was barely familiar with the text would find it easy to follow the explanation. 4 A person who was reasonably familiar with the text would find it easy to follow the explanation. 3 A person who knew the text thoroughly would find it easy to follow the explanation. 3 A person who knew the text thoroughly would have some difficulty figuring out the explanation. 2 A person who knew the text thoroughly would have serious trouble figuring out the explanation. 1 The instructor had to work hard to figure out the explanation. 0
    Accuracy of the Explanation Of the Descartes’ Argument (Part 2) The student showed an accurate understanding of the argument. 18 The student showed a few minor misunderstandings of the argument. 16 The student missed at least one important, relevant aspect of the argument. 11 The student missed multiple important, relevant aspects of the argument. 6 The student overlooked obvious, relevant aspects of the argument. 3 The students showed little or no understanding of the argument. 0
    Clarity of Explanation of Descartes’ Argument (Part 2) A reader who was barely familiar with the text would find it easy to follow the explanation. 6 A person who was reasonably familiar with the text would find it easy to follow the explanation. 5 A person who knew the text thoroughly would find it easy to follow the explanation. 4 A person who knew the text thoroughly would have some difficulty figuring out the explanation. 2 A person who knew the text thoroughly would have serious trouble figuring out the explanation. 1 The instructor had to work hard to figure out the explanation. 0
    Strength of Main Criticism (Part 3) The student presents a strong, relevant criticism of his argument. 13 The student picks a fairly strong, relevant criticism of his argument. 11 The student picks a credible, relevant criticism of his argument. 8 The student picks a criticism that is somewhat weak or off-topic. 4 The student picked a criticism that is irrelevant or very easy to respond to. 1 The student did not present any criticism of his main argument. 0
    Community Contributor

    ^Apparently Canvas automatically formats that as a table. Weird. I pasted it in as text.

    (Also, apparently, no threaded replies anymore? Sigh)

    Community Coach
    Community Coach

    @abigail_smith_2 ...

    This is only a guess...because I really don't use the format that James describes under his heading, "Flexible Rubrics".  (I use the format that is similar to his first few screen shots.)  In your screenshot, it looks like your columns for "Criteria" and "LongDesc" kind of join into one cell below those two column headings.  In James' example, the column name is actually "Criterion" (not sure if the different spelling matters).  Your example doesn't seem to have those two columns separated below the that *might* be part of the issue???

    Community Contributor

    @Chris_Hofer I tried both "criteria" and "criterion." No luck. 😞

    The page says "longdesc" is optional and if left blank shouldn't affect anything.  It's so annoying that Canvas automatically formatted it as a table on this forum; it is actually typed out as two tabs in a row.

    In any case... I just tried deleting that column and pasting the results... still no luck! 😞

    Community Coach
    Community Coach

    @abigail_smith_2 ...

    Have you tried doing it like James' first example at all?  For example, you could do something like this:


    James' script figures out which cells have content and which do not, and it just builds the rubric for you in Canvas based on text it finds in the cells.  I've done this before in rubrics I've built for instructors, and it works well.  🙂

    Community Champion

    @abigail_smith_2  Like Chris, I also use the format listed at the top of this blog.

    And since pasting your rubric data into this forum automatically created a table, I'd say that the long desc is being swallowed up by the merged cells of the criteria name. I believe the script is looking for a blank cell for the long descand not finding any. So there's a mis-match in the number of cells between the header row and the rest of the data. @James  can give us the real story on behavior.

    I see 2 choices to resolve the nothing happening issue:

    Use a spreadsheet or table and add in the blank column for long desc, and then copy-paste.

    OR reformat your table to the first kind where the point values are on the row above each rating level.

    Hope this suggestions help,
    Cheers - Shar

    Community Champion


    LongDesc is optional. The column can be blank (with just the heading) or you can leave it out completely. You say you have the 2-tab thing going on, so that's not the issue.

    The names you put in for the headers -- or even the headers themselves -- are completely optional.

    The problem is that in your first criterion: Accuracy of the Explanation Of Descartes’ Claim (Part 1), you have a 0 for Pts4 and then a 1 for Pts5 and it's barfing because they are out of order (or perhaps because you have a 0 twice-- also for Pts6).

    In other words, your points are 9 8 5 0 1 0

    Change the Pts4 value to something between 5 and 1 and then it works.

    I took your spreadsheet and changed it to 2 and then it imported (and I tried it both ways with longdesc).