How to Turn a Google Form into a Free Order System
How to Turn a Google Form into a Free Order System
A Google Form can capture orders. Google Sheets logs them automatically. Apps Script sends a confirmation email the moment someone submits. No monthly fee, no plugin, no external tool required — just Google’s own free products wired together. This guide builds it step by step.
This isn’t a WooCommerce guide. It’s for a different situation — a seller who doesn’t have a website, or who has a website but takes custom orders via WhatsApp and wants a better way to capture them, or who runs a food or service business where customers order by filling out a form. The system built in this guide: a Google Form customers fill in → responses log to a Sheet → the customer gets an automatic confirmation email → you get an alert that a new order arrived.
Part 1: Build the Order Form
Go to forms.google.com → click the + (Blank form). Give it a title like “[Your Business Name] — Order Form.” Now add these fields:
| Field | Type | Required? | Notes |
|---|---|---|---|
| Full Name | Short answer | Required | Who placed the order |
| Email Address | Short answer | Required | Enable “Response validation → Text → Email address” so only valid emails are accepted. This is where the confirmation goes. |
| Phone Number / WhatsApp | Short answer | Required | Add a hint text: “Include country code if outside Ghana, e.g. +44…” |
| What would you like to order? | Dropdown or Checkboxes | Required | List your products/services. Use Dropdown for single item; Checkboxes if they can order multiple. Keep options concise — this also serves as a light catalogue. |
| Quantity | Short answer | Required | Add response validation: Number → Greater than or equal to → 1 |
| Delivery or Pickup? | Multiple choice | Required | Options: “Delivery” / “Pickup”. Add a follow-up Section for delivery address (using Section logic: show address field only if “Delivery” is selected). |
| Delivery Address | Paragraph | Optional* | *Required in practice for Delivery — use Google Forms section branching to show this only when “Delivery” is chosen. |
| Special Instructions / Notes | Paragraph | Optional | Customisations, allergies, gift notes, preferred delivery time |
Enable email collection in Settings
In your form: Settings tab → Responses → uncheck “Limit to 1 response” (unless you genuinely want that). More importantly, make sure you are not requiring customers to sign in with a Google account — most customers won’t have one. Keep “Restrict to users in [domain]” turned off.
Part 2: Connect to Google Sheets
- Order Status — use Data → Data Validation → Dropdown (List of items): Pending, Confirmed, Preparing, Dispatched, Delivered, Cancelled. You’ll manually update this as each order moves through stages.
- Payment Received? — Dropdown: No, Yes (MoMo), Yes (Card), Yes (Cash). Tick this off when payment is confirmed.
- Order ID — put a formula here:
=IF(A2<>"","ORD-"&TEXT(ROW()-1,"000"),"")— this auto-generates ORD-001, ORD-002 etc. for every row with a timestamp. - Notes — a free-text column for your own use (e.g. “called to confirm,” “item out of stock”)
Part 3: The Confirmation Email (Apps Script)
This is the part most guides skip or leave vague. Here is the actual script, explained line by line, so you understand what it does and can adapt it.
function myFunction() {} and paste the script below.// EDIT:// Runs automatically every time someone submits the form function onFormSubmit(e) { // --- EDIT these three lines --- var OWNER_EMAIL = "yourname@gmail.com"; // EDIT: your email var BUSINESS_NAME = "Abena's Kitchen"; // EDIT: your business name var WHATSAPP_NUMBER = "+233241234567"; // EDIT: your WhatsApp number // --- End of lines to edit --- // Pull the form response values var responses = e.namedValues; var customerName = responses["Full Name"][0]; var customerEmail = responses["Email Address"][0]; var customerPhone = responses["Phone Number / WhatsApp"][0]; var orderItem = responses["What would you like to order?"][0]; var quantity = responses["Quantity"][0]; var deliveryChoice = responses["Delivery or Pickup?"][0]; var deliveryAddress = responses["Delivery Address"] ? responses["Delivery Address"][0] : "N/A (Pickup)"; var notes = responses["Special Instructions / Notes"] ? responses["Special Instructions / Notes"][0] : "None"; var timestamp = new Date().toLocaleString("en-GH"); // --- Email to the CUSTOMER --- var customerSubject = "Your order from " + BUSINESS_NAME + " is confirmed ✓"; var customerBody = "Hi " + customerName + ",\n\n" + "Thank you for your order! Here's a summary:\n\n" + "Item: " + orderItem + "\n" + "Quantity: " + quantity + "\n" + "Delivery: " + deliveryChoice + "\n" + "Address: " + deliveryAddress + "\n\n" + "We'll be in touch to confirm payment and delivery details.\n" + "WhatsApp us anytime: " + WHATSAPP_NUMBER + "\n\n" + "Thank you,\n" + BUSINESS_NAME; MailApp.sendEmail(customerEmail, customerSubject, customerBody); // --- Alert email to YOU (the owner) --- var ownerSubject = "🛒 New Order — " + customerName + " — " + orderItem; var ownerBody = "New order received at " + timestamp + ":\n\n" + "Customer: " + customerName + "\n" + "Email: " + customerEmail + "\n" + "Phone: " + customerPhone + "\n" + "Item: " + orderItem + "\n" + "Quantity: " + quantity + "\n" + "Delivery: " + deliveryChoice + "\n" + "Address: " + deliveryAddress + "\n" + "Notes: " + notes + "\n\n" + "Open your order sheet to update the status."; MailApp.sendEmail(OWNER_EMAIL, ownerSubject, ownerBody); }
responses["Full Name"][0] to pull the value from the field named “Full Name” in your form. If your form field is named “Customer Name” instead, the script needs to say responses["Customer Name"][0]. Case-sensitive, character-for-character match.- Choose which function to run: onFormSubmit
- Choose which deployment should run: Head
- Select event source: From spreadsheet
- Select event type: On form submit
Part 4: Add a Simple Stock Tracker
Once orders are logging to the Sheet, you can track how many of each item has been ordered with a formula — no additional setup required.
Create a second sheet tab in the same workbook (click + at the bottom left). Name it “Stock.” Set up two columns: Product and Units Ordered. List each of your products in column A. In column B, use COUNTIF to count how many times each product has been ordered from the form responses:
=COUNTIF('Form Responses 1'!D:D, A2)
=SUMIF('Form Responses 1'!D:D, A2, 'Form Responses 1'!E:E)
=COUNTIF('Form Responses 1'!A:A, ">="&TODAY())
=COUNTIF('Form Responses 1'!J:J, "No")
Sharing the Form with Customers
In Google Forms, click Send (top right) → click the link icon → copy the link. This is your order form URL. Put it everywhere:
- WhatsApp Business bio — the clickable website link in your profile
- WhatsApp Quick Reply — a shortcut that sends the form link when someone asks “how do I order?”
- Instagram bio — the single link slot, or via a link-in-bio page if you need multiple links
- WhatsApp Catalog item links — add the form URL as the “Link” field on your catalog items, so customers can go directly from a catalog product to the order form
- Your website — embed via Insert → Embed (Google Forms) → copy the iframe code → paste into your website’s HTML
bit.ly/abenas-orders that’s easier to share verbally and looks cleaner in a WhatsApp message.Before vs After: A Full Order Scenario
What This System Can’t Do (And the Upgrade Path)
🔧 The Make.com Upgrade Path
When you outgrow the Apps Script email system, Make.com’s free tier connects Google Forms to everything else. Each of the limitations above has a direct Make.com solution:
Common Mistakes to Avoid
responses["Full Name"][0] only works if your form field is literally named “Full Name.” If you named it “Customer’s Full Name” or “Name” the script silently returns nothing and the confirmation email sends with blank values.responses["..."][0] line and confirm it matches the exact name of the corresponding field in your form. Copy-paste from the form to be sure.Frequently Asked Questions
Do customers need a Google account to fill in the form?
No — and this is important to verify in your settings. Go to Google Forms Settings → Responses → make sure “Restrict to users in [your organization]” is turned off and “Require sign-in” is not enabled. With these off, anyone with the link can fill in the form without any Google account.
Can I collect payment through the form itself?
Google Forms doesn’t have a built-in payment collection step. The cleanest approach: in your form confirmation message, tell customers you’ll send a payment link shortly. Then manually send a Paystack or Flutterwave payment link to their email. The Make.com upgrade described above automates this — a new form submission triggers a Make.com scenario that generates and emails a payment link immediately, without any manual step from you.
What happens to the confirmation email if the customer’s email is wrong?
Apps Script’s MailApp will throw an error and the email won’t send, but the order still logs to the Sheet. You won’t be notified of the failed email automatically. Add response validation to the email field (as described in the mistakes section) to prevent invalid emails from being submitted in the first place — the vast majority of blank confirmation emails trace back to skipping this validation step.
Can I use this for a restaurant or food business with a daily changing menu?
Yes, with one adaptation: use the Dropdown field for menu items, and update the dropdown options each day to reflect what’s available. Google Forms lets you edit a live form without breaking the link — changes take effect immediately for anyone opening the form after you save. You can also add a “Today’s specials” description section at the top of the form that you update daily.
When should I move from this to WooCommerce or a proper e-commerce platform?
When payment collection needs to be part of the same flow (rather than a follow-up step), when you need customer accounts and order history, or when your product catalogue is large enough that a dropdown list stops being practical. The Google Form system is a genuine long-term solution for service businesses, food sellers, and custom order businesses — it’s not just a stepping stone. Migrate when a specific limitation becomes a real daily problem, not on a fixed timeline.
You Now Have a Working Order System
A Google Form that captures structured order data. A Sheet that logs every submission automatically. An Apps Script that sends a confirmation email to the customer and an alert to you the moment a form is submitted. A Stock tab with formulas that show cumulative orders per product. That’s a complete order capture system — built in under two hours, at zero cost, requiring no monthly subscription and no website.
More at OurInternetBusiness.com
Practical guides on automation, online business systems, and growing income from Ghana and across Africa. Visit OurInternetBusiness.com and bookmark it.
