untested marks a team that has not played anyone ranked in this division’s top 20 — or any outside opponent of top-20 strength — so its rating rests entirely on games against the middle and bottom of the field. One game against top-20 opposition, win or lose, clears it. It is a prompt to read the résumé, not a penalty. Full explanation in Method & Policy.
Click any column header to sort by it; click again to reverse. Use Columns to choose what the committee sees. Click a team to open its full résumé — tier record, best wins, worst losses, and the arithmetic behind its numbers. All teams in the pool are rated together; only the selected division is listed. Massey uses margin of victory through a diminishing curve by default, so a 9-0 counts more than a 3-0 but nowhere near three times more; a hard ±3 cap is available under Model settings.
By district
By program
| # | Team | District | Years qualified | Apps | NationalsW-L-T | Win % | Semis | Finals | Titles | NowRPI rank |
|---|
Edit the history file
One line per program: team, district, years (space separated), W, L, T, semifinals, finals, titles. Paste over it from the committee spreadsheet and press Load. This is per gender and division — switch the toggles at the top to edit another pool.
Automatic qualifiers
| District | Team | Record | RPI | Rank |
|---|
Rank = position in the Div RPI table. A low-ranked AQ is normal — that's the point of automatic bids.
At-large pool
| # | Team | Record | Last 10 | vs Top 25in RPI | vs D1 · D2 · D3 | Road | RPI | Colleyrank | AQ |
|---|
Ranked
Next up
Committee ballots
Previous week's submission (optional — paste last week's exported submission CSV, or type rank,team lines) to get ▲▼ movement, new entries and drop-outs:
Weekly release
How to get the file (30 seconds, once a week)
https://0wtr7r0cl7.execute-api.us-east-2.amazonaws.com/prod/tenant/stats?tenant_id=404933495157163011&season=2026-27&sport=msoc&include_players=false&include_games=true&division=div22. Press ⌘S and save it (call it
div2.json).3. For the other divisions change
division=div2 to div1 or div3; for women’s soccer change sport=msoc to sport=wsoc. Save each one.4. Come back here, press Choose NJCAA file(s), and select them all at once — men’s and women’s files can be loaded together; each file is routed to the right side automatically by the
sport value inside it.You should not normally need any of this: the sync job mirrors these feeds several times a day and the board refreshes itself when you open it. Press Refresh from feed to pull the mirror on demand. Loading a file by hand stays available as a fallback.
Load results
Paste CSV, one game per line: date,home,away,home_score,away_score,neutral,score_known (last two optional, 1/0). Leave both scores blank for a scheduled game — it shows on the Results tab as a fixture, stays out of the ratings, and is filled in automatically when you later append the final with the same date and teams. Games load per gender; the division selector filters which teams are listed. Team names must match the roster — unmatched names show in the check below.
Current data
This page does not remember anything when reloaded. Export before you close it. Persistence, ballots and snapshots are what the hosted version adds.
Massey ratings
The published ratings from masseyratings.com — the figure the Sport Codes sanction. It cannot be fetched automatically (bot challenge, no CORS), so paste it here: open the ratings page for this division, select the table, copy, and paste below. Select the whole table and copy — it arrives as one block per team and is read that way. Include the footer line if you can: it carries the Massey run time, which gets recorded alongside the ratings. Loads for the current gender and division, and is shared with the committee.
Roster check
Teams in the results that aren't on the NJCAA roster (non-NJCAA opponents, or names to fix):
What RPI cannot see
RPI is three quarters strength of schedule, so it looks like it should punish a soft schedule. It often does not, and the reason is worth understanding before a seeding call. Everything in this section is about the published, record-based NCAA RPI — it is the argument for why the committee number on the Rankings tab measures schedule differently. See Committee RPI below for what is actually computed.
A closed region manufactures its own .500. RPI measures opponents by their winning percentage. If a group of teams mostly plays itself, that group's win percentages average out near .500 no matter how strong or weak it is in absolute terms. RPI has no way to tell a closed strong region from a closed weak one — it only sees the wins traded inside the loop. Colley and Massey solve every team at once and do detect it, which is why a big gap between a team's RPI rank and its Massey rank is a red flag rather than noise.
Repeat opponents inflate OWP. The NCAA definition removes games against the team being rated from each opponent's record, so that nobody is credited for beating themselves. That is exact when you play an opponent once. Play them three times and you strip three losses out of their record, and they arrive in your strength of schedule looking far better than they are. A team that goes 11-1 against five opponents, three of them met three times, can post an OWP near .550 when its opponents' true combined record is barely .400. Use the Opponents' win % control on the Rankings tab to see both numbers.
Re-weighting RPI does not fix it. The obvious move is to cut the winning-percentage share from 25% to 20% and give it to the schedule. It barely moves anything, because the problem is not how much weight OWP carries — it is that OWP measures opponents by winning percentage, and a closed group manufactures .500 records whatever its true level. Dropping the WP weight far enough to matter (10-15%) starts crowning teams with losing records and brutal schedules, which is worse. The weights are editable on the Rankings tab if you want to see this for yourself; leave them at .25 / .50 / .25 for anything published, because that is the definition of RPI.
What to do about it. The first answer is built in: the committee RPI replaces the record-based schedule terms with True SOS, which measures opponents by the joint solve across the whole pool rather than by their win-loss records, so a closed region cannot launder itself through the schedule half. Three habits on top of that, none of which require abandoning RPI: sort by Consensus to see the mean of the RPI, Colley and Massey ranks and catch teams that only one system likes; turn on the Opponents, In district and vs Top 10 columns, which between them expose an untested schedule in one glance; and treat the red untested badge — no games against top-20 opposition, in this division or outside it — as a prompt to look at the résumé rather than the rating. A team with no win over anyone in the top half of the division has not earned a seed regardless of what the number says.
NJCAA Sport Codes compliance
Checked against the 2026-27 NJCAA Handbook, Sport Codes Section 11 (Sport Committee & Poll Process). Each rule below is enforced by the tool rather than left to the operator.
| Sport Codes rule | How this tool handles it |
|---|---|
| Games against non-member programs (club, JV, Prep) are not included in rankings, seeding or at-large — except NJCAA-approved military, NWAC and California Junior Colleges. | Non-member games are dropped from every rating by default. NWAC and CCCAA opponents in the file are allow-listed and always count. The toggle to include them is there for what-ifs and warns you when it is on. |
| Poll size: soccer Division I 20, Division II 20, Division III 10. | The ballot length follows the division automatically. Override it and the tool still shows you the Sport Codes number. |
| The highest and lowest vote for each team is omitted from each poll. A no vote counts as the lowest vote. | Collation drops one high and one low score per team, with no votes scored as zero so they drop as the low. Raw totals stay visible underneath. Needs at least three ballots. |
| A dropped first-place vote still counts for receiving votes but not points. Ties at No. 1 break on first-place votes. | First-place votes are counted across every ballot, shown in their own column, and used as the first tiebreak. |
| Teams receiving votes but outside the poll are listed highest to lowest by votes; committees may not pre-select them. | Everything below the cut line is listed automatically in points order and flagged RV. Nothing is hand-picked. |
| Poll voting criteria: overall body of work, record since last poll, last 10, record vs district, record vs DI/DII/DIII. | All five are available as columns — Since last poll, Last 10, vs District, and vs D1/D2/D3 — alongside the ratings. |
| Individual votes are shared internally and listed by Voter 1, 2, 3 rather than by name. | A toggle on the ballot tab anonymises every voter column for sharing. |
| Votes open 8:00 am ET Monday and are due 1:00 pm ET. | The ballot deadline defaults to the next Monday at 1:00 pm and late submissions are stamped LATE. |
| Massey Ratings may be used as a committee tool for soccer rankings, seeding and at-large from 2026-27. | Partly. The published Massey ratings are pasted in on the Data tab and shown in their own column — that is the sanctioned input. The Massey-style column beside it is this tool's own least-squares rating over the loaded games; it is a cross-check, not the Sport Codes figure, and is labelled that way everywhere. If nothing has been pasted for the current week, the published column is empty and only the local estimate is available. |
| Each district champion earns the automatic bid; the rest of the field is at-large. | The At-Large Board projects one AQ per district and ranks everyone else in a single national pool, with the cut line drawn at the number of at-large bids. |
Not yet handled: conference records (the feed has no conference field), and the at-large nomination form requirement — a team must file one to be considered, and this tool does not know who filed.
How the numbers are built
Every game in the pool counts for both teams. Men's ratings are computed across every men's game loaded — Div I, II and III together, plus non-NJCAA opponents when they appear. Rankings are then listed by division. There are no divisional multipliers: a win is worth what the opponent's rating says it is worth, not what the letter next to their name says. That is what makes cross-division scheduling neutral for both sides.
Committee RPI
This is not the published NCAA RPI, and the difference is the whole point. It keeps the RPI shape — a quarter your own weighted record, three quarters your schedule — but measures the schedule by network strength rather than by opponents' win-loss records, for the reason set out at the top of this page: a closed region manufactures its own .500 and record-based OWP cannot see it. Classic OWP and OOWP are still computed and still shown as columns, for reference and for comparison with the NCAA number; they no longer feed the rating.
neti = team i's percentile across the whole pool on Colley, averaged with Massey where scores exist
True SOS = mean of opponents' net, counted once per game played (a repeat opponent counts every time)
opp TSOS = mean of opponents' True SOS
both schedule terms are then rescaled to the mean and spread of classic OWP, so record and schedule keep the traditional RPI balance
RPI = 0.25·WP + 0.50·True SOSs + 0.25·opp TSOSs
The 0.6 / 1.4 weights are the NCAA's (adopted for soccer from the men's basketball RPI). They reward road results and penalise home losses in the team's own win percentage only; the schedule side is measured on the joint solve, so one team's schedule doesn't distort everyone else's. Toggle the weighting on the Rankings tab to see exactly what it moves. Adopt these numbers because they are recognised, not because they have been fitted to JUCO soccer — and fix them in the policy before the season.
OWP = mean of opponents' unweighted WP, each excluding games vs this team
OOWP = mean of opponents' OWP
NCAA RPI = 0.25·WP + 0.50·OWP + 0.25·OOWP
Colley
Solves (2 + ni)·ri − Σj rj = 1 + (wi − li)/2 across the whole pool, ties as ½ W + ½ L. Wins and losses only; no margin, no arbitrary weights, no home/away. Because it is solved jointly, beating a strong D1 moves you a lot, beating a weak D1 barely moves you, and beating a top-3 D2 moves you as much as beating a D1 of equal strength. Use it as the tiebreak and as the check on RPI's label-blind schedule measure.
Massey
Two different things share this name, and the difference matters in a seeding room. The Massey-style column is computed here: least-squares on margin of victory, ratings sum to zero, joint pool, with home-field advantage solved from the data alongside the ratings. It is the same family of method Kenneth Massey uses, over only the games this tool has loaded, and it will not reproduce his numbers. The Massey (published) column is his actual rating, pasted in from masseyratings.com on the Data tab — that is the figure the Sport Codes sanction, and the one to cite. Neither is shown when the loaded data has no scores.
masseyratings.com cannot be read automatically: it sits behind a bot challenge and sends no CORS headers, so neither this page nor the sync worker can fetch it. Paste it in weekly before the poll; the tool records when it was pasted and by whom, so a published poll can say which run it used.
Two margin treatments, set under Model settings on the Rankings tab. The default is diminishing — the margin is put through a log curve (sign(m) · ln(1+|m|) · 2), so a 9-0 counts more than a 3-0 but nowhere near three times more. This is the closest of the two to published Massey. The alternative is a hard cap at ±3 goals, which is blunter but easier to defend in a room: past three goals, nothing you do to the scoreline changes your rating. Whichever is in force is named in the model summary line above the table — say which one was used for anything published.
Policy lines this implies
1. All NJCAA soccer games count for both teams. Ratings are computed across the full men's or women's pool. Rankings are published by division. No divisional multipliers are applied.
2. RPI uses NCAA home/away weighting (0.6 / 1.4) on the team's own win percentage. Neutral-site games are unweighted.
3. The schedule half of the committee RPI is measured by network strength (True SOS), not by opponents' win-loss records, at the traditional .25 / .50 / .25 weighting. The published NCAA RPI is computed alongside it and shown for reference. Anything released must say which of the two it is.
4. RPI seeds the ballot. Colley breaks ties. Massey is committee-only.
5. Unreported results are not eligible for ranking that week.