A restaurant POS does not have to start with expensive hardware or a complicated software subscription. For a small café, food truck, bakery, takeaway shop, or independent restaurant, Google Sheets can be turned into a surprisingly capable point-of-sale system.
The important distinction is that you are not simply creating a spreadsheet with a list of sales. A workable Google Sheets POS needs a product database, order-entry screen, automatic calculations, payment tracking, sales history, inventory logic, staff controls, and reporting.
Done properly, the spreadsheet becomes a small restaurant operating system.
It will not replace a commercial POS in every situation. High-volume restaurants need things such as payment-terminal integration, offline transaction processing, kitchen display systems, fiscal compliance, customer-facing ordering, and more sophisticated permissions. But for a smaller operation, Google Sheets can provide the core mechanics of a POS at very little cost.
This guide explains how to build one from scratch.
What a Google Sheets Restaurant POS Should Do
Before creating formulas, define what you expect the system to accomplish.
At minimum, the POS should allow a cashier or server to:
- Select menu items
- Enter quantities
- Calculate line totals
- Apply discounts
- Calculate taxes
- Record payment method
- Produce an order or receipt number
- Save completed transactions
- Track daily sales
- Track which products were sold
- Deduct ingredients or inventory
- Identify cash, card, and other payment totals
- Review sales by employee, product, category, and date
The owner should also have a separate dashboard showing revenue, transaction count, average order value, best-selling products, payment mix, and inventory information.
The biggest mistake is putting all of this onto one giant worksheet. Build the POS as several connected sheets instead.
Step 1: Create the POS Workbook
Create one Google Sheets file and give it a name such as:
Restaurant POS
Create these tabs:
- POS
- Products
- Orders
- Order Items
- Payments
- Inventory
- Recipes
- Employees
- Customers
- Dashboard
- Settings
You do not necessarily need all 11 tabs on day one. A small café can begin with POS, Products, Orders, Payments, Inventory, and Dashboard.
The important principle is separation.
The POS screen is where employees work. The Products sheet is where management maintains menu information. Orders becomes the permanent transaction history.
Step 2: Build the Products Database
The Products sheet is the foundation of the entire system.
Use columns such as:
| Product ID | Product Name | Category | Price | Tax Rate | Cost | Active |
|---|---|---|---|---|---|---|
| P001 | Cappuccino | Coffee | 4.50 | 0% | 1.10 | Yes |
| P002 | Latte | Coffee | 4.75 | 0% | 1.25 | Yes |
| P003 | Chicken Sandwich | Food | 9.50 | 7% | 3.20 | Yes |
Give every product a unique Product ID.
Do not use the product name as the primary identifier. Names change. IDs should not.
The Active column is also useful. Rather than deleting an old menu item, mark it inactive. This preserves historical sales data.
For the price, store a numeric value rather than “$4.50” as text. Formatting can make it display as currency without turning the underlying value into text.
Step 3: Add Dropdown Controls
A POS should prevent staff from typing inconsistent information.
For example, one employee might enter “Visa,” another “VISA,” and another “Credit Card.” Your sales report then sees three different payment methods.
Use dropdowns for fields such as:
- Payment method
- Product category
- Employee
- Order type
- Table number
- Tax type
- Discount type
- Order status
Google Sheets supports dropdowns through data validation, including dropdowns populated from another range. Invalid entries can also be rejected rather than simply flagged.
For example, create this list on the Settings sheet:
Payment Methods
- Cash
- Credit Card
- Debit Card
- Mobile Payment
- Bank Transfer
- Other
Then make the Payment Method field on the POS sheet a dropdown based on that list.
Step 4: Design the POS Screen
The POS tab should look more like a simple application than an accounting spreadsheet.
A basic layout could be:
| Field | Value |
|---|---|
| Order # | 10025 |
| Date | 09/06/2026 |
| Cashier | Maria |
| Order Type | Takeaway |
| Table | 12 |
Then create the order-entry area:
| Product | Qty | Unit Price | Discount | Total |
|---|---|---|---|---|
| Cappuccino | 2 | $4.50 | $0.00 | $9.00 |
| Chicken Sandwich | 1 | $9.50 | $0.00 | $9.50 |
Underneath, calculate:
Subtotal
Discount
Tax
Grand Total
Amount Paid
Change
The employee should only have to select the product and enter the quantity.
Everything else should calculate automatically.
Step 5: Pull Prices Automatically
Do not ask the cashier to type the price.
If the product is selected in cell A10 and the Products sheet contains Product ID, Product Name, Category, Price, and Cost, use a lookup formula to retrieve the price.
For example, depending on your product-table structure, you can use:
=XLOOKUP(A10,Products!B:B,Products!D:D,"")
This means:
“Find the selected product in the Products sheet and return its price.”
If your Google Sheets environment or existing workbook uses another lookup method, VLOOKUP or INDEX/MATCH can accomplish the same basic task.
The important design rule is simple:
Prices belong in one master product table.
Do not manually duplicate prices throughout the workbook.
Step 6: Calculate Each Order
The line total should be:
Quantity × Unit Price - Discount
For example:
=B10*C10-D10
Then the subtotal can be:
=SUM(E10:E25)
Suppose the subtotal is $18.50 and the restaurant gives a $2 discount.
The taxable amount is:
=Subtotal-Discount
Then calculate tax using the applicable rate.
For example:
=TaxableAmount*TaxRate
Finally:
=TaxableAmount+Tax
This gives you a basic checkout engine.
Step 7: Create a Real Order Number
Every completed sale needs a unique identifier.
For example:
- 20260906-0001
- 20260906-0002
- 20260906-0003
Using the date as part of the number makes transactions easier to locate.
Avoid relying solely on the spreadsheet row number. Rows can be inserted or deleted.
For a basic implementation, an Apps Script function can generate sequential order numbers and write them to the transaction record.
Google Apps Script is particularly useful here because it can extend Sheets with JavaScript functions and automate spreadsheet actions.
Step 8: Create the Orders Table
The Orders sheet should contain one row per completed transaction.
For example:
| Order ID | Date | Time | Employee | Order Type | Subtotal | Discount | Tax | Total |
|---|---|---|---|---|---|---|---|---|
| 20260906-001 | 09/06/26 | 10:12 | Maria | Dine-in | 18.50 | 2.00 | 1.16 | 17.66 |
Do not overwrite completed orders.
This is the transaction ledger.
Once an order has been paid, it should be copied or written into this table and treated as historical data.
Step 9: Create an Order Items Table
A second table should contain individual products sold.
| Order ID | Product ID | Product | Quantity | Price | Discount | Line Total |
|---|---|---|---|---|---|---|
| 20260906-001 | P001 | Cappuccino | 2 | 4.50 | 0 | 9.00 |
| 20260906-001 | P003 | Chicken Sandwich | 1 | 9.50 | 2.00 | 7.50 |
This structure is much better than putting every product into one enormous transaction row.
Why?
Because you can later ask:
- How many cappuccinos did we sell?
- Which products generated the most revenue?
- What did customer orders typically contain?
- How many sandwiches were sold yesterday?
- What was the average quantity per order?
The Order Items table makes those questions possible.
Step 10: Add Payment Tracking
Create a Payments sheet.
| Payment ID | Order ID | Payment Method | Amount | Date | Employee |
|---|---|---|---|---|---|
| PAY001 | 20260906-001 | Cash | $17.66 | 09/06/26 | Maria |
This becomes particularly important when customers use multiple payment methods.
For example, a customer could pay $10 cash and $7.66 by card.
Instead of forcing the transaction into one payment-method column, record two payment rows against the same Order ID.
At closing, you can calculate:
Cash received
Card received
Mobile payments
Other payments
That gives the manager a much cleaner reconciliation process.
Step 11: Build Inventory Management
A spreadsheet POS becomes much more useful when sales affect inventory.
The simplest approach is to connect products to recipes.
Suppose a cappuccino requires:
- 18g coffee beans
- 200ml milk
The Recipes sheet could look like:
| Product | Ingredient | Quantity | Unit |
|---|---|---|---|
| Cappuccino | Coffee Beans | 18 | g |
| Cappuccino | Milk | 200 | ml |
When one cappuccino is sold, the theoretical inventory consumption becomes:
18g coffee + 200ml milk
If 50 cappuccinos are sold:
900g coffee + 10L milk
This is far more useful than simply deducting “1 cappuccino” from inventory.
Step 12: Create the Inventory Sheet
Track ingredients rather than only menu products.
| Ingredient | Unit | Opening Stock | Purchases | Sales Usage | Waste | Closing Stock | Reorder Level |
|---|---|---|---|---|---|---|---|
| Coffee Beans | kg | 10 | 5 | 7 | 0.5 | 7.5 | 3 |
| Milk | L | 40 | 20 | 45 | 3 | 12 | 15 |
A theoretical inventory calculation is:
Opening Stock + Purchases – Sales Usage – Waste = Theoretical Closing Stock
You can then compare theoretical stock with physical stock.
That difference is an important restaurant control metric.
If the spreadsheet says you should have 7.5kg of coffee but the physical count is 6.2kg, investigate the variance.
Possible causes include waste, incorrect recipes, staff drinks, spoilage, theft, over-portioning, or incorrect receiving.
Step 13: Add Waste Tracking
Do not bury waste inside inventory adjustments.
Create a Waste Log:
| Date | Ingredient | Quantity | Reason | Employee |
|---|---|---|---|---|
| 09/06/26 | Milk | 2L | Spoilage | Maria |
| 09/06/26 | Chicken | 1kg | Overproduction | James |
This gives management a much clearer view of food waste.
A restaurant POS built in Sheets should distinguish between:
- Sales consumption
- Waste
- Stock adjustment
- Purchasing
- Physical count
That distinction is what turns a basic spreadsheet into a management tool.
Step 14: Automate the Workflow with Apps Script
This is where the spreadsheet starts behaving like an actual POS.
Create an Apps Script project from:
Extensions → Apps Script
Google documents Apps Script as the way to extend Sheets with JavaScript, including custom functions and spreadsheet automation.
A “Complete Sale” button can eventually perform several actions:
- Validate that a product has been selected.
- Check that quantities are greater than zero.
- Generate an order number.
- Calculate the final amount.
- Write the transaction to Orders.
- Write each product to Order Items.
- Write payment information to Payments.
- Update inventory records.
- Clear the POS screen.
- Prepare the next order.
That is considerably better than asking staff to copy and paste information manually.
Step 15: Use Triggers for Automation
Apps Script supports event-driven and time-driven triggers.
An edit trigger can respond when a spreadsheet is changed. A time-driven trigger can run on a schedule.
For example, you could create an automated daily process that:
- Archives old temporary data
- Creates a daily sales summary
- Checks low-stock ingredients
- Sends a manager notification
- Updates a dashboard
Be careful with automation around financial records. A script should never silently alter completed sales without leaving an audit trail.
Step 16: Protect the Spreadsheet
This is one of the most important steps.
Cashiers should not have access to formulas, product costs, inventory formulas, or historical transaction data simply because they can open the POS file.
Protect management sheets and formula ranges.
The cashier-facing area should contain only the cells they actually need to operate.
For example:
Cashier can edit:
- Product
- Quantity
- Order type
- Table
- Payment method
- Amount received
Cashier should not edit:
- Product price database
- Product cost
- Tax formulas
- Inventory formulas
- Historical transactions
- Dashboard formulas
Also keep regular backups or copies of the workbook.
Step 17: Build the Restaurant Dashboard
The Dashboard should answer management questions quickly.
At minimum, display:
Today’s Sales
=SUMIFS(Orders!I:I,Orders!B:B,TODAY())
Number of Orders
=COUNTIFS(Orders!B:B,TODAY())
Average Order Value
=Today's Sales/Number of Orders
Cash Sales
Sum payments where the payment method is Cash.
Card Sales
Sum payments where the payment method is Card.
Best-Selling Products
Use a pivot table or formulas to rank products by quantity sold.
Useful dashboard metrics include:
- Gross sales
- Net sales
- Number of orders
- Average order value
- Sales by hour
- Sales by category
- Sales by employee
- Payment-method breakdown
- Discounts
- Refunds
- Food cost
- Inventory variance
- Waste
This is where Google Sheets can provide genuine business value rather than merely acting as a digital cash register.
Step 18: Test the POS Before Using It
Never put an untested spreadsheet POS in front of customers.
Run at least 20 to 50 simulated transactions.
Test:
- One-item sale
- Multiple-item sale
- Discount
- Tax
- Cash payment
- Card payment
- Split payment
- Wrong product
- Zero quantity
- Refund
- Cancelled order
- Duplicate order
- Out-of-stock ingredient
- End-of-day reconciliation
Then deliberately break it.
Try entering letters into quantity fields. Delete a product. Change a price. Enter a negative quantity. Remove a dropdown value.
A POS is only useful if ordinary staff mistakes do not destroy the underlying data.
When Google Sheets Is a Good POS Choice
Google Sheets works particularly well for:
- Small cafés
- Coffee shops
- Bakeries
- Food trucks
- Small takeaway businesses
- Pop-up restaurants
- New restaurants testing a concept
- Low-volume independent restaurants
- Businesses that mainly need sales and inventory tracking
It can also be useful as a temporary POS while a restaurant evaluates dedicated POS software.
When Google Sheets Stops Being Enough
There is a point where building more spreadsheet functionality becomes counterproductive.
Consider dedicated POS software when you need:
- Integrated card processing
- Offline operation
- Kitchen display systems
- Self-service ordering
- Online ordering integration
- Delivery-platform integration
- Sophisticated employee permissions
- Multi-location synchronization
- Fiscal or electronic invoicing compliance
- Advanced loyalty programs
- Detailed audit controls
- High transaction volumes
- Automated accounting integrations
The problem is not that Google Sheets cannot be made more sophisticated. Apps Script can automate a great deal. The problem is that you eventually start building your own POS company inside a spreadsheet.
That is rarely a good use of a restaurant owner’s time.
The Best Architecture for a Google Sheets POS
If you want the system to remain manageable, use this structure:
POS
→ employee-facing order screen
Products
→ master menu and pricing database
Orders
→ one row per completed transaction
Order Items
→ individual products sold
Payments
→ payment transactions
Recipes
→ ingredient requirements
Inventory
→ stock movement and balances
Waste
→ discarded products and ingredients
Employees
→ staff records
Dashboard
→ management reporting
Settings
→ dropdown lists and system controls
This separation is the key to making the system reliable.
Final Advice: Build the POS Around the Transaction, Not the Spreadsheet
The best Google Sheets restaurant POS is not the one with the most formulas.
It is the one that follows a clean transaction from beginning to end:
Customer orders → cashier enters order → system calculates price → customer pays → transaction is saved → payment is recorded → inventory consumption is calculated → dashboard updates.
Once that workflow is working, add features carefully.
Start with sales. Then payments. Then inventory. Then recipes. Then reporting. Finally, automate repetitive tasks with Apps Script.
That approach is much easier to troubleshoot than trying to build a fully automated restaurant POS on the first day.
Google Sheets already provides the spreadsheet engine, data validation, formulas, and database-like tables. Apps Script adds the automation layer. Google’s documentation specifically supports custom functions and event-driven triggers, making it possible to extend a Sheet beyond ordinary calculations.
For a small restaurant or café, that combination can be enough to create a functional POS without buying a traditional system immediately.
The real test is not whether the spreadsheet looks like a POS.
The test is whether every dollar of sales can be traced from the customer’s order to the final daily reconciliation, and whether every ingredient used can be reasonably explained by the sales recorded.
If your Google Sheets system can do that reliably, you have built much more than a spreadsheet. You have built a workable restaurant POS.



