Record orders in a packing list spreadsheet
Each order lands on the Orders tab with product, quantity, variant and customer, ready to pick and pack from.
New submission on your order or pre-order form
Append a row to the Orders tab with product, quantity, customer and line total
One-directional. A submission triggers the action — nothing is written back into your form.
A pop-up stall or a small studio does not need a shop platform to take orders — it needs a list it can pick and pack from. This flow appends each order to the Orders tab as it comes in, and a formula column works out the line total from your own price list.
The form can send customers to secure hosted checkout after they order. The sheet is the record the person packing boxes actually works from.
Setting it up
- 1
Publish the order form with Item Name or Product as a select question listing only what you actually have with you, so the Product column matches your price list word for word.
- 2
In the spreadsheet, build two tabs: Orders for the rows the Zap writes, and Prices with one row per product and its price.
- 3
Type the Orders headers first — Customer, Email, Product, Qty, Variant, Fulfilment — then add Line Total and Status to the right of them.
- 4
In Zapier, choose formformform with the New Submission trigger and your order form, then pull a test order through so every answer is available to map.
- 5
Add the Google Sheets Create Spreadsheet Row action, connect the Google account, and select the spreadsheet and the Orders worksheet.
- 6
Map Full Name, Email Address, Item Name or Product, Quantity, "Color, Variant, or Size" and Delivery Method into their columns, and format Qty as a number before the first order arrives.
- 7
Leave Line Total and Status unmapped. Put one ARRAYFORMULA at the top of Line Total that multiplies Qty by a VLOOKUP into the Prices tab, so every appended row is covered without anyone dragging a formula down.
- 8
Run a test order, check that Line Total calculates and Status is blank, then turn the Zap on and print the tab as your first picking list.
What maps where
Using the Product Order Form as the starting point. These are its real fields — swap in your own and the mapping works the same way.
| Form field | Google Sheets |
|---|---|
| Full Name | Customer column on the Orders tab |
| Email Address | Email column, for sending the invoice or payment link |
| Item Name or Product | Product column, matched against the Prices tab |
| Quantity | Qty column, formatted as a number so it sums |
| Color, Variant, or Size | Variant column the packer reads off |
| Delivery Method | Fulfilment column that splits pickup from delivery |
Variations worth knowing
Shipping Address and Special Instructions matter for posted orders and clutter the tab for collections. Map both into columns at the far right of the Orders tab, then keep a filter view showing Fulfilment set to delivery with those columns visible, and a second view for collections without them.
Stock you hold and stock you have not made yet want different lists. Point a second Zap from your pre-order form at a Pre-orders worksheet with an Expected Ship column you fill in by hand. The packing list stays honest, and the pre-order tab becomes the production queue.
If something isn't arriving
An appended row does not inherit the formula from the row above it, so a formula dragged down a hundred rows stops working the moment order 101 arrives. Replace it with a single ARRAYFORMULA anchored in the header area that covers the whole column at once.
Rows always append to the bottom, so a manual sort lasts until the next order. Leave Orders in arrival order and build the picking list on another tab with a QUERY that sorts by Product, or use a filter view, which sorts your screen without moving the data.
Frequently asked questions
Does this take the payment as well?
Yes. Add products and priced options to the form, then collect payment through secure hosted checkout with Stripe, PayPal, or Square. Payment status is tracked alongside the response.
Can the sheet reduce a stock count when an order comes in?
Only with a formula on the spreadsheet side. Keep a Stock tab that subtracts a SUMIF over the Qty column from your opening count. The automation only ever appends rows; it never reads the sheet and never writes anything back into the form.
What if two orders are submitted at the same moment?
Zapier runs the action once per submission and each run appends to whatever is currently the last row, so two orders arriving together become two rows in whichever order they finish. Nothing is overwritten and nothing is merged into a single row.
Related automations
- Build an RSVP list with a live headcount
Every registration adds a row to the RSVPs worksheet, and a SUM keeps the headcount current for catering.
- Capture feedback for pivot table analysis
Every survey response lands on the Responses tab with score, category and comment, ready for a pivot table.
- Collect job applications in a hiring tracker
Each application becomes a row on the Candidates tab, with the scoring columns left empty for reviewers to fill in.
- Log every lead in a master spreadsheet
Every lead form submission becomes a row on the Leads tab, with name, work email, company and source already filled in.
- Track support requests in a Tickets tab
Each support request lands on the Tickets tab with issue type, priority and reporter email, ready to sort and mark resolved.
- Add every inbound enquiry to your Notion leads database
Every business enquiry lands in your Notion Leads database as a page tagged New, with the company and inquiry type already filled in.
Build the form first
The automation needs somewhere to fire from. Publish a form, connect it once, and every submission from then on runs this flow.
Start free