Importing Rubrics from a Spreadsheet

Community Champion

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 Champion

    Outstanding work yet again,  @James ‌.  Before you do another program, you may want to bottle some of the energy that you have and sell it, because I don't know how you manage to find the energy and time to do all of the wonderful additions that you do.  I just now tried this and (not surprisingly) it worked perfectly.  This is a real boon for any of you with long, complex rubrics that get frustrated using the editor in Canvas.  The ability to quickly add the same Ratings for multiple rows (courtesy of Excel's copying feature) will cut down on plenty of editing time for you.  Great work!

    Community Champion

    Fantastic  @James ‌

    Community Novice

    AMAZING  :smileycool: !!!!

    Thank you very much!

    Community Champion

    I've made some major changes to the script. For those who were early adopters in that first week, or those who looked at it and thought it's too complicated, here are some of the new features:

    • You can block your rubric by specifying the points on one line and then listing just the rating descriptions on lines that follow.
    • You can list your ratings in either ascending or descending point value and it will place it in the proper order for you (you can't mix).
    • You can import outcomes into your rubric by providing the Outcome ID from the outcomes page.
    • The form is more flexible than before in what it will accept.

    The documentation has been updated to reflect the changes, but I wanted to point out the differences.

    Most of the changes weren't made based off feedback received from people, it came from me trying to use it and realizing that, even though it was quicker than using the web interface, it could be even easier than it was. There are probably other suggestions that people will come up with who do rubrics on a regular basis, but I'm not one of those, so I'm still trying to keep it simple for others like me. Thanks to stefaniesanders and  @Chris_Hofer  for their input about outcomes and using them as a way to have a non-scored item in the rubric.

     @kona  keeps suggesting that I write a script that will allow her to download a rubric. Ideally, it would be usable with this script to download, make changes, and then import the new rubric into Canvas. I felt that I really needed to be able to handle outcomes before attempting that and wasn't sure how it would fall into place. I think that problem has been solved with this update, so maybe we'll see a companion script at some point. The question is whether to make it a CSV that downloads or opens up a text-box with tab-delimited data like this one imports that you can just copy/paste into a spreadsheet. The CSV is nice if you're going to Excel, but if you're wanting to duplicate a rubric without changing anything, then having the tab-delimited output and going through the clipboard would make it quicker.

    Instructure Alumni
    Instructure Alumni

    Outcomes! Happy dance! Thank you so much,  @James ‌.

    Community Coach
    Community Coach

     @James ‌ this is FANTASTIC!   Seriously.  I want to buy you a drink of your choice for this!  Will you be in Keystone?

    Community Champion

    We've reserved lodging, so I think we're going. I'm a cheap drinker, though -- water or a Pepsi.

    Community Coach
    Community Coach

    Pepsi it is!

    Community Coach
    Community Coach

    Thank you for your work on this, James!  I created a rubric for a course I was building using the process you had in Version 1, and it worked nicely.  I wanted to share one little hiccup I ran into but quickly solved once I figured out what was wrong.

    I was using a PDF file that contained the course curriculum to copy/paste the rubric criteria from a table into an Excel spreadsheet.  I had to do this line-by-line vs. selecting multiple rows as the copy/paste operation wasn't working too well from a table in a PDF to an Excel file.  (I may have to consider generating a Word document next time.)  Here's what part of that rubric looks like in the PDF.  Note that row 11 looks normal...but keep reading...

    Scoring Guide from PDF File

    As I was pasting each criterion, some of them carried over to another line (like row 11), and I didn't realize that there was a hard return in the line when pasting from the PDF into the Excel spreadsheet.  Before I realized this, I had pasted in my Excel table into the Rubric Import tool, and when I clicked the button to create the rubric, it didn't do matter how many times I clicked on the button.  So, I expanded the text box to see what the pasted in rubric looked like, and I saw something like this:

    Rubric Import

    There were quotes around just one of the criterion (row 11).  So, I went back to my rubric and looked at the cell in question.  I found that the text had a hard return (Alt+Enter) in that cell after "word usage,".

    Rubric Import from Excel

    Fixing this also removed the quotes around the criterion, and I was able to import the rubric to Canvas.  This is probably a unique case for what I was doing...but I thought I would share in case others experience any similar issues.

    Thanks again, James!  This is a real time saver!

    Community Champion

     @Chris_Hofer ,

    Too bad you didn't have version 2 at the time -- that common structure would have been a lot easier to setup, but it still wouldn't have fixed the embedded enter. Thanks for that Alt-Enter, I didn't know about that. I've always put a formula with a CHAR(13) in there and now that you've pointed it out, I do remember it putting quotes around it and that always causing issues for my scripts. Excel does quote it much like it would for a CSV file if there is a newline or a quote in there.

    So the question becomes what to do about it? Canvas won't accept a newline in the ratings portion and strips out any embedded newlines. This is what happens if you try

    In Excel (there is a space after "is")


    Here's what you get when you copy/paste into Canvas as the criterion description


    When you click OK, it keeps the quotes around the outside, which someone is not likely to want. That would be an indicator that something is wrong.

    The Long Description is a textarea instead of an input, so it allows line breaks (that may cause a problem with the Rubric Download script I was working on last night).

    Do we stick with the "this is for simple cases" and not allow newlines in the fields? Doing so would help people realize that they have a hidden issue in their rubric. Or do we recognize quoted strings and decipher them -- stripping out the newline since it can't be in there? Hmmm ...

    Part of me says I can't fix the shortcomings of the format. And someone might be using a newline as a line break on purpose without extra spaces at the ends, so removing them would run words together, which is not desirable. Part of me says if I can make the job easier for the person creating the spreadsheet (and it's not something far fetched or fringe case) then I should attempt it. It will obviously complicate things as the first thing I do is split the input on newlines to break it into rows and that's done without regards for whether or not a field is enclosed in quotes.

    As for the long description, if it comes from an outcome, it's actually HTML wrapped in <p> tags. I have not tried putting HTML into the long description to see if it works.

    The long description is the only place where newlines are allowed, do we rework the script to allow them there or just say it's for simple cases and if you want something more complicated you can add the complicated later but this will get you a good deal of the way there?

    I'm kind of working in uncharted territory here since my rubrics are always simple and concise (I avoid long terms so they fit on a screen), so I appreciate the feedback (and guidance) from people who actually work with them often.

    Community Champion

     @Chris_Hofer ‌,

    In version 3, I've modified the code to handle embedded newlines.

    • If the newline is in the long description, it will keep it.
    • If the newline is the criterion name or one of the ratings, where the input must be a single line, it will replace the newline character with a space. I thought about stripping it out, but then words might run together if there were no spaces around the newline.
    • To follow up on the previous item, if there were spaces around the embedded newline, then there would be additional spacing added by the handling of the newlines. This script replaces all occurrences of 2 or more spaces with a single space. This fixes the spacing issue that might be caused by newlines and extra whitespace is ignored anyway in HTML, so it shouldn't affect the spacing anyway.
    • Quoting the line to contain the newline also converts a quotation mark " into "" (2 quotation marks). If the field starts and ends with quotes, then any double quotes within the field are changed to a single quote.
    • The quote marks at the beginning and end of a field with embedded newlines are removed. I toyed with the idea, and actually had it working for a while before removing it, running the code until all of the quote marks were eliminated. That is, if someone had put quotes around the entire thing and embedded a newline, the script would get rid of the quotes that Excel put in there for the embedded newline and then it would also get rid of the quotes the user had put there. I opted on the side of just removing them once, figuring that if they were there more than once that the person must really want them there.

    I tested quotes with a bunch of different scenarios. Here is one example where the arrows point at the embedded newlines. There are no extra spaces at the ends of lines.


    Here's how that looks once imported into Canvas. Notice the spaces between the words.


    Here's what the long description looks like.


    Community Participant

    This is fantastic! I can't wait to give it a go. Thank you!


    This is amazing! Wow!!!

    Instructure Alumni
    Instructure Alumni

    Very cool. This work is inspiring to us on the Product team -- you have real dedication, and it highlights a real need.

    I can add an alternative path to getting the Outcome IDs, if you're willing to look at JSON output in your browser (I know, it can be scary).

    It's super easy to use the API for this if all your Outcomes are in one Outcome Group. Otherwise, you have to repeat this 3-step process for each Outcome Group:

    1. Discover the IDs of your course's Outcome Group(s).

    While logged in, modify the URL in your address bar to look like this in order to hit the Outcome Groups API:


    ...replacing <site> with your subdomain, and <courseid> with your course ID.

    TAKE A DEEP BREATH Smiley Happy

    This results in a list of all the Outcome Groups (folders) in your course, and looks like this:



    If you don't have any Outcome Groups in your course, the results are way simpler -- more like this:


    This shows that even if you don't have any Outcome Groups, you still have an Outcome Group ID for the root level.

    In either case, you want to copy the first id value (highlighted in yellow above).

    2. Get the IDs of your course Outcome Group.

    Now, modify the URL in your address bar to look like this in order to hit the Outcomes API:


    ...replacing <outcome_group_id> with the Outcome Group ID you copied from the first API.

    This results in a list of all the Outcomes in this Outcome Group, and looks like this:


    I know, it's hard to look at. But you're looking for each Outcome ID, as highlighted in yellow above. It helps that each Outcome is followed (eventually) by the title.

    If you do have your Outcomes organized in Outcome Groups, you will have to repeat step 2 for each Outcome Group, using a different Outcome Group ID as discovered in step 1.

    If you do a lot of this, you may want to find a good browser add-on, like Postman for Chrome, that helps you make these API calls and formats the JSON results to be easier to read. You'll just need to use a token if you do.

    Community Novice

    Single criterion rubric:

    For some reason, I could not get a single criterion rubric to import. I tried a few things to determine if I had made a mistake. In fact, Canvas would not take a two criterion rubric. Hmmm.

    The fix:

    I copied and pasted a few rows and columns from another rubric.

    Selected, copied, and pasted into the importer dialogue box.

    Shazam! Canvas accepted the rubric import.

    I chose to edit the particular rubric.

    Deleted unwanted rows.

    All is fine now and working.


    Community Champion


    Thanks for passing this on. The single criteria issue has been fixed in version 5 of the code, which is now on GitHub, and now you can have a single line (criteria) rubric.

    What was happening is that I checked for a block form rubric first it was not correctly rejecting a single line, which meant that the flexible form never got called, but there was no rubric (or error message). I added a check to make sure that the criteria list had to actually contain something, rather than just failing to find a row of all numbers within the first two lines. I also removed a console.log() I had inadvertently left in there and changed a couple of variable names and functions that turned out to be reserved words in JavaScript (long and boolean). The script ran when I had them in there and functioned properly, but my editor refused to format the code and we can't be having unformatted code.

    I was able to create a two criteria rubric without any problems, so I'm not sure what you're talking about there.

    Flexible form:





    Block form:





    Community Novice

    Sir James:

    It is all good and working. Thank you for the follow-up!

    Fred Prasuhn, Ph.D.

    Community Participant

    Thank you so much  @James ‌ this is amazing!!!

    Community Novice

    Just used this today to set up a rubric, wow this is so much easier. I was dreading having to rework some of my rubrics to be easier to use, and this made it so easy. Now I can cut and paste repetitive items in Excel, tweak them, and then convert the whole thing into a rubric. This will save me hours of my time.

    Thank you James Jones!

    Community Participant

     @James ‌ - Thank you! What a phenomenally useful tool this is! I just imported 15+ rubrics into Canvas in the same amount of time it would have taken me to create 2. Bravo!

    Community Champion

     @adarsh ,

    Glad it worked so well for you.

    Community Champion

    Wow!  @James  This is very impressive!!! I don't know why I waited so long to try it out, but it's much easier than it looks. 

    A couple instructor benefits that I notice after trying this out for the first time:

    1. Copy cells and use formulas to quickly create rubrics (also shown in your video).
    2. Easily provide students with a printable (or printed) version of a rubric, but still use the Canvas rubric for grading and feedback. Excel is easier to print and has better readability than a printout of the online Canvas rubric. 

    We've been waiting a couple years for downloadable completed rubrics, which is currently in product radar according to" modif.... Maybe that can be accomplished with a script? Smiley Happy

    Community Contributor

     @James ‌ are you going to go back and look at this tool to incorporate the new range in points for Rubrics?

    Dr. John Boekenoogen

    University of Oklahoma

    Community Champion

    Probably, but I need to play more to make sure. I've already had the discussion with  @Chris_Hofer ‌ about it and it looks fairly straight forward, but at the time, it wasn't even showing up on the Outcomes > Rubrics page, so I didn't pursue it. The problem I haven't had time to think about yet is the best way to handle it. Because I allowed myself such flexibility in creating them in the first place, it makes it harder to pick up.

    That said, it's not a pressing priority for me, I've got other things going on with my real job that demand attention and have been keeping me out of the Community as much as normal.

    What do you think the best way is? Just adding the word "range" at one end? A column labeled "range" that contains yes/no or 1/0 responses? A better idea?

    For the time being, you can go through and import them and then check the box next to each row that says to make it a range.

    Community Contributor

    I think your idea of adding the "range" and some kind of response might work. I will play with it and see what happens. I understand about work coming first... Smiley Happy 

    Community Champion

    Upon further investigation, I probably will not make the change to support rubric ranges yet.

    I went into our beta instance of Canvas to see what would be needed and they are making changes to Rubrics again. This time it's the addition of a "Rating Description". Since things are in flux on their end, rather than reworking the system to accommodate ranges and then reworking it again to handle descriptions, I would rather wait and just rework it once.

    The interface has changed as well -- instead of the editing happening in-line, it now happens in a separate dialog box that pops up for each rating.

    In Production (we don't have ranges turned on in our production site):


    In Beta:


    Community Contributor

    Hi James,

    This is a wonderful time saver.  We are about to enable the new rubric features, so I hope you do update your script to take advantage of them.  Unfortunately, current script puts the rating description in the new Rating Title field instead of the Rating Description.  Also, I wanted to let you know that I have stumbled across what I believe to be a minor bug.  In criteria with multiple performance levels (ratings), the rightmost cell with the smallest point value is not editable in Canvas.  If the Rubric Criterion Range feature option is off, the pencil icon is only visible when I hover over the adjacent cell.  If the new feature option is enabled, the pencil icon is visible, but it's not clickable.  It's possible the problem is specific to my sample rubric.  I've only tried one so far.

    Community Champion

    It's also possible that it's related to the changes that are underway with Canvas. I really haven't had time to explored deeply.

    Community Champion

     @leward ,

    I looked into it a little more tonight (in the beta instance). What I am describing below is the behavior of Canvas, not the behavior of my rubric importer tool -- I haven't made it that far yet (at least not when I started writing this)

    If you are using rubric criterion ranges, then the smallest value is not editable and is set to 0. I can click on the pencil and edit the rating, what I cannot edit is the minimum point value for the smallest valued rating. I'm not sure if that's what you were saying or you meant you couldn't edit anything in that group at all.


    This is because of the way that Canvas sends the information. It only sends the maximum point value for any criterion back, not the minimum. Canvas does not store the minimum point value and sets the smallest value to 0 when you choose to use ranges.

    Clicking on a rating assigns the point value assigned, which is the maximum value when using ranges.

    This threw me at first because I wanted a "None" category that was worth 0 points, but I found that if I set the last rating to have a maximum of 0 and a minimum of 0 (that I can't change) then I could get a single point value.

    If I want this


    Then this is what Canvas sends as a form (I've stripped out some of the irrelevant stuff)

    rubric[criteria][0][description]:Description Criterion
    rubric[criteria][0][long_description]:Long Description Criterion
    rubric[criteria][0][ratings][0][long_description]:You really blew my socks off
    rubric[criteria][0][ratings][1][long_description]:Better than average
    rubric[criteria][0][ratings][2][long_description]:Met the requirements, but not more
    rubric[criteria][0][ratings][4][long_description]:Minimal job
    rubric[criteria][0][ratings][5][long_description]:Assignment not submitted
    title:Rubric Ranges Testing

    If the value in line 22 for ratings[5][points] was greater than 0, then Canvas would make the last one be a range with 0 as the minimum value.

    What has changed in the beta instance of Canvas is that you now get descriptionlong_description, and points. In the current production instance, you only get description and points. That means that what is currently the only option for description gets formatted as the title in beta. There is no option for supplying a long_description in the production instance and by default, everything that people had been using as their description will get formatted as a title in the new one, but looks like it currently does in the existing system so you can't tell any difference visually. You can see this if you edit an existing rubric in your beta instance of Canvas, there will only be a "Rating Title", there will be no "Rating Description".

    Unfortunately, current script puts the rating description in the new Rating Title field instead of the Rating Description.

    This is the way that it must be for now. Production doesn't support Rating Descriptions, just Rating Titles. Those are only available in Beta right now. But I disagree with the assertion made in the statement. One should not assume that everything that is currently in a rubric should be a description. I know that would be easy to do because Canvas is changing the labeling of "description". Canvas is calling the existing content the Title rather than the Description and leaving the Description blank. If I were to automatically put things into the description and leave the title blank, then the behavior would be different from what Canvas does and that's not the point of the system, its goal is to make it more convenient to enter the information.

    All of this is independent of the whole rubric range thing.

    But it leads to a design quandary for moving forward with the rubric importer and that is what to do with the long description (aka Rating Description). And that is a significant enough change that I didn't want to tackle the range issue for just a three week period and then have to completely redo things coming down the pike.

    I just tested the current system with the production site and it continues to work, you'll just have to manually check the range for those criterion you want as ranges. I also tested it with the beta instance it it continues to work there, but as mentioned, all values come through as Rating Titles rather than Rating Descriptions, but design-wise you probably shouldn't have a description without a title anyway, although someone will probably come up with a use -- possibly because they they like italics better than regular text, which is not a valid reason. 

    So, what do we do moving forward? For the time being, the system works and appears that it will continue to keep working after the beta changes get rolled into production and I'm backlogged on grading, so this gives me a little time for people to think about it before I make any changes.

    • We can choose to ignore the long description completely and just handle the rubric ranges. This would only keep titles, which would continue to be formatted the way the current descriptions are. This is not really a viable long-term solution as it leaves too much functionality out.
    • Do we require that each rubric continue to take up a single row and so any long descriptions need to be another column. This might work in the free-form mode, but I can suspect those using the block form don't like this.
    • Do we allow for multi-row rubrics and put the long description on the second ro. This makes sorting more challenging as now people have to move two rows around when sorting things, but it probably works better in the block form where people want to format the long description and have it line up with the title.
    • What about when there is no long description? If allowing for multiple rows, then how do you handle the criterion that don't use long descriptions? Or what about if none of them have long descriptions -- what distinguishes a new criteria in the new form from another row that contains a long descriptions?

    I wanted something that could take what people use as rubrics and copy/paste them in without modification, but the new functionality is making it harder to decode what the format is without adding some kind of marker to a row to indicate that it's a new rubric. That marker could also be used to indicate whether it's a range criterion or a regular one or possibly tied to an outcome.

    I would like to maintain backwards compatibility if possible, but that may not be possible. I also want to make it so that people could print it from Excel if they wanted to do so, but still be able to import it without going through and making a bunch of modifications. Modifications made outside the block format allow people to still go through and print by just not selecting the specifications outside the main rubric block, but that's not the case in the free-form mode. Does anyone even use freeform or does everyone use the block approach? I don't do any tracking, so I really don't know.

    I'm requesting suggestions from people who actually use rubrics. I'm not an instructional designer so my rubrics tend to be very simplistic. If not for the help of  @Chris_Hofer ‌, it wouldn't be as functional as it is now.

    Community Coach
    Community Coach

    Thanks for the mention,  @James ‌...

    The new design of rubric title/description text boxes is quite interesting to me, and you bring up some valid points/concerns on how to move forward based on this new feature from Instructure.  I am not sure I've got an answer for you on what is the best option to go with, but I can at least give you some examples of rubrics that I've built in Canvas for our instructors which might fit the new title/description text boxes.

    Yesterday I built a course, and I used your rubric import tool to build rubrics that looked similar to this:

    Meat Analysis 2 Rubric

    As you indicated, the descriptions for each of the above ratings would be added to the "Rating Title" field.  Though, if I wanted to utilize the "Rating Description" text box as well, I could easily separate this out with a bit of copy/cut/pasting on my end.

    Rating Titles: Exemplary, Accomplished, Satisfactory, Unsatisfactory, Not evident

    Rating Descriptions: exceeds expectations for criterion, meets criterion fully, etc.

    Sometimes, however, I will be working on a course with rubrics where the descriptions of ratings is very minimal.  It may only be a word or two for any given point value.  I would assume those should remain in the "Rating Title" text box.  I wouldn't use the "Rating Description" text box.  Other times (though rare), I'll see longer descriptions of ratings which might not have text I could easily identify to be used in the "Rating Title" text box.  They appear to be more of an overall description for the rating value than an actual title...and so might fit better in the "Rating Description" text box.  But, that leaves the "Rating Title" text box blank...which you also mentioned above.

    I'm not sure how it would work in Excel...that the "Rating Title" and "Rating Description" text boxes are separate cells in Excel (?) yet are a part of the same point value.  This is an example of the format I use right now when using your rubric import tool, and it works well.

    Rubric in Excel


    Hope this info is helpful in some way.  Thanks again, James.

    Community Champion

    Are you suggesting that the rating title and description be part of the same box in Excel? The only way I can think of that happening would be to put in a separator that would never appear in either one ... or that would never appear in the title. For example, perhaps as pipe symbol |. I don't think that translates well to printing, though.

    Community Coach
    Community Coach

    Nope...different boxes.  Something like this?

    Rubric Descriptions in Excel

    I didn't know what exactly to label the "Description" columns as compared to the corresponding "Title" I just made something up.

    I also wasn't sure if having the description text directly underneath a title cell (in a new row) would be possible.  Example:

    Rubric Descriptions in Excel 2

    Not even sure I like this seems more complicated than the top option because of Column A???

    Community Champion

    In your second example, how do you distinguish between a description for an existing criterion and a second criterion immediately following one that didn't use long descriptions.

    The way I have it now could work -- where the long description for the criterion is in another column and then new criteria would start on the left-most cell while continuations for descriptions would leave that first one (or two) blank, but if you have a second row for long descriptions, it makes sense to do the same thing with the criterion description like you have -- that is more logical and intuitive. That means that the way I have it now loses out.

    What about adding a "D" for description on rows that are long descriptions? It could go before or after all of the other columns in the block.

    If someone wants a block form with one row per criterion and add a separate column for the long descriptions (like you have in your first image), I think I could scan for that. I was thinking that was probably the best way to handle single lines. It's the double row criterion that are problematic.

    The other option is to make options on the dialog box that pops up. I'm not a big fan of that, wishing to keep it simple.

    Community Coach
    Community Coach

    In your second example, how do you distinguish between a description for an existing criterion and a second criterion immediately following one that didn't use long descriptions.

    That was my question as well when I was thinking of ways to do this...and the main reason I didn't really like that option I came up with.  Smiley Happy

    The way I have it now could work -- where the long description for the criterion is in another column and then new criteria would start on the left-most cell while continuations for descriptions would leave that first one (or two) blank, but if you have a second row for long descriptions, it makes sense to do the same thing with the criterion description like you have -- that is more logical and intuitive. That means that the way I have it now loses out.


    What about adding a "D" for description on rows that are long descriptions? It could go before or after all of the other columns in the block.

    I'm not sure I'm totally following this.  Is that different than the first image I posted?  Maybe I need to see an example of what this might look like?

    The other option is to make options on the dialog box that pops up. I'm not a big fan of that, wishing to keep it simple.

    Completely agree.  Keep it simple.

    Community Team
    Community Team

    If you love this blog post, you'll probably want to check out the Canvas Beta Release Notes (2017-11-06) 

    More specifically the "Criterion Duplication"

    Instructure Alumni
    Instructure Alumni

    Criterion duplication will be included our upcoming release: Canvas Production Release Notes (2017-11-18) 

    Community Champion

    Bravo, and THANK YOU,  @James ‌! 

    Community Coach
    Community Coach

    Hi  @James ...

    I'm not sure if you've tried this out yet...but I'll post it anyway for everyone.  Now that Rubric Ranges are possible, I wanted to see what would happen when I imported a rubric using your import tool.  Here's an example before I turned on Rubric Ranges at the account level:

    Rubric Ranges 1

    Then, I turned on Rubric Ranges at the account level and then came back to this rubric (via the Outcomes button).  When editing the rubric, I had the option of selecting the "Range" checkbox for each row.  Once checked, the point ranges displayed as I expected them to.

    Rubric Ranges 2

    I also tried importing a separate rubric using your rubric importer after the Rubric Ranges Feature Option was turned on.  Everything imported similar to the first screen shot above, and then I just selected the "Range" option again.

    So, from what I've seen, it might take a little extra work once rubrics are imported to click each check-box, but maybe that's okay for now?  Hope this helps.

    Community Champion

    That is consistent with what I found out when they were first unveiling it and why I didn't stress too much about how to incorporate the ranges. I wrote it on the note board next to the computer to look at. It's still there, but other things have taken a priority this fall and I haven't spent as much time on Canvas as before.

    Thanks for documenting the procedure for people.

    Community Participant

    Thank you for this.  I'd been using Selenium for a couple years to build the rubric.  Since Canvas recently changed the UI for creating rubrics (which include a popup), my method would have needed drastic changes to work again.  Your script has saved me.


    I'm still so surprised that importing to create a new rubric isn't a standard feature.

    Community Champion

     @pxo4  ,

    I'm not a big fan of pop-up dialogs, either, although I felt it was the best way to accomplish the import with what we had to work with. Hopefully it doesn't throw off what you're trying to accomplish too much.

    Community Participant

    This tool is wonderful... Thank You.  Saved us a few hours of work.

    Community Participant

    I wish there were a "love it" icon! This is fantastic, thank you.

    Community Novice

    I really want to try this! I'm using my sophomore writing class as testers for Canvas next term and I don't have time* to recreate all of my rubrics by hand. However:

    1. I'm exhausted and stressed after a hellish final week of the term and I'm having trouble sorting through everything here to really figure out how to run the script. I think I need use the Tampermonkey extension and do something from there?
    2. Tampermonkey extension is blocked by our school! GRR!! Can I install this script on my home computer and use it on my school computer? Or does it require Tampermonkey every time it's used?

    Thank you so much for any guidance you can give this incredibly frazzled and frustrated high school teacher! 

    *Our end-of-term work time was cut down by 1/3 this term, thanks to random meetings and the stripping of collective bargaining by our state. Hooray! 

    Community Champion


    You can install this Tampermonkey on your home browser and it should work there, but if it's blocked by your school, it probably won't carry over. I don't have evidence to back that up since our school doesn't block me from adding extensions. Tampermonkey is an install once thing, though, so you only have to install Tampermonkey and the script once once per browser (if you use Firefox it doesn't carry over extensions and scripts from Chrome) and possibly per machine depending on the settings. But yes, it has to be installed and enabled and the script enabled every time you want to run the script.

    If you install it at home, the installation should be a one-time thing and then it's available to you from then on.  But it sounds like you might have to do some work from home since the school is blocking the script.

    The only issue you should have, once you get un-exhausted and de-stressed enough to load it, is if your Canvas installation isn't hosted at and you have a custom URL like But it should work for any instance matching * without modification.

    I'm not going to answer your "and do something from there?" question because it's not something that people should use without reading and understanding the documentation so you know how to create the rubrics. I presented at the 2017 InstructureCon and demoed how to install Tampermonkey, the script, and then copy/paste the rubric in. Here is a link to the presentation Accomplish the Impossible. The part about this script runs from 9:25 to 12:17 with the substance being from 10:30 to 11:30. There's some other useful rubric stuff that follows after that. Ignore the stuff about Greasemonkey, it stopped working after the presentation.

    Community Novice

    James, thank you so very much! Not only for responding, but for replying so quickly! I'm pretty good at the front end of installing and using scripts and whatnot, so once I'm rested this weekend I'll give it a shot from home. (I'm the go-to-girl for Google add-ons and scripts in my department.)
    Luckily (I guess), our school doesn't have a Canvas URL, we're running on the free-for-teachers option so nothing is restricted within Canvas. It's getting the extension to do the initial install on the script. 

    We work almost entirely from Chrome, so if the install is web-based, and typically follows the user regardless of machine, I should be good. 
    And thank you for that presentation, that will help me immensely! 

    For your troubles, here's Ramona, the copy editor, getting ready to grade papers!  She may look cute, but turn in a late paper and you get the teeth! 

    Cocker spaniel wearing glasses 

    Paige Junge

    English Teacher
    Speech Coach

    Thespian Director
    Marion High School

    Community Novice

    Hahaha! I just watched the video you posted, and yep, I scrolled and scrolled until I found the install instructions! 

    Community Champion

    Hi  @James ‌, thanks for sharing this! It is a great resource and it works very well with Tampermonkey

    Community Novice

    I have another question! First of all, I just imported 80% of my rubrics in less than 5 minutes. Amazing. 
    The next rubric I need to import currently looks like this: 

    Rubric with Standards and Point Ranges

    As you can see, we're using the standards wording as well as assigning points, which each level being a range of points. How do I format this to import it? I tried the block method with different point rows, but that doesn't give me the opportunity to do the Exceeds/Meets/Approaching/Below. I reviewed what I thought was something similar in the document but I'm just not getting it. 

    Here's a live copy of my spreadsheet: Copy - Persuasive Essay Rubric

    Thank you so much to anyone who helps me out! 

    Paige Junge
    English Teacher
    Speech Coach
    Thespian Director
    Marion, Iowa
    Community Champion

     @pjunge ,


    This script doesn't directly support point ranges. In addition, there is not a way to include titles and descriptions both. If you want both, you'll need to manually enter it.

    If you want to use the script with point ranges, then you'll need to start off with something like this.

    Thesis/Belief StatementAuthor included a clear statement somewhere within the essay regarding their position/belief about the topic.10Author included a basic statement somewhere within the essay regarding their position/belief about the topic.8Author included an implied position/belief about the topic.6Author’s position/belief is not clear anywhere in the paper, either explicitly or implicitly.5
    Logical AppealsAuthor included extensive facts, detail, and examples in his/her essay to make the content credible from outside sources.20Author included facts, detail, and examples in his/her essay to make the content credible from outside sources.17Author included basic facts, detail, and examples in his/her essay to make the content credible from outside sources.11Author did not include facts, detail, and examples in his/her essay to make the content credible from outside sources.11
    Credibility (Sources and Citations)Author created a works cited page and cited correctly within essay when necessary.10Author created a works cited page and cited within essay when necessary but with a few mistakes.8Author had frequent errors in citations within and at the end of the essay.6Author did not create a works cited page and/or did not cite within essay when necessary.5
    Emotional Appeals (Personal/real connections)Author used emotion and vivid real-life examples to enhance essay.20Author used some emotion and real-life examples to enhance essay.17Author used very little emotion and real-life examples to enhance essay.15Author did not use emotion or real life examples to enhance essay.11
    Format/ ConventionsEssay was typed in the correct MLA format (Times New Roman, 12 pt. font, one-inch margins, double spaced), was an appropriate length, and contained few errors.10Essay was typed mostly in the correct MLA format (Times New Roman, 12 pt. font, one-inch margins, double spaced), was an appropriate length, and contained some errors8Essay contained many errors regarding formatting, length, and/or basic conventions.6Essay was not typed in the correct MLA format (Times New Roman, 12 pt. font, one-inch margins, double spaced) and was not an
    appropriate length.

    Once you've imported that, then edit the rubric and check the box to use point ranges. Do this for each criteria.


    If you don't have the Range checkbox, then your institution hasn't enabled ranges. It's a feature option that the Canvas Admin can enable. We have not done so at our institution.

    That doesn't get the Meets, Exceeds, Approaches, Below standards titles in there. My script only puts values in the rating titles, not the rating descriptions. It was created before Canvas modified things to have both and I haven't figured out a good way to maintain the flexibility and incorporate all of the new options. I will say that the way you have created the rubric (other than having the point ranges in there) makes logical sense, but then everyone probably thinks the way they do it makes sense; the problem is finding something that people can work with that doesn't force everyone else into changing their approach drastically (to the point of not using the script).

    If manually creating it is too difficult (this one only has 5 criteria, so I don't think it rises to that level), you could modify line 169 of the script.

    Currently, lines 168-171 look like this

      'description' : descriptions[j].replace(/\\n/g, ' ').replace(/\s+/g, ' '),
      'points' : points[j],

    If you change line 169 to say 'long_description' instead of 'description', then it will put the descriptions into the rating descriptions instead of the rating titles

      'long_description' : descriptions[j].replace(/\\n/g, ' ').replace(/\s+/g, ' '),
      'points' : points[j],

    However, then your rubric looks like this:


    Notice that it says "No Description", when it really means "no title". But it may be faster to go through and add the titles than the descriptions.

    If you don't go through and add the Title to each rating, then when you go to add the rubric to an assignment using the Find a Rubric screen, you see this:


    After completing the rubric, this is what shows in SpeedGrader.


    I did not go in and see what it looks like for the student, but I would suggest making sure you get those Rubric Titles in there if you make the change on line 169.

    Finally, if you're willing to hack the code and remembered to restore it back when done, you could modify the entire addRatings() function that starts at line 154.

    function addRatings(descriptions, points) {
      // Generate the ratings, reversing the order if necessary
      if (descriptions.length === 0 || descriptions.length !== points.length) {
        return false;
      var mono = checkMonotonic(points, false);
      if (mono === 0) {
        return false;
      var ratings = [];
      var n = points.length;
      var j;
      var ratingTitles = ['Exceeds Standards', 'Meets Standards', 'Approaching Standards', 'Below Standards'];
      for (var i = 0; i < n; i++) {
        j = mono < 0 ? i : n - 1 - i;
          'description': ratingTitles[j],
          'long_description' : descriptions[j].replace(/\\n/g, ' ').replace(/\s+/g, ' '),
          'points' : points[j],
      return ratings;

    There's really only two changes -- I added a ratingTitles list (shown on line 13 above) and then added the description that uses the ratingTitle (shown on line 17).

    Now when I import the spreadsheet I gave at the top and go in and manually check the Range box for each criteria, I get this, which is what I think you were wanting.


    Don't forget to undo the changes or it will make every rubric from then on use the Exceeds, Meets, Approaching, and Below standards titles.

    All said, it is probably easier to just copy past the values one at a time into this one since it's not what the script was designed to do.