Put in your own items
Replace the example items with what you sell, prices in the option text, and add or remove line items to suit your typical order. Swap in your access key and add the form to your site.
Form template · Small Business Order Form Template
Updated · plan facts checked against /pricing
A small business order form takes orders for your products or services and lets you confirm stock, timing and price before the customer pays. This free HTML template has three line items with quantities, a needed-by date, pickup or delivery, and how the customer wants to pay. Each order is emailed to you with a Lead number to quote back.

This template is one of our free HTML form templates. See more form templates by industry. Want customers to pay when they order? Use the order form with Stripe checkout. Need a plain HTML version to copy? See the free HTML order form template.
Overview
Most small businesses start taking orders through Instagram DMs, texts and email, and lose one eventually. This order form gives every order the same shape: line items with quantities, a needed-by date, pickup or delivery, and a payment preference. It is plain HTML that posts to one splitforms endpoint (https://splitforms.com/api/submit) with a hidden access_key, so it works on any site that lets you add custom HTML. Each order is emailed to you on every plan with the customer's email as the reply-to, so confirming an order is one reply.
No server, API route, or SDK — your Small Business 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 Small Business Order Form snippet, swap in your access key, and ship.
Copy and ship
Plain HTML that posts to the /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 order request">
<input type="hidden" name="form_loaded_at" id="form_loaded_at">
<p>We confirm every order by email within one business day. Nothing is charged until we confirm.</p>
<fieldset>
<legend>Your order</legend>
<label>Item 1
<select name="item_1" required>
<option value="">Choose an item</option>
<option>Sourdough loaf ($9)</option>
<option>Box of 6 cookies ($14)</option>
<option>Seasonal pie ($28)</option>
<option>Custom cake (we'll quote)</option>
</select>
</label>
<label>Quantity <input type="number" name="qty_1" min="1" max="99" step="1" value="1" required></label>
<label>Item 2 (optional)
<select name="item_2">
<option value="">None</option>
<option>Sourdough loaf ($9)</option>
<option>Box of 6 cookies ($14)</option>
<option>Seasonal pie ($28)</option>
<option>Custom cake (we'll quote)</option>
</select>
</label>
<label>Quantity <input type="number" name="qty_2" min="1" max="99" step="1"></label>
<label>Item 3 (optional)
<select name="item_3">
<option value="">None</option>
<option>Sourdough loaf ($9)</option>
<option>Box of 6 cookies ($14)</option>
<option>Seasonal pie ($28)</option>
<option>Custom cake (we'll quote)</option>
</select>
</label>
<label>Quantity <input type="number" name="qty_3" min="1" max="99" step="1"></label>
<label>Custom details (writing, colors, size, anything we should know)
<textarea name="custom_details" rows="3"></textarea>
</label>
</fieldset>
<fieldset>
<legend>When and where</legend>
<label>Needed by <input type="date" name="needed_by" required></label>
<label>Time of day
<select name="needed_time">
<option>Morning</option>
<option>Afternoon</option>
<option>Evening</option>
</select>
</label>
<label><input type="radio" name="fulfillment" value="Pickup" required> Pickup</label>
<label><input type="radio" name="fulfillment" value="Delivery"> Delivery (local only)</label>
<label>Delivery address (only for delivery)
<textarea name="delivery_address" rows="2" autocomplete="street-address"></textarea>
</label>
</fieldset>
<fieldset>
<legend>Your details</legend>
<label>Full name <input type="text" name="name" autocomplete="name" required></label>
<label>Email <input type="email" name="email" autocomplete="email" required></label>
<label>Phone <input type="tel" name="phone" autocomplete="tel" required></label>
<label>How would you like to pay?
<select name="payment_preference" required>
<option value="">Choose one</option>
<option>Send me an invoice or payment link</option>
<option>Pay at pickup or delivery</option>
</select>
</label>
</fieldset>
<!-- honeypot: leave empty -->
<input type="checkbox" name="botcheck" style="display:none" tabindex="-1" autocomplete="off">
<button type="submit">Send my order</button>
</form>
<script>
document.getElementById('form_loaded_at').value = Date.now();
</script>Field by field
confirm-first line (top)item_1 to item_3 + qty_1 to qty_3custom_details (textarea)needed_by (date, required) + needed_timefulfillment + delivery_addressphone (required)payment_preference (required)How to add it
To add a Small Business 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.
Replace the example items with what you sell, prices in the option text, and add or remove line items to suit your typical order. Swap in your access key and add the form to your site.
Each order is emailed to you with a Lead number and the customer's email as the reply-to address. Reply to confirm availability, the date and the total, quoting the Lead number.
Send an invoice or payment link to customers who asked for one. Search the dashboard for a date to see what is due that day, or on paid plans send each order to Google Sheets as a row you can sort by needed_by and mark done.
What's included
Bakeries, florists, makers, caterers and print shops usually can't take an order the way a web store does. Stock changes daily, some items need a date that may already be full, and half the orders include a custom request that changes the price. A confirm-first order form fits that: the customer says what they want, how many, by when and how they'd like to pay, and you reply to confirm before money changes hands. The three fixed line items keep orders comparable instead of free-text paragraphs, and the needed-by date lets you line up the week's orders by when they are due (search the dashboard for a date, or sort the column in a spreadsheet), not by when they arrived. Confirm first, then take payment: built for made-to-order and limited stock.

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
Yes. Change the line items to your services (a window clean, a tune-up, a logo package), relabel quantity as hours or units if that fits, and use the custom details box for the job description. Keep the needed-by date: it is just as useful for booking work as for baking.
As many as you like in each dropdown; it is plain HTML. If customers often order more than three different items, copy an item and quantity pair to add a fourth line. Every line you add becomes its own column in the export (paid plans).
On paid plans, turn on the auto-reply and each customer gets an email right after ordering. Its template can include {{ lead_number }}, so they receive the same reference you see. On the Free plan you get the order email and reply to the customer yourself.
A hidden honeypot field and a rule-based content filter run on every plan, with no CAPTCHA for real customers to solve. If a form keeps getting targeted, you can add Google reCAPTCHA v2 or Cloudflare Turnstile, which splitforms verifies on the server.
It is a form customers fill in to request products or services from a small business: what they want, how many, when they need it, pickup or delivery, and how they'll pay. Unlike a web store checkout, you review and confirm each order before taking payment, which suits made-to-order goods and changing stock.
Yes, on paid plans. A Stripe payment form saves a price for each item and quantity, calculates the total on the server and sends the customer to Stripe Checkout after they submit. Use it when prices are fixed and you can always fulfil. For custom or limited items, keep this confirm-first form and send a payment link after you confirm.
Every submission gets a sequential Lead number on every plan. It appears in your notification email and in the dashboard search, so quote it in your confirmation reply and use it as the order reference.
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