Sorted by points available. An event you haven't entered is guaranteed points — an event where you're short of the minimum can't place at all yet.
Straight from the scoring form. Nothing is ever overwritten — results that don't make the counting set stay on the record, they just don't add to the team score.
Every event is scored the same way, whether it's a bracket, a footrace or a bowling night. You are ranked against the other companies in your division, and where you finish is what earns points. Those points add up across the whole competition — the company with the most at the end wins its division.
Top eight in an event scores. Finish ninth or later and you still bank the 10 points for taking part.
Complete an event and your team banks 10 points for taking part, whether you place or not. There is no such thing as competing for nothing.
A Main Event doubles everything — the placement points and the 10 for entering. Winning one is 200 + 20 instead of 100 + 10.
Counts is how many results add up to make your team's score in an event.
Say the 5K counts 4 for your division and you send ten runners. Your four fastest times are added together — that total is your team score. The other six are recorded and change nothing. Sending more people can never hurt you.
You do need four finishers to be placed. With three you still bank your 10 points for taking part, you just can't be ranked — otherwise a team adding three times would beat a team adding four every single time.
Five people is a much bigger ask of a 40-person company than a 2,000-person one, so each division has its own number. You only ever need to know your own.
High means a bigger number wins — bowling pins, trivia points, field goals. Low means a smaller one does — 5K and 40 Yard Dash times.
Turnout is the percentage of your company that took part — people who finished, divided by the local headcount you declared at registration, up to 1,000. A 60-person company that brings 30 people beats a 900-person company that brings 40.
Employees only. Family and friends are welcome to walk with you — they just don't count toward your turnout score.
What each event counts, which direction wins, and what's on the table.
This page is a read-only view of a Google Sheet. The form stays exactly where it is — the board just reads what the form writes.
CITIES object. Put the URL in responsesCsvUrl for the city you're setting up.roster block —
"Company name": 500, one line each. These are the declared local headcounts
collected at registration, not how many people registered for events. Fill it in once
when registration closes and leave it alone. Company names must match the form's Company
dropdown exactly.rosterCsvUrl, with columns Company,
Employees and optionally Division. It overrides the
roster block company by company.index.html, put it in a folder on its
own, and drag that folder onto app.netlify.com/drop. That's the deploy — you get a
URL immediately. To update it later, drag the folder again.Columns are detected by their headers, so it works with the current 2026 sheet as-is and with the simpler layout we'd recommend for next year.
| It looks for | Matching a header like | Required |
|---|---|---|
| Company | anything containing "company" | Yes |
| Event | "Select the event." or "Event" | Yes |
| Result | "Result", "Score:", or anything ending "Time" | Yes, except turnout events |
| Name | "Name", or any "… Participant Name" column | No, but needed for roster counts |
| Timestamp | "Timestamp" | No |
TURNOUT_CAP near the top of the scoring section, or set it to Infinity to score on raw headcount.The fix is to publish a second tab that never contains full names, and point this board at that tab instead of the raw responses.
Timestamp, Company, Name, Event, Result.=ARRAYFORMULA(IF(TRIM('Form Responses 1'!C2:C)="","",REGEXREPLACE(REGEXREPLACE(REGEXREPLACE(UPPER('Form Responses 1'!C2:C),"[^A-Z ]"," "),"\s*([A-Z])[A-Z]*","$1."),"\s","")))