A planning worksheet for season rosters. This six-column worksheet is not an import file — it exists to help you plan offline, then feed names and emails into the real workflows once you are ready. Racey does have a roster CSV importer, but it takes a different, two-column format — see The roster importer is a different file below.
If you came here expecting to upload this sheet, the short answer is: this file is not an import format. Drivers register themselves through the league sign-up flow, and admins handle bulk additions through the bulk-invite-by-email dialog or the two-column roster importer. This worksheet plugs into all three.
What the worksheet is
A six-column CSV you can open in Excel, Google Sheets, Numbers, or any text editor.
/templates/roster-worksheet.csv— empty header row./templates/roster-worksheet-sample.csv— header row plus ten plausible rows, including a multiclass field with a waitlist entry and an invite-pending row.
The columns are the ones admins typically need when planning a season:
| Column | Purpose |
|---|---|
Display Name | Name to appear in standings, results, and roster lists. Match what the driver will use on Racey. |
Email | Address to send the invite to. The only column that feeds directly into the real workflow (see below). |
Discord Username | For race-day comms and Discord-link verification. Stored on driver profiles, not used in the import. |
Car Number | Planning aid. Drivers pick their own number during registration; this is your provisional grid. |
Team | Planning aid. Teams are assigned in season settings, not from this sheet. |
Notes | Free-form notes — class assignment, payment status, returning vs. new, anything you need. Wrap in double quotes if the note contains a comma. |
The worksheet does not import into Racey in this six-column form — no upload field accepts it. It is a spreadsheet that helps you organise, and one of its columns feeds a real workflow directly: Email drives the bulk invite dialog. iRacing Customer ID is not a worksheet column — if you track those separately for your drivers, you can feed them to the roster importer described below.
The roster importer is a different file
Racey does have a roster CSV import. It lives under League → Staff → Import drivers, and it takes a two-column file, not this worksheet:
| Column | Purpose |
|---|---|
iRacing Customer ID | The driver's numeric iRacing customer id. This is the anchor column. |
Name | Display name for the placeholder record. |
Accepted extensions are .csv, .json, and .txt, and you can paste the rows directly instead of uploading a file. Re-importing the same drivers is safe — existing ones are skipped.
What it creates is not a league membership. Each row becomes an external driver placeholder: a scoreable identity that results can be attributed to before the human behind it has a Racey account. When that person signs up and links the same iRacing Customer ID, their results and standings carry over to their real account.
So the two files serve different jobs. Use the roster importer when you already have iRacing customer ids and want results to score immediately. Use the worksheet below when you are still planning who is on the grid.
How rosters actually get built
Rosters in Racey are populated through three paths, all real and already in the product. Two happen entirely through the UI; the third is the one path that involves uploading a file.
Path 1 — Drivers register themselves
The default. Drivers find your league in the public directory or via a shared link, hit the season's registration page, and submit their request. You approve them in the league admin → roster surface.
This is the right path for public leagues, returning drivers from previous seasons, and anyone who can navigate a sign-up flow on their own.
Path 2 — Bulk-invite by email
For closed leagues, invite-only seasons, or pre-populating a roster from your own contact list, use the Bulk Invite Members dialog at League → Staff → Bulk Invite. It accepts one email address per line, applies a single role to all of them (Driver, Steward, Admin, etc.), and sends each address a Racey invite email with a 7-day expiry.
The dialog is a textarea, not a file picker. Paste the emails, pick the role, hit Send Invitations. The server creates pending invites, deduplicates against existing pending invites for the league, and reports back per-address sent / skipped / error counts.
Path 3 — Roster CSV importer
For leagues that already have iRacing customer ids on hand and want results to score before every driver has a Racey account, use the roster importer covered above at League → Staff → Import drivers. It's the one path that takes a file — but it creates external driver placeholders, not league memberships outright. See The roster importer is a different file for how those placeholders link up once the driver signs up.
Worksheet → bulk invite workflow
The worksheet's Email column is designed to copy-paste straight into the bulk-invite dialog. The pattern:
- Plan the season in the worksheet — add display names, mark notes, decide who is in vs. waitlisted.
- When you are ready to send invitations, open the worksheet and copy just the
Emailcolumn. In Google Sheets, click theBcolumn header, thenCmd/Ctrl+C. In Excel, the same. - Open League → Staff → Bulk Invite.
- Paste into the email textarea. Each address lands on its own line, which is exactly what the dialog wants.
- Pick the role (most worksheet rows will be
Driver). - Click Send Invitations.
The other worksheet columns — display name, car number, team, notes — are for your own planning and reference. They are not transmitted in the invite. Drivers fill in their own display name and car number when they accept the invite and complete registration.
Classifying drivers (Pro / Pro-Am / Am / Rookie)
Once drivers are on the roster you can give each one a category: Pro, Pro-Am, Am or Rookie. Anyone you don't classify stays Unclassified.
Set them at League → Roster, in the Category column. The dropdown is per-driver, saves immediately, and covers both kinds of driver:
- Registered drivers — people with a Racey account who joined your league.
- External drivers — the placeholders created by the roster importer or by a results import, before the driver has claimed an account. These show under the External Drivers tab and are classified the same way. Most leagues have more of these than they expect, and rows with no category are flagged Needs category.
Categories are per-league. The same driver can be Pro in your GT3 league and Am in a spec series next door, because you are rating them against that grid.
What categories do — and don't
They do give each tier its own standings table. Your standings page gains a tab per tier, so a Rookie who finishes mid-pack all season can still win the Rookie championship.
They do feed Discord role mapping. /map-role kind:category key:rookie @Rookie tells the bot which Discord role corresponds to that tier. Run /sync-roles to apply the mapping across your linked members — reclassifying a driver in Racey does not move their Discord role on its own, so re-run /sync-roles after a round of changes.
They do not change how points are earned. A Rookie finishing P8 scores exactly what P8 is worth in your scoring system. Categories re-group the same points into per-tier tables; they never recalculate them. This also means penalties and score adjustments flow through automatically — the tier tables always agree with the overall table.
If you want drivers to score against their own group instead of the whole field, you want a car class, not a category. Classes genuinely split the scoring: a GT4 winner earns winner's points even finishing 15th overall. Categories split the view. Many leagues use both — car classes for the machinery, categories for driver skill within it.
When to bother
Skip categories entirely if your grid is homogeneous — they add a decision per driver and buy nothing.
They earn their keep when your field spans a wide skill range and you want the slower half to have something to race for. A Rookie table gives a new driver a championship they can realistically win in their first season, which is usually the difference between them coming back and drifting off.
Tips
- Use the Notes column for state you need to remember. "Pay confirmed", "waitlist — ping if dropouts", "rookie, send onboarding link" — anything that helps you when you come back to the sheet next week.
- Filter the sheet before copying emails. If you have a
Notescolumn entry likewaitlist, filter those rows out before copying the email column so you only invite the confirmed list. - Keep one worksheet per season. When the season ends, archive it. The next season's worksheet usually inherits 70% of the prior list with a few changes.
- Plan car numbers, but expect changes. Drivers can request a different number when they register. The worksheet's
Car Numbercolumn is your starting plan, not a binding assignment. - Don't put real personal data you don't need. This sheet usually lives in your Drive or Dropbox. Email + Discord username + display name are usually enough; phone numbers, real names, addresses are not.
Related
/templates/roster-worksheet.csv— empty template/templates/roster-worksheet-sample.csv— sample data- Driver Guide — what drivers see when they self-register
- League Admin Guide — section on roster approval and the bulk-invite dialog
- Results CSV Guide — sibling doc for the results import (which IS a CSV-driven workflow)
- Glossary —
Driver CategoryandMulticlass, if the class-vs-category distinction is still fuzzy