splitforms.com
All articles/ GUIDES10 MIN READPublished May 10, 2026

Best Contact Forms for Restaurants in 2026: Top 7 Picks

The best contact form tools for restaurant websites in 2026 — reservation requests, catering inquiries, SMS notifications, and the cheapest tools available.

✶ Written by
splitforms.com / blog

Founder of splitforms — the form backend API for developers. Writes about form UX, anti-spam, and shipping web apps without backend code.

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

ToolFree tierCheapest paidSMS-ready webhooksMobile-first HTMLBest for
splitforms1,000/mo$5/moYes (free)Yes (your HTML)Independent restaurants, catering ops
OpenTable formsNo$149+/mo + cover feesBuilt-in email/SMS confirmationsYes (widget)Restaurants already on OpenTable
TockNo$199+/moBuilt-inYes (widget)Prepaid tasting menus, fine dining
Resy direct widgetNo$249+/mo + cover feesBuilt-inYes (widget)Urban high-volume restaurants
TallyUnlimited submissions$29/moWebhooks paid onlyEmbed/widgetHosted multi-step forms
JotForm (restaurant templates)100/mo$34/moAdd-onWidgetTemplates without coding
Typeform10/mo$25/moHigher planWidgetBrand-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.

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 redirect hidden 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

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.

About the author
✻ ✻ ✻

Get your free contact form API key in 60 seconds.

1,000 free form submissions per month. No credit card. No SDK, no PHP, no plugin. Drop one POST endpoint in your form and submissions land in your inbox.

Generate access key →Read the docs
v0.1 · founders pricing locked in · early access open