What a restaurant form actually needs in 2026
Restaurant forms aren't generic contact forms. A host needs to know specific things to call the diner back fast, and a manager needs alerts the moment someone asks about a private event. Most form tools are built for SaaS lead gen and miss the basics. Here's the real must-have list, in priority order:
- Reservation request fields: name, phone, date, time, party size, dietary restrictions, special occasion. Phone matters more than email — restaurants confirm by phone.
- Catering inquiry fields: event date, guest count, menu preferences (vegetarian, halal, allergies), delivery vs pickup, budget range, contact phone.
- Private event booking: event type, requested date, headcount, time window, AV/seating requirements.
- Gift card inquiries: denomination, recipient, digital vs physical, delivery date.
- SMS notification on submit. The single highest-leverage feature. A restaurant that calls back in under 5 minutes converts roughly 3x better than one that calls back the next day. Email is too slow when the manager is on the floor.
- Mobile-first HTML. 85–95% of restaurant traffic is mobile. Tiny tap targets, slow loads, and bad date pickers kill bookings.
- Spam resistance without CAPTCHA. reCAPTCHA destroys mobile completion. Use a honeypot plus AI classification instead — see honeypot vs reCAPTCHA.
If a form tool can't do those seven things cheaply, it's wrong for restaurants. Most can't — they either lock SMS behind a $25+ plan or use widgets that tank page speed. The shortlist below is scored on this exact rubric.
At-a-glance comparison: top 7 picks
| Tool | Free tier | Cheapest paid | SMS-ready webhooks | Mobile-first HTML | Best for |
|---|---|---|---|---|---|
| splitforms | 1,000/mo | $5/mo | Yes (free) | Yes (your HTML) | Independent restaurants, catering ops |
| OpenTable forms | No | $149+/mo + cover fees | Built-in email/SMS confirmations | Yes (widget) | Restaurants already on OpenTable |
| Tock | No | $199+/mo | Built-in | Yes (widget) | Prepaid tasting menus, fine dining |
| Resy direct widget | No | $249+/mo + cover fees | Built-in | Yes (widget) | Urban high-volume restaurants |
| Tally | Unlimited submissions | $29/mo | Webhooks paid only | Embed/widget | Hosted multi-step forms |
| JotForm (restaurant templates) | 100/mo | $34/mo | Add-on | Widget | Templates without coding |
| Typeform | 10/mo | $25/mo | Higher plan | Widget | Brand-heavy conversational forms |
The pattern is obvious: dedicated reservation platforms (OpenTable, Tock, Resy) cost 30–50x more than a form tool because they bundle a full booking engine. If you don't need live inventory and POS sync, you're paying for software you don't use. splitforms wins on cost for the "diner submits, host calls back" workflow — which is exactly how most independent restaurants operate.
1. splitforms — best overall for restaurants
splitforms is a form-to-email backend built for indie operators and small businesses. You write plain HTML, point the form's action at splitforms.com/api/submit, and submissions land in your email and dashboard. For restaurants, three things make it the right pick:
- Free webhooks. Every plan, including the free tier, lets you POST a copy of every submission to any URL. That's how you wire SMS alerts via Twilio: webhook hits a small function, function calls Twilio, manager's phone rings within a second. Tally and JotForm gate webhooks behind paid tiers; OpenTable/Resy don't expose them at all.
- Your HTML, your speed. You write the form. No injected widget JavaScript, no third-party iframe. That means Google indexes the page cleanly and your Core Web Vitals stay green — both matter for restaurant SEO, where "[city] [cuisine]" rankings drive most discovery.
- Cost. 1,000 submissions/month free is enough for most independent restaurants. If you scale up, Pro is $5/month for 5,000, or $59 for 4 years if you want to lock pricing.
What's missing: there's no built-in availability calendar — if you need real-time table inventory, you still need OpenTable or Tock. But for the "submit a request, host confirms" pattern that 80% of restaurants use, splitforms covers it. Grab a free access key and copy the templates below.
Verdict: pick splitforms unless you specifically need live availability or prepaid tickets. It's cheaper than every competitor and the only one that includes SMS-ready webhooks free.
2–7. The other six tools, ranked
2. OpenTable forms
OpenTable is the dominant reservation platform in North America. Their "Connect" widget is purpose-built for restaurants — date pickers know your service hours, party-size limits enforce capacity, confirmation emails and SMS reminders are automatic. The cost: roughly $149/month for the base plan, plus $1 per seated cover from your site (more from OpenTable's marketplace). For a 4,000-cover/month restaurant that's $4,000+/month in fees on top of subscription. Worth it for established restaurants that benefit from the OpenTable diner network; overkill for a 60-seat neighborhood spot that gets 80 reservations a week.
3. Tock
Tock built its reputation on prepaid tasting-menu bookings during the pandemic and is now owned by American Express. The platform handles ticketed events, takeout, and dine-in. Starts around $199/month with a 2% transaction fee on prepaid bookings. Strong for fine dining, omakase, and any concept that wants to collect deposits up front. Weaker than OpenTable for pure walk-up reservation traffic. Like OpenTable, this is software you buy when you need the full booking engine — not when you just need a contact form.
4. Resy direct widget
Resy (also owned by Amex) is OpenTable's biggest competitor in urban markets. Their direct widget embeds a reservation flow on your site without the diner ever leaving. Pricing typically starts in the $249/month range plus cover fees, though Resy is selective about which restaurants they onboard. Great if you're in NYC, LA, Chicago, Miami, or another Resy-dense city; not the right tool elsewhere because the diner network advantage disappears.
5. Tally
Tally is a hosted form builder with a generous free tier — unlimited form submissions, which sounds great until you realize the free plan doesn't include webhooks, custom domains, or removing the Tally branding from the form. Webhooks unlock at $29/month (Tally Pro). For restaurants the dealbreaker is the embed: Tally forms are iframes, which hurt mobile load times and don't inherit your site's styles cleanly. Decent for one-off survey forms; not the right pick for the contact form on your homepage. See splitforms vs Tally for a deeper comparison.
6. JotForm restaurant templates
JotForm has the largest template library of any form tool — there are dozens of restaurant templates (reservations, catering, gift cards, feedback) you can clone in two clicks. The free tier is 100 submissions/month, which most restaurants outgrow in a week. Paid plans start at $34/month for 1,000 submissions, climbing fast as volume grows. SMS notifications are a paid add-on. JotForm makes sense if you want a no-code restaurant form running in 15 minutes and don't mind the cost. JotForm vs splitforms covers the trade-offs.
7. Typeform
Typeform's conversational, one-question-at-a-time style is polished but slow — every field is a separate "page" with an animation between them. For a reservation request that's 6 fields, you make the diner tap 6 times instead of seeing one screen. Conversion on restaurant forms drops noticeably versus a traditional form. Free tier is 10 responses/month (too low to be useful), paid starts at $25/month. Skip unless your brand specifically needs the Typeform aesthetic. Detailed comparison here.
The recommended setup for a restaurant in 2026
If you're starting from zero, this is the setup I'd build today. Total cost: $0–$10/month depending on SMS volume.
- splitforms account. Sign up at splitforms.com/login, copy the access key. Free tier covers 1,000 submissions/month, plenty for most restaurants.
- Three forms, three access keys: reservation request (homepage + contact page), catering inquiry (catering page), private events (private-events page). Separate keys mean separate dashboards and separate webhooks per intent.
- Twilio account. Buy one US phone number ($1.15/month) and load $20 of SMS credit. At $0.0079 per SMS, that's 2,500 alerts before you reload.
- One serverless function (Vercel, Netlify, or Cloudflare Worker) that receives the splitforms webhook and calls Twilio. About 25 lines of code. Restaurant manager's cell number goes in an env var.
- Optional: Slack channel for the front-of-house team. Add a second webhook from splitforms to Slack's incoming-webhook URL. Free.
That's the entire stack. No reservation platform required, no monthly minimums, no per-cover fees. When the diner submits a request, the host gets a phone buzz within 2 seconds and can call back before the diner has even closed the browser tab. That speed is what converts.
Framework users: see /forms/nextjs if your site is on Next.js, or check the general /docs and /api-reference for the request contract.
Copy-paste: reservation request form
Drop this into any HTML page. Replace YOUR_ACCESS_KEY with the key from your splitforms dashboard. Works on mobile out of the box — the input types tell iOS/Android which keyboard to show.
<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 reservation request" />
<input type="hidden" name="redirect" value="https://yourrestaurant.com/thanks" />
<label>Name
<input type="text" name="name" required autocomplete="name" />
</label>
<label>Phone (we'll call to confirm)
<input type="tel" name="phone" required autocomplete="tel" />
</label>
<label>Email
<input type="email" name="email" required autocomplete="email" />
</label>
<label>Date
<input type="date" name="date" required />
</label>
<label>Time
<input type="time" name="time" required />
</label>
<label>Party size
<input type="number" name="party_size" min="1" max="20" required />
</label>
<label>Dietary restrictions / allergies
<textarea name="dietary" rows="2"></textarea>
</label>
<label>Special occasion? (birthday, anniversary, etc.)
<input type="text" name="occasion" />
</label>
<!-- honeypot: bots fill this, humans never see it -->
<input type="checkbox" name="botcheck" style="display:none" tabindex="-1" />
<button type="submit">Request reservation</button>
</form>Two things to notice. First, type="tel" on phone and type="date"/type="time" on date/time pull up native mobile pickers — no JavaScript date library required, no broken styling. Second, the honeypot field is the only spam protection you need on top of splitforms' built-in rate limiting and AI classifier. Skip reCAPTCHA.
Copy-paste: catering inquiry form
Catering inquiries need more qualifying info than dine-in reservations — guest count, menu preferences, and budget so you can quote intelligently. Put this on a dedicated /catering page.
<form action="https://splitforms.com/api/submit" method="POST">
<input type="hidden" name="access_key" value="YOUR_CATERING_ACCESS_KEY" />
<input type="hidden" name="subject" value="New catering inquiry" />
<label>Your name
<input type="text" name="name" required autocomplete="name" />
</label>
<label>Company / organization (optional)
<input type="text" name="company" />
</label>
<label>Phone
<input type="tel" name="phone" required autocomplete="tel" />
</label>
<label>Email
<input type="email" name="email" required autocomplete="email" />
</label>
<label>Event date
<input type="date" name="event_date" required />
</label>
<label>Guest count
<input type="number" name="guest_count" min="10" max="500" required />
</label>
<label>Delivery or pickup?
<select name="fulfillment" required>
<option value="">Choose one</option>
<option value="delivery">Delivery</option>
<option value="pickup">Pickup</option>
<option value="onsite">Onsite (we cook there)</option>
</select>
</label>
<label>Menu preferences (vegetarian, halal, kosher, allergies)
<textarea name="menu_prefs" rows="3"></textarea>
</label>
<label>Budget range
<select name="budget" required>
<option value="">Choose one</option>
<option value="under-500">Under $500</option>
<option value="500-1500">$500–$1,500</option>
<option value="1500-5000">$1,500–$5,000</option>
<option value="5000-plus">$5,000+</option>
</select>
</label>
<label>Anything else we should know?
<textarea name="notes" rows="3"></textarea>
</label>
<input type="checkbox" name="botcheck" style="display:none" tabindex="-1" />
<button type="submit">Request a quote</button>
</form>Notice the budget field is a select, not a free-text input. Diners hate typing numbers; they'll happily pick a range. You'll get more qualified inquiries this way than asking "what's your budget?" as open text. For full deposits, send a Stripe Payment Link in your reply email — don't try to collect money on the inquiry form itself.
SMS notifications: webhook to Twilio in 25 lines
This is the unlock that makes the whole stack work. Every splitforms submission fires a webhook. Point that webhook at a tiny serverless function, have the function call Twilio, and the manager's phone buzzes within a second. Here's the function as a Next.js Route Handler — drop it at app/api/sms-on-submit/route.ts:
import { NextResponse } from "next/server";
export async function POST(req: Request) {
const body = await req.json();
const data = body.data ?? body;
const summary =
"New " + (data.subject || "inquiry") + " from " + data.name +
" (" + data.phone + ") — " +
(data.event_date || data.date || "no date") + ", " +
(data.party_size || data.guest_count || "?") + " guests.";
await fetch(
"https://api.twilio.com/2010-04-01/Accounts/" +
process.env.TWILIO_ACCOUNT_SID + "/Messages.json",
{
method: "POST",
headers: {
Authorization: "Basic " + Buffer.from(
process.env.TWILIO_ACCOUNT_SID + ":" + process.env.TWILIO_AUTH_TOKEN
).toString("base64"),
"Content-Type": "application/x-www-form-urlencoded",
},
body: new URLSearchParams({
From: process.env.TWILIO_FROM_NUMBER!,
To: process.env.MANAGER_PHONE!,
Body: summary,
}),
}
);
return NextResponse.json({ ok: true });
}Then in your splitforms dashboard, add a webhook pointing at https://yourrestaurant.com/api/sms-on-submit and you're done. Total monthly cost for a 500-inquiry restaurant: $1.15 Twilio number + ~$4 in SMS = $5.15. Plus $0 for splitforms if you're under 1,000 submissions, or $5/month on Pro.
Common mistakes restaurants make with contact forms
- Hiding the phone number. Some site templates put the form front-and-center and bury the phone number. Diners over 50 still prefer to call. Show both — the form should complement the phone, not replace it.
- Requiring email but not phone. If you only collect email, you can't confirm a reservation when the diner doesn't reply in time. Always require phone for reservations; email can be optional.
- One giant form for every intent. Combining reservations, catering, gift cards, and feedback into one 30-field form drops conversion by 50%+. Split them.
- Using a Typeform/Tally embed on the homepage. Widget iframes hurt LCP (largest contentful paint), which is a Core Web Vitals signal Google uses for ranking. Native HTML forms render instantly.
- reCAPTCHA on a reservation form. It tanks mobile completion. Use a honeypot plus splitforms' built-in spam filter; that's plenty.
- No notification beyond email. Managers don't check email during service. Add SMS or Slack so the message reaches a phone someone's actually looking at.
- Letting the form post and show a blank screen. Always set a
redirecthidden input to a thank-you page that reassures the diner the host will call within 30 minutes. Conversion goes up because diners don't double-submit.
Next steps
- Grab a free splitforms access key — 1,000 submissions/month, no credit card.
- Free HTML contact form templates pre-wired to splitforms.
- Migrating from Formspree? 5-minute swap guide.
- Coming from a competitor: vs Formspree, vs Tally, vs Typeform, vs JotForm.
- /docs and /api-reference for the request contract and webhook envelope.
- Plan and security questions: /faq.
- More guides on the blog.
FAQ
What's the cheapest contact form for a small restaurant?
splitforms is the cheapest option that doesn't gimp features. The free tier handles 1,000 submissions/month, which covers most independent restaurants comfortably. Pro is $5/month for 5,000 submissions, or $59 for 4 years if you want to lock it in. Webhooks (for SMS notifications via Twilio or Slack alerts) are included free on every plan — most competitors paywall those at $10–$25/month, which doubles or triples your real cost.
Do I need OpenTable or Resy if I just want reservation requests?
No — and that's a common mistake restaurants make. OpenTable and Resy are full reservation systems that charge per-cover fees ($1.50–$2.50 each) plus monthly subscriptions of $150–$500. If you only want diners to request a time and your host calls back, a simple form on your site costs $0–$5/month and you keep 100% of the booking. Use OpenTable/Resy when you genuinely need a live availability calendar and POS integration, not before.
How do I get a text message when someone submits a reservation request?
Connect a splitforms webhook to a Twilio Functions endpoint (or Zapier/Make if you don't code). When a form posts, the webhook fires within a second, your function calls Twilio's send-SMS API, and the manager's phone buzzes. Twilio costs roughly $0.0079 per SMS in the US, so 500 inquiries/month is about $4 in SMS. The webhook itself is free with splitforms — most competitors charge $10+ per month just to unlock that single feature.
Why is mobile-first design so critical for restaurant forms?
Restaurant website traffic is overwhelmingly mobile — typically 85–95% of sessions come from phones, since people search for food while out, in transit, or on a couch with the TV on. If your reservation form loads slow, has tiny tap targets, or shows a desktop-style date picker, you lose the booking. Use type="date", type="tel", type="number" with min/max on input fields so iOS and Android show the right keyboard automatically. That alone bumps mobile completion rates 15–25%.
Can I take catering deposits through a contact form?
Not directly — a contact form collects information, not payments. For deposits, the cleanest pattern is: catering inquiry form submits to splitforms, you reply with a custom quote, then send a Stripe Payment Link by email for the deposit. If you want one-click deposits inline, you'd graduate to a tool like Tally or JotForm with Stripe integration, but those start around $29/month. For most catering operations, the quote-then-link flow converts better anyway because pricing varies by guest count and menu.
Will Google index my reservation page if the form is on it?
Yes, but make sure the form itself isn't blocking content. Google indexes the HTML, not the form behavior. Common mistakes: putting the form inside an iframe (Google doesn't extract iframe text into your page), hiding the page behind a JavaScript modal that delays first paint, or using a form widget that injects content after page load. splitforms uses a plain HTML form posted to its endpoint — zero impact on SEO. Hosted form widgets (Typeform embeds, etc.) often hurt Core Web Vitals.
How do I block spam reservation requests without annoying real diners?
Three layers, none of which add friction. (1) A honeypot field — a hidden checkbox bots will tick but humans never see; splitforms calls it `botcheck`. (2) Server-side rate limiting per IP, built into splitforms by default. (3) AI spam classification, which catches the new wave of LLM-written fake inquiries. Skip reCAPTCHA — it tanks mobile completion rates by 15–30%. See our breakdown at /blog/honeypot-vs-recaptcha for the numbers.
Can one form handle reservations, catering, and private events?
You can, but splitting them performs better. A single combined form ends up either too long (drops conversion) or too generic (you lose qualifying info). The pattern that works: one short reservation form on the homepage and contact page, a dedicated catering inquiry form on /catering with menu and guest count fields, and a private events form on /private-events with date and budget fields. Each posts to its own splitforms key so the manager sees exactly what came in.