AI in Sports Business: Team Kit Orders With Sizes, Names and Numbers

Coding Liquids tutorial cover featuring Sagnik Bhattacharya for AI in Sports Business: Team Kit Orders With Sizes, Names and Numbers.
Coding Liquids tutorial cover featuring Sagnik Bhattacharya for AI in Sports Business: Team Kit Orders With Sizes, Names and Numbers.

Collect every player's size, printed surname and shirt number in one validated online form, catch clashing numbers and odd sizes with sheet formulas and a short AI check, then have AI turn the clean rows into the supplier's order sheet and the parent reminders. A person signs off the final list before anything is ordered.

Most writing on AI in sports business is about leagues and analytics; the money in a local shop is in getting thirty families' details right the first time. Kit orders fail in three places: a duplicate number found after printing, a size that cannot be exchanged once a name is on the back, and a parent who has not paid by the cut-off. Everything below is built to catch those three early. The checking is done by form rules and spreadsheet formulas; AI writes, reconciles and explains.

Follow me on Instagram@sagnikteaches

Last season's order, and what it cost

Picture a two-person sports shop and a junior basketball club with three squads (Under-12, Under-14 and Under-16) of ten players each. Last season the coach collected details in a group chat and typed them into a spreadsheet, the shop re-typed them for the supplier, and nobody saw the list as a whole until the kit arrived. Illustrative costs, with a printed game shirt at $36 (once a name is printed, the shirt cannot be sold on to anyone else):

Connect on LinkedInSagnik Bhattacharya
What went wrongHow manyCost
Two players in one squad given the same number, found at the first game1 shirt reprinted$36
Wrong size chosen, unfixable after printing3 shirts$108
Surname misspelt in the group chat and printed as typed2 shirts$72
Families still unpaid at the cut-off5 of 30The shop funded $270 of the supplier invoice for three weeks
Chasing, re-typing and checkingAbout 11 hoursUnbilled

Direct losses were $216, plus the float and the hours. The rest of this tutorial rebuilds the process so each of those lines has a check in front of it.

Subscribe on YouTube@sagnikteaches

The order form, field by field

A form beats a group chat for one reason: it can refuse bad answers before they reach your sheet. Google Forms offers response validation on short-answer questions, with a number rule such as "between", a text rule for email format, a length limit, and a regular-expression rule (Contains, Doesn't contain, Matches, Doesn't Match), each with custom error text for the parent. Microsoft's forms tools have equivalents, but I have only checked the Google pages. Here is the form for the 30-player order:

QuestionSettingWhat it prevents
SquadDropdown: Under-12, Under-14, Under-16Lets the duplicate check run per squad and stands in for age
Player's first nameShort answer, requiredKit handed to the wrong child
Surname as printed on the backLength: maximum 12 characters (use the supplier's limit); Regular expression: Doesn't contain digitsOverlong names and typed numbers
Shirt number, first choiceNumber: between 0 and 99 (use the range the league allows)"100", "ten", or a number the supplier cannot print
Shirt number, second choiceSame ruleA dead end when the first is taken
Game shirt size and shorts sizeDropdowns: Youth S, M, L, Adult S, M, L, XLFree-text sizes such as "medium-ish"
Optional shooting shirtDropdown: none or a sizeExtras appearing by email later
Parent or guardian emailText: email formatReminders bouncing
AcknowledgementCheckbox, required: printed names and numbers cannot be exchanged after the cut-offDisputes about exchanges

Two settings finish the job. In a published form, switch off "Accepting responses" or use "Set close date or response limit" to close at an exact date and time, so the cut-off is real. And under Responses, "Get email notifications for new responses" tells the shop each time a family completes the form. The Sheets link on the Responses page gives you the spreadsheet the rest of this tutorial uses. If you build sizing forms for other products, the tutorial on sizing forms, bookings and returns for a rental shop covers a similar age-and-size problem.

Ask only for what the order needs. No dates of birth, no phone numbers, no photos. These are children's details, so data-protection law may apply, and the simplest compliance is not to hold what you do not use. Delete the sheet once the kit is collected, keeping only what you will need to reorder.

What AI drafted for the form, and what had to change

An assistant is quick at the first draft of the form, provided you hand it the supplier's rules rather than letting it guess.

You are helping a small sports shop build an online order form for a junior basketball club's kit.
Squads: Under-12, Under-14, Under-16. Items: game shirt with printed surname and number, shorts,
optional shooting shirt (no print). Supplier rules: surname up to 12 characters, capitals, no digits;
numbers 0 to 99; sizes Youth S, M, L and Adult S, M, L, XL.
Draft the form: each question, the answer type, the validation rule in plain words, and one line of
help text for parents. Add an acknowledgement that printed kit cannot be exchanged.
Ask for nothing that is not needed to place the order.

An illustrative first draft needed three repairs. It made shirt size a free-text answer, which brings back "medium-ish"; a dropdown fixes it. Its help text under the size question said "we will happily exchange if it doesn't fit", contradicting the acknowledgement two questions later; the shop's rule wins and the line goes. And it asked for a phone number "in case we need to reach you", which the order does not need and the email already covers. The draft also omitted the squad question, which would have made a per-squad duplicate check impossible. Read an AI-drafted form as a checklist of what to add and remove, not a finished form.

Week by week: from first message to supplier

The timetable below assumes the club has agreed the design and the shop has the supplier's price list. Supplier lead times come from the supplier in writing, so the weeks after the order are placeholders.

WhenWhat happensResponses in
Day 1Form built from the AI draft in about 45 minutes; link sent to families through the club's own channels, close date set for day 1411 of 30
Day 4Roster sheet shows who has not answered18
Day 7First reminder to the 12 still missing24 by day 9
Day 10Second reminder to the 6 still missing28 by day 12
Day 13Final reminder, plus phone calls to the last 230 on day 14
Day 15Duplicate check, size check, name check, confirmation emails30 clean
Day 16Supplier sheet built, reconciled and sentOrder placed
Weeks 3 to 5Production; one progress message to parents once the supplier confirms a datePlaceholder
Week 6Kit arrives; shop checks every shirt against the sheet before telling anyoneCollection

The "who has not answered" list is a roster sheet with the club's 30 players and the family email, plus one formula, for example =IF(COUNTIF(Responses!D:D,A2)>0,"yes","no"), matching the surname in the roster against the surname column in the responses tab. Filter on "no" and you have the reminder list. It is arithmetic, not AI, and it cannot be wrong in the way a chatbot count can.

The duplicate-number check: formula first, AI second

Add a final-number column (starting as a copy of first choice) and a flag column. With the squad in column B and the final number in column G, the flag is =IF(COUNTIFS($B$2:$B$31,B2,$G$2:$G$31,G2)>1,"DUPLICATE",""), which counts rows sharing both squad and number. Colour any flagged cell with a conditional-formatting rule and the clashes jump out. Decide with the club whether numbers need to be unique per squad, as the formula above assumes, or across the whole order; players sometimes move up a squad mid-season, and a club with that habit wants the stricter rule.

In the illustrative order, the flag finds four clashes among 30 players:

ClashWho got itSecond player's second choiceOutcome
Number 10, Under-14Row 6 (submitted day 1)11, freeRow 21 gets 11 automatically
Number 7, Under-12Row 9 (day 1)7 again, typed twiceMessage to the parent for a new choice
Number 5, Under-16Row 12 (day 2)15, already taken by row 3Message with three free numbers offered
Number 9, Under-12Row 4 (day 1)19, freeRow 25 gets 19 automatically

The rule is first form first served, with the second choice as the fallback, and it is written on the form so no parent is surprised. Two clashes resolve themselves; the other two need a short message, which is a good AI job as long as the facts come from your sheet.

Write a short, friendly message to the parent of a junior basketball player. Their first-choice
number [first choice] was already taken in the same squad by an earlier form. [Their second choice
was also unavailable / Their second choice was the same number]. Free numbers in this squad: [list].
Ask them to reply with one choice by [deadline]. Do not promise any number. No exclamation marks.
Use the merge fields [parent first name] and [player first name] exactly.

A usable result: "Hello [parent first name], thanks for sending [player first name]'s details. The number you chose is already taken in the same squad. The free numbers are [list]. Please reply with the one you prefer by [deadline] and we will add it to the order." The fix, when the assistant produces something warmer, is to cut any line that implies a number is being held ("we've kept 8 for you").

Then use AI as a cross-check, never as the check. Paste the squad and number columns only, with no names, and ask for any repeated number within a squad, with row numbers. In an illustrative run the assistant reported two clashes where the formula had flagged four, missing a pair in the middle of the list. Models drop items from long lists without saying so. When the formula and the assistant disagree, trust the formula and find out why.

Catching wrong sizes before the name goes on

Wrong sizes cost most, because they can neither be exchanged nor resold. The form cannot know that an Under-12 player who picked Adult XL made a slip, but a rule can. Write the shop's own guide for which sizes are normal in each squad, based on the supplier's chart, then ask the assistant to flag exceptions only.

Shop's size guide by squad: Under-12: Youth S to Youth L. Under-14: Youth M to Adult S.
Under-16: Youth L to Adult XL. Below are squad and chosen size for each row.
List only the rows where the chosen size is outside the guide for that squad, with the row number.
Do not suggest a size and do not change any row.

Say it flags three rows: row 8 (Under-12, Adult M), row 19 (Under-16, Youth S) and row 26 (Under-14, Adult XL). The shop emails each family a neutral question: "[player first name] has chosen [size]. That is outside the usual range for the squad, so please confirm it, or tell us a different size, by [deadline]. Printed kit cannot be exchanged." Row 8's parent replied that the player is tall and the size stands. Row 19 was a slip for Adult S and was changed. Row 26 was confirmed. One wrong size avoided, two correctly kept, and no one told what size their child "should" be; the assistant only found the rows worth a second look.

Finish with the size-run summary, which doubles as a sanity check because every item's counts must total 30. Build it with COUNTIF on each size, not by asking a chatbot to count:

SizeGame shirtsShorts
Youth S22
Youth M55
Youth L89
Adult S76
Adult M55
Adult L22
Adult XL11
Total3030

If a column totals 29 or 31, a row is missing or doubled and you have found it at the cheapest possible moment. The tutorial on size runs and reorders for a boutique uses the same totals-must-match habit for stock rather than orders.

The supplier order sheet, built and reconciled

Suppliers want their own layout: usually one line per personalised shirt with name, number and size, plus a quantity-by-size list for plain items. Paste the supplier's column headings and two sample lines, then the cleaned rows (surname as printed, number, size, squad; nothing else).

Reformat the rows below into the supplier's order layout, using exactly the column headings I
pasted. Surnames in capitals, spaces and hyphens kept as typed. One line per game shirt.
Then add a reconciliation: number of shirts, shirts by size, shorts by size, shooting shirts by size,
and any squad where a number appears twice. Do not alter any value. If a surname is longer than
12 characters including spaces and hyphens, list it under QUERIES instead of shortening it.

SUPPLIER HEADINGS AND SAMPLE LINES: [paste]
ROWS: [paste]

An illustrative sample of the output, before checking:

ItemPrint nameNumberSizeSquad
Game shirtOKAFOR10Youth LUnder-14
Game shirtSMITH JONES23Adult SUnder-16
Game shirtPETROVIC7Youth MUnder-12
Game shirtLINDQVIST11Youth LUnder-14

The second row shows the typical slip: the form said SMITH-JONES and the assistant returned SMITH JONES, quietly turning a hyphen into a space despite the instruction. Whether the supplier prints a hyphen, an apostrophe or an accented letter is a question for the supplier, so ask before sending and keep the supplier's answer next to the sheet. Check the reconciliation against your own COUNTIF table, line for line; if the AI's totals differ from yours, yours are right until proven otherwise. Then a person reads all 30 print lines against the form responses once, aloud if possible, before the sheet leaves the shop. For wider purchasing routines with suppliers, the tutorial on purchase orders and supplier emails goes further.

Parent reminders: three messages and a payment chase

Parents respond to a deadline stated once, plainly, and repeated at short intervals. Three reminders before the cut-off (a week out, four days out, the day before) and one after the order is placed cover the ground. Ask the assistant for all four at once, with the facts supplied by you:

Write four short messages from a sports shop to parents about a club kit order.
Facts: form closes [date and time]; link [link]; kit is [price] per player, [shooting shirt price] for
the optional shooting shirt; names and numbers cannot be changed or exchanged after the close; pay at
the shop or [payment method]; phone [phone].
Messages: (1) a week before the close, (2) four days before, (3) the day before, to families who
have not answered, (4) after the order is placed, to families who have not paid.
Each under 60 words. No exclamation marks, no guilt, no new offers or discounts.
Merge fields exactly: [parent first name], [player first name], [amount due].

Illustrative message 3, the day before: "Hello [parent first name], the kit order for [player first name]'s squad closes tomorrow at [date and time]. We have not yet received a form, so [player first name] cannot be included once it closes. Link: [link]. Questions: [phone]." The failure to watch for is invented urgency or flexibility. Assistants like to add "we can probably squeeze late orders in", which the supplier may not allow, so compare each draft to your facts line by line. The tutorial on payment reminders that sound human has tone options if some families need a second nudge, and the one on planning a dance recital with costumes and parent emails shows how a similar costume-order rhythm works in a studio.

To send each family a personalised copy, Gmail's mail merge takes the recipients from a sheet ("Add from a spreadsheet"), and tags such as @firstname match the sheet's column headings. Google's help page lists it for eligible Workspace plans (Workspace Individual, Business Standard, Business Plus and certain Enterprise and Education plans), so a shop on a free Google account or Business Starter will not have it. For 30 families, blind copy to the "no" or "unpaid" list does the job. It is also worth sending each parent a print proof, a one-line message showing the name, number and size as they will be printed with a request to reply only if wrong, which is the cheapest catch for a misspelt surname. With mail merge that is one send; without it, paste five or six lines by hand for the flagged players only.

Keep personal details out of the assistant. Reminder prompts need no names or emails, and the merge step puts them in at the moment of sending. On consumer plans, switch off the setting that lets chats train models; the tutorial on keeping customer data private when your team uses AI sets out the habits in more detail.

Late joiners, siblings and other rows the formulas miss

Some problems only appear once real families fill in the form. Settle each one with the club before the link goes out, and add the answer to the facts you give the assistant, so no reminder or confirmation draft has to improvise a policy:

  • Siblings in one squad. Two players with the same surname print identical backs. A common fix is a first initial before the surname, but the initial, full stop and space add three characters, so a 10-character surname becomes 13 and breaks a 12-character print limit. Put =LEN(E2) beside the print-name column (here, column E) and filter for anything over 12 before the supplier finds it.
  • Two forms for one player. A parent and a grandparent both fill it in, choosing different numbers, so the duplicate-number flag stays quiet. Add a second COUNTIFS flag on squad, first name and surname together, then ask the family which form is right before deleting either.
  • Numbers the club keeps back. Some clubs retire a number or save one for the coach. Leave those out of the allowed range or list them in the form's help text, rather than hoping the duplicate check catches them later.
  • A player who joins after the order is placed. Ask the supplier, in writing, for its minimum reorder quantity and any set-up charge for a single printed shirt, and give the late family the price and lead time before taking payment. Keep the cleaned sheet: a one-shirt reorder is then a copy of one line, not a new form.
  • A size change before the cut-off. Ask for changes by reply email (or let parents edit their own response, if your form settings allow it) and log each change on the sheet with its date, so the supplier sheet is built from the final answer rather than the first.

An illustrative case of the first row: two brothers in the Under-14s, one choosing 4 and one 14, both with a 10-letter surname. Both forms pass validation and the duplicate check, and only the LEN column shows that "J. " plus the surname will not fit. The shop agreed with the club to print surnames in full on both shirts and rely on the different numbers, and told both families before the order went in.

The finished order in numbers

The order: 30 game shirts with print and 30 pairs of shorts at $54 per player, and 11 optional shooting shirts at $24. That is 30 x $54 = $1,620, plus 11 x $24 = $264, a supplier invoice of $1,884 on these illustrative prices. By the cut-off, 29 of the 30 families had paid; the last paid on collection. Compare the old and new way:

TaskLast seasonThis season
Collecting and typing up details3 hours0.5 hours
Checking numbers and sizes1.5 hours0.75 hours
Building the supplier sheet1.5 hours0.75 hours
Chasing parents for forms and payment3 hours1.25 hours
Fixing mistakes after printing2 hours0.25 hours
Total11 hours3.5 hours

Direct losses fell from $216 to $0 on printed shirts, and unpaid families at the cut-off from five to one. The residual mistake in week 6 was the supplier's: one shirt printed 8 instead of 6. It was caught because the shop checked the delivery against the sheet before telling parents it had arrived, and the supplier reprinted it at their cost. That final check is the habit worth copying: a person with the sheet in one hand and the shirts in the other, counting aloud, before anyone is told the kit is ready.

The tools cost almost nothing: Forms and Sheets with a free Google account, and an assistant on a free plan or the roughly $20 a month that ChatGPT Plus or Claude Pro list at. If you want mail merge for personalised proofs, Business Standard lists at about $14 a user a month on an annual plan, which you should confirm on Google's pricing page. Run the same process for next season's order and the form, formulas and prompts above only need their dates and prices changed.

Questions a shop asks before its first club kit order

Should the AI see the players' names and emails?

It rarely needs to. Sizes, squads and numbers are enough for the duplicate and size checks, and the surname as printed is enough for the supplier sheet. Keep first names, ages, email addresses and phone numbers in the form and sheet, and use mail merge to add them back when messages go out.

What if two players in one squad want the same number?

Give the number to whoever submitted the form first, assign the second player their second choice if it is free, and message the parent only if it is not. Decide with the club whether numbers must be unique per squad or across the whole order, because players sometimes move between squads.

Can parents change a size after the cut-off?

Decide that before the form opens and state it on the form. Printed names and numbers usually make exchanges impossible, so most shops freeze details at the cut-off and handle genuine mistakes as one-off exceptions, with the parent aware of the cost.

Do I need a paid Google plan for any of this?

Forms and Sheets work with a free Google account. Gmail's built-in mail merge, which sends each parent a personalised copy, is limited to eligible Workspace plans such as Business Standard. Without it, send reminders to the unpaid or missing families by blind copy.

Further reads

Sources: Google Docs Editors Help pages on Google Forms response validation and managing responses, and Google's help page on Gmail mail merge, all read in October 2026.

Want your next club order to run itself properly?

On a 1:1 call we'll look at how club orders reach you today, set up the form-to-supplier steps worth automating, and decide which checks stay with a person.

Book a 1:1 call with me