Skip to main content

How the eligibility report is worked out

This page explains how the eligibility report reaches each verdict: the rules, the data, how the data stays current, and how to check any result yourself.

The report is a guide. The Rugby Xplorer Match Participation Report remains the official count. The report doesn't check registration, because the match data has no registration details or USA IDs.

Checking a result

  1. Open the eligibility report and choose a club.
  2. Open a player's page from their name. Its eligibility section lists every game they were on the roster for, what they did in it, and whether it counted.
  3. Follow the Rugby Xplorer link on a round to compare it with the match report. Here is an example match report.

The number of rounds marked as counted is the player's Match Participation for that side.

USA Rugby's eligibility rules

USA Club Rugby sets player eligibility in Section 3 of the official Senior Club Regulations 2026-27 (PDF). The changes from last season are summarised in the 2026-27 Key Changes (PDF). The rules decide who can play for a club in the National Championship Series (NCS), the national playoffs for Men's Divisions I to III and Women's Divisions I and II, and they're meant to stop players moving between clubs to strengthen a team for the playoffs. The regulations are the authority; this is a plain-language summary.

How the report applies the rules

The report applies the match-based rules above, the ones Rugby Xplorer's records can show, in the same way to every club, by how many sides it fields.

What counts as a match. Match Participation is the number of NCS Qualifying Matches a player entered, as a starter or as a substitute who came on (Reg 3.4.2(e)).

A club with one side. At least two NCS Qualifying Matches with the club (Reg 3.4.2(e)). A club counts as one-side when only one of its sides appears in our data, so a club whose other side plays elsewhere is assessed on the matches we can see, and its count may be low.

The top side of a club with several sides. At least two NCS Qualifying Matches at any level with the club (Reg 3.5.2(b)).

Any lower side. All three of these must hold, where "this side or lower" includes every side below it:

For example, at a club with divisions 1, 2 and 3, a player with two matches in each is eligible for divisions 1 and 2, but not 3. These rules give the same answer as all 20 examples in the regulations' Figure 1, which are part of the report's automated tests.

On track (experimental). Future playoff matches aren't always entered in Rugby Xplorer, so the possible fixtures may be incomplete, and a player shown as ineligible for being short of the minimum might still be able to reach it. Players must be able to reach the two-match minimum by the start of the National Championship Series (Reg 3.5.1(a)), so a player passes if enough possible matches remain. Possible matches are unplayed fixtures with a date in competitions that count, so Super Regionals are left out by competition name rather than by a cut-off date. These players appear as "on track" rather than "eligible", and their player page lists the possible fixtures behind that. This means they could still qualify, not that they will: remaining fixtures aren't checked against availability, and they include future playoff dates the side may not reach. Remaining fixtures never affect the four-match limit or the comparison with upper sides.

Caution (experimental). A player who is eligible for a lower side appears as "caution" when one more match for an upper side would end that eligibility for the rest of the season. That means either three matches for any one upper side, because a fourth forfeits the side (Reg 3.5(d)(i)), or being level with the upper sides' total with no fixtures left at or below this side to catch up (Reg 3.5(d)(ii)). A match missing from the record could change this, so check the official Rugby Xplorer record.

Interpretations to review:

Not checked: the rules marked as not checked in the summary above, such as registration and transfers, aren't in Rugby Xplorer's match records, so check them separately.

How we get data from Rugby Xplorer

Everything entered in Rugby Xplorer is stored in its content management system (CMS). The CMS has a GraphQL API at https://rugby-au-cms.graphcdn.app. GraphQL is a way for software to send one request naming exactly the data and fields it wants, and get just those back as structured data.

The API is publicly accessible, with no login or key. We read the same data entered for Rugby Xplorer rather than retyping it, and we don't copy anything from the xplorer.rugby website. We know of no published documentation for the API, so it could change without notice.

The API can't return a player's history. We've found no way to ask it for one player's matches or statistics, or for a club's players and their appearances. It can only return fixture lists and the details of one match at a time. So every player's data is worked out by us:

  1. We load the full list of fixtures.
  2. We load the lineup, substitutes and timeline of every played match. Each match is its own query, though one request can carry up to 100 of them.
  3. We go through those matches and calculate each player's participation and statistics.

This is why the report keeps a saved copy and updates it nightly, instead of looking a player up when you open a page. It also means our totals are calculated from the match records, not read from a total held by Rugby Xplorer, which is why each round links back to its match report.

What we request:

The API allows each address about 500 requests, refilling at about 4 a second, and reports what's left with every answer. We ask for up to 100 matches in one request, slow down when the allowance runs low, and wait when the API asks us to. We keep every match we've loaded, so a season before the current one is downloaded once and then kept as it is.

An example. This request asks for a union's results, naming the fields we want:

query Fixtures($entityId: Int, $entityType: String,
               $type: String, $skip: Int, $limit: Int) {
  getEntityFixturesAndResults(
    entityId: $entityId, entityType: $entityType,
    type: $type, skip: $skip, limit: $limit
  ) {
    id
    compName
    dateTime
    status
    homeTeam { name score }
    awayTeam { name score }
  }
}

It's sent with these values:

{ "entityId": 90067, "entityType": "geographical-union",
  "type": "results", "skip": 0, "limit": 100 }

One match from the answer:

{
  "id": "8538928ce44d39c2e",
  "compName": "Capital Men D3",
  "dateTime": "2026-10-31T19:00:00Z",
  "status": "Result",
  "homeTeam": { "name": "Washington Irish MD3", "score": "19" },
  "awayTeam": { "name": "NOVA MD3", "score": "22" }
}

The id is the same one Rugby Xplorer uses in its address, which is how each round in the report links to its match report: this match on Rugby Xplorer.

The API only answers software, so opening its address in a browser won't show the data. You can read our saved copy of the results instead, in this season's participation file.

The data used

How a substitute is counted. Lineups list substitutes whether or not they played, so a substitute counts only if a substitution event in the match timeline names them coming on. A different spelling is accepted only when the surname matches exactly one listed substitute. Coaches listed on a team sheet aren't counted.

Players with the same name. Each CMS player id is treated as one player, because a shared name doesn't prove two records are one person. Where two players at a club share a name, the report lists them in a note with each one's CMS id, and shows the id beside the name. If they are the same person with two Rugby Xplorer profiles, their matches stay split until the profiles are merged there, so each count may be low.

Hidden profiles. The CMS shows a player whose profile isn't public as "Name Withheld". Profiles should be public for qualifying matches and must be for playoffs and the National Championship Series (Reg 3.2(i), 3.4.1(i), 3.4.2(d)), although a player can hold an approved Name Withheld exemption. We can't tell who a hidden profile belongs to, so it appears in red in match lineups, has no player record, and isn't included in the report. If the profile is made public, the next nightly run picks up its matches. A player with an exemption won't appear in the report, so their club needs to check them separately.

Known gaps. The report flags two problems beside the verdicts, because either can make a count too low:

A correction in Rugby Xplorer clears these gaps. They don't catch everything, so a count can be low with no flag:

How the data stays current

Every night (06:00 UTC). An automated job re-reads the current season and republishes the site:

  1. It collects the current season's fixture lists.
  2. It re-reads every match with a score this season, including earlier ones, so corrections made in Rugby Xplorer are picked up by the next run.
  3. It rebuilds each player's participation and the list of gaps.
  4. It saves the result with the site.

Results before the current season are locked. A season gets a last read as the next one begins, and is then kept as saved, so a later change to it in Rugby Xplorer doesn't appear here. The only exception is a change to how we store the data, which reads every season again. Past seasons don't affect the current verdicts.

Each update is all or nothing. If any request for a match fails, the previous night's data stays in place, because a partial count could wrongly pass or fail a player. If the CMS answers but holds no details for a match, that isn't a failure, and the match shows as "No lineup recorded".

When you check for newer matches. The nightly data can miss matches played since it ran, so the report has a "Check for newer matches" button that goes back for incomplete matches:

  1. It finds the selected club's fixtures that have kicked off but had no result in the nightly data.
  2. It requests only those matches from the CMS. If there are none, it makes no requests. If the nightly data has nothing for one of the club's sides, it requests that club's whole season instead.
  3. It adds a match to the count only if it now has a score, because a lineup can be posted before kickoff.
  4. A match that still has no result stays marked "No result yet", and is checked again the next time you check.

If any of those requests fail, the report uses the nightly data and says so. The report shows which data it used, and when. A match picked up this way counts straight away, but its score in the round list appears after the next nightly run.

What this doesn't catch until the next nightly run:

The verdict on a player's page uses the nightly data only, so it can be up to a day behind a report that has checked for newer matches.

The CSV report

The report can also read a Rugby Xplorer Match Participation Report for any club, including clubs outside our fixture lists. It works out the club and its sides from the Team Name column, and applies the same rules. That report is the union's official count and carries USA IDs and registration dates, so its totals are taken as given, using Played + Substitute. Its rounds aren't linked to match reports.