The lunch rush ends and the kitchen wind-down begins. The host checks the day's reservations. One slot shows a name with no phone number, another has a time that has already passed. These moments happen when data moves between forms and spreadsheets. This workflow automates the path from a web form to a Google Sheet and a confirmation email, but each node introduces failure modes that must be understood to keep bookings reliable.
At a glance
- Built for: restaurants and cafes
- Difficulty: beginner
- Starts with: Form Trigger (formTrigger)
- Steps: 5 nodes
- Tools: n8n, Google Sheets, Gmail
Form Trigger – formTrigger
The workflow starts when a visitor submits the online booking form. If the form is submitted without a name or email, the trigger passes empty values downstream. A missing required field can cause the Google Sheets node to write a row of nulls, or the Gmail node to address a blank recipient. The Set node cannot fix absent data; it can only re‑map what it receives. Retries on the form submit side are the only way to guarantee complete records.
Set – Preprocess Form
set
After the trigger, the Set node maps form fields to Google Sheet columns. If the form uses different labels than the sheet expects, the node will map fields to empty columns. For example, a form field called "party size" left unmapped will not populate the "guests" column. The node also runs on every execution; if a user resubmits quickly, a second row appears in the sheet unless duplicate checks are added outside n8n. Timeouts here are rare but can occur if the form payload is large, causing the node to pause while it waits for the data structure to resolve.
Google Sheets – Insert Booking
googleSheets
This node writes the booking row into a spreadsheet. Network glitches or exceeding the sheet's row limit can cause the operation to fail. When the write fails, the booking is lost unless an error trigger catches the exit path. Duplicate entries are a risk if the form is submitted twice; the sheet does not inherently de‑duplicate, so manual review or a unique identifier in the form is needed. The node does not retry automatically—any retry must be handled by the workflow's error branch.
Email – Send Confirmation
gmail
Once the sheet row is created, the Gmail node sends a confirmation to the customer. If the email address from the form is malformed, the send fails and the workflow stops at that node. Rate limits from the Gmail API can also throttle consecutive sends, especially during a busy service period. The node does not hold the email for later retry; it logs the failure and moves on. A common edge case is sending to an address that accepts mail but triggers a spam filter, resulting in the customer never seeing the notice.
Worked Example
Booking record (fictional)
- Name: Luna Patel
- Email: luna.patel@mail.example
- Date: 2026‑02‑14
- Time: 19:00
- Party size: 4
Step‑by‑step trace
- formTrigger: The form submits the JSON payload `{
Key takeaways
- Form submissions missing required fields pass empty values downstream, potentially causing null entries in Google Sheets or blank email recipients, requiring form-side retries to guarantee complete data.
- The Set node maps form fields to sheet columns; mismatched labels or quick resubmissions can result in empty columns or duplicate rows unless external duplicate checks are implemented.
- Google Sheets writes booking data but fails silently on network errors or row limits without automatic retries, and Gmail confirmation sends fail on malformed addresses or API rate limits, logging errors and moving on without retrying.
Before you import it
- A running n8n instance (cloud or self-hosted).
- n8n account
- Google Sheets service account with write access
- Gmail credentials for sending emails
- Sample data to test with, before pointing it at real records.
Get the free workflow
The importable JSON for Restaurant Booking Form is free to download: https://lanexbuilds.com/entry?id=restaurant-booking-form
This workflow was generated with AI assistance. Test it with sample data before using it on real data.
Top comments (0)