raceScore is a free, easy to use, "Google Sheets Extension" that scores a series of sailboat races using the High Point Average or Cox-Sprague Scoring Methods. Averaging a boat's finishes over a series allows competitors to miss races without being penalized. High Point and Cox-Sprague average scoring systems reward top finishes in larger fleets over top finishes in smaller fleets.

To try raceScore, open a blank Google Spreadsheet, get the raceScore Extension from the Google Marketplace, enter finish data into Sheet1, and run raceScore. A few seconds later, a “Results” sheet will be added to your spreadsheet containing all the scoring detail. More information including sample input data are provided below.

What's NEW

Race Number no longer required - this update applies to anyone using raceScore before August 2022 race number (e.g. the 1, 2, 3 etc. in Column B) can easily be deducted, so it is no longer needed. Actually it's now invalid to include race number among the finishes on Sheet1. If race number is present, raceScore will now think you entered a sail number in column B and will score it along with the other finishes. So, if you see race numbers being listed as competitors then delete column B (containing race numbers) and re-run raceScore. raceScore will intuitively assume the first set of finishes for any date is the first race of the day and sequentially increase race numbers for subsequent races entered for the same date (8/2/2022)

Boat numbers no longer have to be numeric - if your fleet uses country codes or other text characters to identify a boat's finish in a race, then this improvement will be appreciated. In our local fleet, where members borrow different club boats, we use the skippers name instead of the boat number (7/14/2022)

Participation Credits - if your fleet wants to give competitors that serve on Race Committee, or maybe attend a travel event, credit in the scoring, as if she sailed, use Participation Credits. They add to the count of a competitors "number of races sailed" for purposes of qualifying and throwout calculations. So, if a competitor has sailed in ten races, for example, and receives 2 participation credits, if will appear that the competitor sailed in 12 races for qualifying purposes. It could make the difference between a boat qualifying, or not, in a 22 race series with 50% qualification (7/11/2022)

Getting Started

Installing raceScore

To install the raceScore Google extension open a blank Google Spreadsheet and click on the Extensions menu item. From there click on "Add-ons" and then "Get add-ons". Search for "raceScore" and complete the installation steps. You will be asked to Authorize raceScore's use of Google services on your behalf. raceScore does not keep any data that you enter and never requires any personal information.

Entering Finishes

In raceScore, race finishes are input horizontally across Sheet1 of your spreadsheet. raceScore recognizes that a row contains race finishes when there is a date (any valid spreadsheet date between January 2020 and December 2039) in Column A. When raceScore receives a valid date in Column A, it assumes successive columns are boat identifiers (bow number, sail number, boat name, etc.), in finish order.

In the example shown, in the first race recorded for June 4th, boat number 626 won, followed by 724 and 602… 566 finished in 6th.

In the 2nd race of the day, 626 won again followed by 547. 602 didn’t finish so is scored DNF.

Scoring adjustments of DNF, OCS, and DSQ, unless thrown out, result in zero being averaged into the overall score. Other scoring adjustments (e.g. DNS) are ignored for scoring purposes.

When the value in Column A for a row is left blank, raceScore assumes the previously entered date is carried over. So, for example, the implied entry on spreadsheet line 7 is:

Jun-11 644 602 789 547 626

Even though Jun-11 isn't specified on line 7, its carried over from line 6.

Lines that don’t have a date in Column A (between 1/1/2020 and 1/1/2040) are skipped. So, don’t hesitate to insert blank lines or add comments to document the day's racing. Line 1, in the example, is a comment and was added to help show what values go into each column. Since the value on line 1 in column A ("Race Date") isn't a valid date, the entire line is ignored by raceScore.

Overriding Defaults

Unless otherwise specified, default values are used for scoring calculations. To override defaults enter values starting on line1 of Sheet1 (the sheet containing finishes).

  • The title printed at the top of the Results sheet is, by default, the Spreadsheet name. However, this name can be overridden using the "series" parameter.

  • boats need to sail in 50% of the races to qualify - to override, use the "qualification" parameter.

  • upon qualifying each boat’s lowest finish score will be discarded from their series average - to override use the "throwouts" parameter. For example, if the throwouts parameter is set to 4, qualifying boats will get 1 throwout upon qualifying plus one additional throwout for every 4 races sailed after qualifying. To specify no throw outs set the throwouts parameter to 0.

  • the High Point Average scoring method is used by default. The other option tells raceScore to use scores from the Cox-Sprague table to calculate race results. Cox-Sprague can be used to score races with up to 20 finishers.

Defaults can be overridden by specifying any or all of these parameters on the finishes sheet (Sheet1) starting on line 1, as follows:

  • series: <series name>

  • qualification %: <xx>

  • throwouts: <y>

  • scoring method: Cox-Sprague


  • <series name> is the text that will be displayed at the top of the results

  • <xx> is a number set to the percentage of races a boat must sail to qualify for the series

  • <y> is the number of throwouts that can be awarded:

  • 0 - none,

  • 1 - discard a boat's lowest score upon qualifying (the default),

  • > 1 - the number of races needed to sail, after qualifying, to receive an additional throw out

Finish positions can be adjusted. Use common acronyms: DNF, DNS, OCS, DSQ, DNC. Just follow the boat number by a "-" and the scoring adjustment. Then re-run the script to generate new results reflecting the adjustment.

Other finish adjustments, e.g. -DNS or -DNC, are ignored in scoring. Boats that weren’t in the starting area, for example, don’t count for qualifying and it is not used in determining the number of participants in a race.

If your fleet awards participation credits for races missed, simply follow the boat number with a "-PAR" for the races in which credits are awarded. Participation credits are often used when a boat misses a race, for example, because the crew is running the races or participating in an outside event. Participation credits increase the number of races that a boat participates in for qualification purposes and for calculation of throw outs.

While any valid date can be entered, simply typing a month abbreviation (e.g. Jul, Aug, Sep, etc.) and day (e.g. Aug-4) will suffice (year defaults to the current year).


When the raceScore Extension runs a "Results" sheet is added (or replaced) in your spreadsheet.

Overall finish position in the series is followed by scoring details including qualifying specifics, the scoring method used, how ties (if present) are resolved, throwout calculations, and individual race finish positions.

Tips and Help

  • Here's a link to some sample raceScore input that you can copy and paste into your own Google Sheet where you have installed raceScore. Paste the sample data into your spreadsheet's Sheet1 and click on the raceScore app (under Extensions). In the sample, the Google Sheet (sometimes called a "Tab") named Sheet1 contains the finish input data used to generate the Google Sheet named Results. Other Google Sheets in the sample contain examples of the different scoring parameters which can be used to override default values. Just copy the example data into your spreadsheet's Sheet1 before running raceScore.

  • Occasionally sailScore may return duplicate results or fail to return a Results sheet. With any unexpected behavior try:

    1. Deleting the Results sheet (if it exists),

    2. Refresh (click: "Reload this page") Sheet1 (which contains the finishes you want to score),

    3. wait 10 seconds, or so, for the raceScore app to reappear under Extensions and,

    4. try running again.

  • Override parameters have a very specific syntax. Here are examples of parameter declarations that can be copied and pasted into your Sheet1 page - just modify the text to the right of the colon to meet your needs. The only option for "scoring method:" is Cox-Sprague. If this parameter is not present (or commented out e.g. "###scoring method: Cox-Sprague") the default High Point scoring method is used.

      • series: my series

      • qualification %: 50

      • throwouts: 0

      • scoring method: Cox-Sprague

  • If you are still having trouble or if you have any questions please send an email to: help@racescore.org

Terms of Service

raceScore is free to use. Although we strive for perfection, the use of raceScore is offered without any warranties implied or otherwise. Please report problems to help@racescore.org

Privacy Policy

raceScore uses the dates, race numbers, and boat or sail numbers that you enter onto Sheet1 of the Google spreadsheet that you installed raceScore on. This data is used to compute the overall positions of participants in the series being scored. raceScore will not change the finish data you enter. The Results sheet inserted into your spreadsheet is generated by raceScore based on the finish data that you entered. No user data is stored or shared by this app.

raceScore results are computed in the Google Cloud. raceScore's use and transfer of race finish data that was received from Google APIs will adhere to the Google API Services User Data Policy, including the Limited Use requirements.


Send inquires to help@racescore.org

Developer: Lee Morrison, lm06820@gmail.com