Lock the options
Sizes and colors as dropdowns — exactly what the printer offers, nothing else. Free-text size fields are how you end up hand-messaging twelve people about 'medium-ish'.
Form template · T-shirt order
For team shirts, event merch, and fundraiser drops: a form that collects size, color, and quantity per person — the order sheet fills itself.
This template is one of our free HTML form templates. See more form templates by industry.
Overview
A t-shirt order form lives or dies on the size breakdown: before anything hits the press, your printer needs to know exactly how many smalls, mediums, and larges to run — in which color and which design. SplitForms is a form backend, so you paste a plain HTML order form (one hidden access_key input, posting to https://splitforms.com/api/submit) onto any event page, team site, or shop, and every order — size, color, quantity, buyer name — lands in one dashboard you export as a CSV size tally to hand straight to the printer. No store platform, no plugin, no order-intake backend to host — it runs on a static GitHub Pages or Netlify page just as well as a real site.
Every template is free and fully editable in the drag-drop builder — swap fields, colors, and the button label before you publish.
No server, API route, or SDK — your T-Shirt Order Form posts straight to one endpoint.
Every submission is emailed to you and saved to a searchable dashboard — spam filtered before it reaches you.
It's plain HTML you own — paste the T-Shirt Order Form snippet, swap in your access key, and ship.
Copy and ship
HTML by default — the same field set also renders as React, Next.js, PHP, and cURL in your dashboard. Every variant posts to the same /api/submit endpoint. Replace YOUR_ACCESS_KEY with the key from your dashboard; that's the only edit.
<form action="https://splitforms.com/api/submit" method="POST">
<input type="hidden" name="access_key" value="YOUR_ACCESS_KEY">
<input type="hidden" name="subject" value="New t-shirt order">
<label for="name">Name *</label>
<input id="name" type="text" name="name" placeholder="Chris Park" required>
<label for="email">Email *</label>
<input id="email" type="email" name="email" placeholder="[email protected]" required>
<label for="size">Size *</label>
<select id="size" name="size" required>
<option value="">Choose…</option>
<option>XS</option>
<option>S</option>
<option>M</option>
<option>L</option>
<option>XL</option>
<option>2XL</option>
<option>3XL</option>
</select>
<label for="color">Color *</label>
<select id="color" name="color" required>
<option value="">Choose…</option>
<option>Black</option>
<option>White</option>
<option>Navy</option>
<option>Grey</option>
<option>Red</option>
</select>
<label for="quantity">Quantity *</label>
<input id="quantity" type="number" name="quantity" placeholder="1" required>
<label for="notes">Notes</label>
<input id="notes" type="text" name="notes" placeholder="Name on back, pickup day…">
<!-- honeypot — bots fill every field -->
<input type="checkbox" name="botcheck" style="display:none" tabindex="-1" autocomplete="off">
<button type="submit">Send</button>
</form><p class="splitforms-attribution" style="margin-top:12px;font-size:11px;color:#888;text-align:right">
Powered by <a href="https://splitforms.com" style="color:#888;text-decoration:none" target="_blank" rel="sponsored noopener">splitforms</a>
</p>
<!-- drop-off analytics + partial leads (the form works without it) -->
<script src="https://splitforms.com/embed.js" async></script>How to add it
To add a T-Shirt Order Form to your site you need three things: a free splitforms access key, the HTML snippet above, and your key pasted into it. No backend, database, or CAPTCHA library — the form posts to one URL and every submission lands in your inbox and dashboard.
Sizes and colors as dropdowns — exactly what the printer offers, nothing else. Free-text size fields are how you end up hand-messaging twelve people about 'medium-ish'.
Enable payments and set the shirt price — Stripe or Square checkout runs after submission, so the print run is funded before you commit to it.
The CSV export groups cleanly by size and color — most print shops accept it as-is. Close the form (form pause) on order deadline day.
What's included
Every team shirt run starts the same way: a group chat where sizes trickle in for two weeks and somebody's XL still gets missed. A t-shirt order form ends it — each person submits their own size, color, and quantity, the submissions table IS the print-shop order sheet, and the CSV export goes straight to the printer. Add payments and the money is collected before the print run, which is the difference between a fundraiser and a favor.

Where submissions go
Reply-to is wired to the visitor's email, so one tap on Reply answers them directly — while the built-in honeypot and automatic spam scoring filter out bots before they reach you. Every submission is emailed to your inbox and can forward to a webhook or Slack the moment a visitor hits send.

How SplitForms works
splitforms receives the submission, filters spam, saves it to your dashboard and emails you — then, on paid plans, sends it on to your webhooks and integrations. No backend infrastructure to build.

Point your form to your unique SplitForms endpoint. That's it.

We instantly capture and organize every submission in your inbox.

Send data to email, spreadsheets, CRMs, webhooks, and 7,000+ apps.

No credit card required. Set up in under 60 seconds.
Connect & automate
On paid plans, submissions can also go to Slack, Discord, Google Sheets, Notion, Airtable, Zapier or any signed webhook — and splitforms works on the platforms you build on, from WordPress and Shopify to Next.js. With Stripe connected, your forms can take payments too.

Questions
Add a <select> or radio group named "size" (S, M, L, XL, 2XL) to the form's HTML; each order stores the chosen size as its own field. Every submission shows in the dashboard, and the CSV export gives a per-order size column you can pivot into a tally — 12 M, 8 L, 3 XL — before sending the run to the printer.
Yes — file uploads are a paid feature. Add <input type="file" name="artwork">, and each uploaded design is stored and linked next to that order in your dashboard, so custom-print and team-logo orders arrive with the file attached instead of you chasing it over email.
Add fields like "player_name" and "number" alongside size and color, so each person's back print lands on its own row. There's no built-in order-close date, but every submission is timestamped — you can see which orders beat your cutoff, then export the CSV as the printer's roster.
You get a free notification email on every order — that's included on every plan. To send buyers their own confirmation, turn on the auto-responder (paid plans): it replies to the address they entered, confirming their size, color, and quantity, and you can send it from your shop's own address with a custom sending domain.
Simplest pattern: one submission per size — the quantity field covers 'three larges'. For families ordering mixed sizes, submitting twice takes seconds and keeps your print counts exact.
Note the upcharge in the size dropdown labels ('2XL +$3'). With payments enabled, set the base price and collect upcharges at pickup, or run a second form for extended sizes.
Duplicate the form and swap the options, or add an 'item' dropdown. One form per product keeps the printer export clean; one combined form is fine for small drops.
Simple pricing
Free gives you 500 submissions for $0 — no card, no time limit. Pro is $5/month for 5,000 submissions a month, and Annual is $49/year for 15,000 a month with every Pro feature.
For side projects and indie devs.
Every paid feature, for agencies and growing products.
Every Pro feature with triple the volume — $0.27 per 1,000 at full use.
No credit card required on Free • Cancel anytime • Full pricing and FAQ