Attention Scouters! You will want this

A lot of people have been looking at this spreadsheet which is super for scouting. It pulls data from and predicts which teams will be in which division competing in the VRC Worlds Competition.

This is an extremely valuable resource, however; I came up with a way to rank all of these teams in addition to knowing what division they are in. To rank them I used two parameters: skills score, and vrating.

The API on allows for you to get lots of cool data through 7 different APIs. I used the skills, and season rankings APIs to get the information.

Using this data, and some cool spreadsheet tricks, you now have a non-biased ranking system for all of your scouting needs! Your welcome!

click here for the link to the awesome spreadsheet
click here for the link to the awesome spreadsheet
click here for the link to the awesome spreadsheet
click here for the link to the awesome spreadsheet
click here for the link to the awesome spreadsheet


Our team has kept track on our vrating and vrating_rank since November. At some point in early January the vrating and vrating_rank stopped updating. Don’t know what happened but vrating isn’t a current representation of teams.

In addition to the robot skills score, you could get a rough idea of how competitive teams are by importing team’s number of tournament championship awards and dividing by their number of competitions attended. It won’t be a perfect representation because some regions are more competitive than others, but there really isn’t any perfect way of scouting.

1 Like


Thank You very much for sharing this!! This will be very useful for our teams!!

Just one question, how are the “vpower” and “overall value” calculated?



This is awesome. Thanks so much. I was truly shocked at how high my team was ranked.

Hey I’m 26th. Cool. I’m unfamiliar with the Vrating system. How does it work?

1 Like

I was gonna look my team up, but then I remembered that it’s worlds rankings.
I didn’t get to worlds.

vRating is a made up statistic implemented into According to the creator of vexdb, vRating is meaningless and a broken stat.

Statement from VexDB’s Creator regarding vRating:

I don’t really remember much about it. I didn’t develop it I merely implemented it. It didn’t serve its purpose which is why it’s no longer on the VexDB website (but is still available through the API as you’ve noticed).

The following is the algorithm that was given to me to implement:

// Calculate vRating

/* var1 = (totalcompetitors - totalrank) / (totalcompetitors - rankings.length);

  • var2 = (totalwins + 0.5 * totalties) / (totalwins + totallosses + totalties);

  • var3 = (totalopr / rankings.length) / (totalscore / matches.length * 0.66);

  • var4 = (totalccwm) / ((totalopr + totaldpr) / 2);

  • vrating = var1 * 0.25 + var2 * 0.25 + var3 * 0.25 + var4 * 0.25;


Most of the variables used there should be quite self explanatory (“total” just being the sum for the season).

“totalcompetitors” was the total number of robots that the team came up against

“rankings.length” is the number of rankings that the team had (i.e. the number of events they participated in)

“matches.length” is the number of matches that the team played in.

The idea they had was that it would be a number between 0 and 1 giving a team’s strength for the season. Each of the 4 parts was meant to give a number between 0 and 1 but this was not the case. I remember talking to Jordan from BNS about all the issues with it ages ago, and how some of the parts don’t even make any sense, hence why it was removed from the site. I think Jordan still wanted to use it though so I left it in the API.

  • var1 doesn’t really make much sense, I assume they meant to try make it the average finishing position for the team scaled, but that’s not what that is.

  • var2 is okay, and the only one that makes sense to me (win percentage)

  • var3 tries to create some relationship between average OPR and average match score which I don’t understand the point of, OPR already includes match score so it seems a bit strange, also isn’t necessarily between 0 and 1 (OPR could be negative), and where does the 0.66 come from?

  • var 4 also doesn’t make any sense to me. CCWM = OPR - DPR so all this variable ended up doing was greatly prioritising defensive teams (a good defensive team has a negative DPR which will increase the top half and decrease the bottom half of the fraction). Also again not limited to between 0 and 1 and for teams that are greatly defensive this number can be negative which completely makes no sense

So yeah, I didn’t think it was very good, but if you want to use it feel free, in my implementation it’s just scaled by 100 (so 100 was meant to be the top score, and 0 the lowest, but you’ll definitely find some outside those bounds).




Okay that makes sense thanks.

I noticed that team 240P has negative number assigned to them.

Is it because they are OP and come from down under? :wink: :wink:



It appears that all the NZ teams have that same score or withing a few points along with a few other teams. Looking through the data on vexdb it appears that no NZ teams have a vrating for turning point. I therefore have come to the conclusion that vrating probably was calculated earlier than february 22nd where our teams competed in the only uploaded comp. That would mean any teams who only competed after whenever the data was calculated will come out as a pretty low ranking. @turningPoint this is a flaw in your ranking system that you might want to figure a solution out for.

1 Like

How did you weigh the value of vrating against the value of skills scores? There are a few examples of teams ranked in the top 20ish, with average skill scores.

Thanks :slight_smile: cool idea!

Does the V rating not show up on the Google Docs mobile app? All I’m seeing is team number, name, and division.

I made something similar for excel a while ago so I guess I’ll share it.
click here to go to the spreadsheet
It has several tabs. Paste the teams you want data for in the “Teams” tab. Excel will pull each team’s data from VexDB. The “VexDB Data” tab will show how each team did for every tournament they went to. The “Rating” tab will show each team’s vrating. The “Most Recent” tab will show only the most recent tournament for each team. The “Predict” tab uses each team’s vrating to predict the winner in a match. This is only 60 -70 percent accurate though, so I wouldn’t put much weight to it. Finally, the “Printable” tab summarizes each teams info and leaves space for you to write stuff in. I also have a “Survey Data” tab that grabs data from a google form’s survey I set up so that I can have scouters watching matches filling out the survey. If you want to make your own, you would have to create a google forms survey, publish it to a csv, and then use power query to grab it from that url. If you want to take my survey, just fill out the info here. The excel sheet will automatically add any new responses whenever you click the refresh button on the table. This doesn’t work on the web version, though.

Edit: It seems that all the queries I have don’t work in the web version, so you have to download it and run it in excel if you want it to work. I’m using Excel 2019, idk if it would work in any of the older versions.

Also, I don’t have the skills score in my excel sheet, so turningPoint’s sheet is very useful and definitely easier to use haha.


Is there a spreadsheet for Middle School? This would be really useful for us at Worlds.

1 Like

I realize that this is a problem with this current sheet. I am actually going to make a version 2.0 but not post it on the vexforum. If you want to DM me we can talk more about what the best solution is.

If you DM me I can show you how to make one for middle school.

I like what you did there. I might implement into my 2.0 spreadsheet. Thanks this is my 4th or 5th revision and all of the previous ones were messy af

it’s probabally because you need to zoom with the bar at the bottom @5SRobotics

so if you look at my formulas (which are super messy) then you can see that they take the current rating and multiply it by (100/the max value of the dataset) this will then give out a percentage of how good they are for that condition.

=( (IFERROR(VLOOKUP(A2, skills!D:H, 4, FALSE),0) * (100/max(skills!D:H)) ) + ( IFERROR(VLOOKUP(A2,vrating!A:E, 5, FALSE), (MIN(vrating!E:E)-1)) * (100/max(vrating!E:E)) ) )

To answer your question @roboraven91 they are equal in value because both metrics get a percentage. If you want to make one value be more valuable than the other then you can just change the 100 to some other number.

@Illyana refer to @evangs1 's post.