Weekly Numbers Digest: A Monday Email With Your Prime Cost, Built From a Google Sheet
For Restaurant Owner-Operators ·
What This Builds
Every Monday morning an email lands in your own inbox with last week's net sales, your prime cost share (food and beverage plus labor, divided by net sales), the change from the week before, and your four-week average. You type four numbers into a sheet once a week. The sheet does the arithmetic, and Zapier carries the result to your inbox. You stop discovering a drifting prime cost weeks later, when the monthly P&L finally arrives.
The email goes to you and nobody else. Nothing is sent to staff, your accountant, your bank or a vendor.
Prerequisites
- A Google account with Sheets and Gmail (a regular Google account or a Google Workspace account both work)
- A Zapier account on Professional ($29.99/month). Zapier's free plan allows two-step Zaps only, and this build has three steps (four with the optional AI step), so a paid plan is needed. This is the whole ongoing cost of the build, since Sheets and Gmail are already in your Google account.
- Your weekly net sales, food and beverage cost and labor cost totals, from the POS report and the payroll report. Totals only.
- Ten minutes each week to type the totals in. If you skip a week, the email says so instead of staying silent.
The Concept
Think of the sheet as a scoreboard and Zapier as the person who reads the scoreboard to you every Monday. The scoreboard always has a "latest score" line, even if you forgot to update it. That is the trick that makes this dependable.
Zapier has a step that looks up a row in a sheet. If it finds no row, the Zap stops right there, shows "Safely halted" in Zap History, and sends nothing. A lookup that sometimes finds a row and sometimes does not would fail on exactly the weeks you forgot to enter numbers, which are the weeks you most need a nudge. So this build looks up one Summary row that always exists. The sheet fills that row with the latest week, and with a plain warning when the totals are missing. The Zap never searches for "this week's row", so it never comes up empty.
Build It Step by Step
Part 1: Keep your numbers private
This sheet holds only weekly totals: no staff names, no pay rates, no guest information, no bank account numbers. Use a new sheet for it. Zapier will read the sheet and pass the contents of the Summary row through its own servers (more on what Zapier keeps in Part 5). If you have a partner or investor who expects the numbers to stay inside the business, tell them about this tool before you connect it.
Part 2: Build the Weekly tab
Create a new Google Sheet. Rename the first tab Weekly. Put these headers in row 1. Columns A to D are typed by you. Columns E to H are formulas.
| Column | Header | Filled by | What goes in it |
|---|---|---|---|
| A | Week Ending | You | The last day of the week, as a date |
| B | Net Sales | You | Net sales total for the week, digits only |
| C | Food and Beverage Cost | You | Your food and beverage cost total for the week |
| D | Labor Cost | You | Your labor cost total for the week |
| E | Prime Cost | Formula | C plus D |
| F | Prime Cost Share | Formula | E divided by B |
| G | Change vs Prior Week | Formula | F minus the row above, in percentage points |
| H | Digest Line | Formula | One line of text for the email |
Type the numbers as plain digits. Do not type currency symbols or commas into B, C and D. Keep the rows in date order, oldest at the top, with no empty rows between weeks. The formulas below look at the row directly above each week, so a gap or a shuffled order will give a wrong change figure.
Now paste each formula into row 2 and fill it down to row 200. Select the cell, copy it, select the cells below down to row 200, and paste. Rows with no data will stay blank.
E2, Prime Cost
=IF(OR(C2="",D2=""),"",C2+D2)
Blank if either cost is missing, so a half-entered week never shows a misleading prime cost.
F2, Prime Cost Share (format the column as Percent with one decimal place, using Format, then Number, then Custom number format, and typing 0.0%)
=IF(OR(E2="",B2="",B2=0),"",E2/B2)
Blank when prime cost is blank, sales are blank, or sales are zero. That last check stops a divide-by-zero error from spreading into the other columns.
G2, Change vs Prior Week (format the column as a plain number with one decimal place, using Format, then Number, then Custom number format, and typing 0.0)
=IF(OR(F2="",ISTEXT(F1)),"",(F2-F1)*100)
This reads: if this week's share is blank, or the cell above holds text, show nothing. On row 2 the cell above is the header "Prime Cost Share", which is text, so the first week stays blank. A prior week with a blank share is an empty-text result, which also counts as text, so the change stays blank rather than comparing against a missing number. The multiply by 100 turns a difference of shares into percentage points.
H2, Digest Line (this is one long formula, so paste it exactly)
=IF(A2="","",IF(F2="",TEXT(A2,"yyyy-mm-dd")&" | totals missing",TEXT(A2,"yyyy-mm-dd")&" | sales "&TEXT(B2,"0")&" | prime cost share "&TEXT(F2,"0.0%")&" | change "&IF(G2="","n/a",IF(ROUND(G2,1)>0,"+","")&TEXT(ROUND(G2,1),"0.0")&" pts")))
The date is wrapped in TEXT(A2,"yyyy-mm-dd") because a date joined into text with no wrapper turns into a serial number such as 46292. The fields are separated by " | " with no commas and no currency symbols.
Walk the formulas through three rows. Use these invented example numbers, which are for practice only and are not a target or a benchmark. The first week in the sheet is the week ending 2026-08-30, with net sales 40000, food and beverage cost 12000 and labor cost 13000.
- The first row (row 2, week ending 2026-08-30). E2 is 12000 plus 13000, which is 25000. F2 is 25000 divided by 40000, which is 0.625, shown as 62.5%. G2 checks the cell above (the header, which is text), so it stays blank. H2 shows:
2026-08-30 | sales 40000 | prime cost share 62.5% | change n/a. - A normal week (the week ending 2026-09-06, net sales 42000, food and beverage 12600, labor 13400). E is 26000. F is 26000 divided by 42000, which is 0.6190, shown as 61.9%. G is (0.6190 minus 0.625) times 100, which is about minus 0.6 points. H shows:
2026-09-06 | sales 42000 | prime cost share 61.9% | change -0.6 pts. - A row with blank sales (you typed the date 2026-10-04 and nothing else yet). E is blank because the costs are blank. F is blank because E is blank. G is blank because F is blank. H takes the second branch and shows:
2026-10-04 | totals missing. A completely empty row below it shows nothing at all, because A is blank.
Part 3: Build the Summary tab
Add a second tab named Summary. Row 1 holds five headers. Row 2 is the only data row.
| Column | Header | Row 2 holds |
|---|---|---|
| A | Key | The word summary, typed exactly, lowercase |
| B | Latest Week | Formula: the latest Week Ending date |
| C | Latest Line | Formula: the Digest Line of that week |
| D | Four-Week Average Prime Cost Share | Formula: the average share over the last four weeks, as text |
| E | Status | Formula: current, or a warning that totals are missing |
A2: type summary
B2, Latest Week (format the cell as a date through the Format menu, Number, then Date. The email does not use this cell, so a number on display is harmless)
=MAX(Weekly!A2:A200)
C2, Latest Line
=IF(B2=0,"No weeks entered yet",IFERROR(INDEX(Weekly!H2:H200,MATCH(B2,Weekly!A2:A200,0)),""))
MATCH finds the row whose Week Ending equals the latest date, and INDEX returns that row's Digest Line. Both ranges run from row 2 to row 200, so they are the same height.
D2, Four-Week Average Prime Cost Share
=IFERROR(TEXT(AVERAGEIFS(Weekly!F2:F200,Weekly!A2:A200,">="&(B2-27),Weekly!A2:A200,"<="&B2),"0.0%"),"not enough data")
This averages the Prime Cost Share of every week whose date is within 27 days of the latest week. Weeks are seven days apart, so that window catches the latest week and the three before it, and leaves out the one 28 days back. Weeks with a blank share are skipped. If nothing qualifies, the cell says "not enough data". The result is text on purpose, so Zapier carries it as written.
E2, Status
=IF(B2=0,"No weeks entered yet",IF(TODAY()-B2>13,"TOTALS ARE MISSING. The latest week ending is "&TEXT(B2,"yyyy-mm-dd")&", more than 13 days ago. Paste the latest totals into the Weekly tab.","Totals are current through "&TEXT(B2,"yyyy-mm-dd")))
If your weeks end on a Sunday, the latest week you entered is 1 or 8 days old on a given Monday, depending on whether you have entered the weekend yet. It reaches 15 days only when a whole week of totals has been skipped, so the 13-day limit warns you only then.
Walk the Summary through the example. Suppose the Weekly tab holds the weeks ending 2026-08-30, 09-06, 09-13, 09-20 and 09-27, with these invented totals.
| Week Ending | Net Sales | Food and Beverage | Labor | Prime Cost | Share | Change |
|---|---|---|---|---|---|---|
| 2026-08-30 | 40000 | 12000 | 13000 | 25000 | 62.5% | blank |
| 2026-09-06 | 42000 | 12600 | 13400 | 26000 | 61.9% | -0.6 |
| 2026-09-13 | 40000 | 12400 | 12800 | 25200 | 63.0% | +1.1 |
| 2026-09-20 | 44000 | 13200 | 13200 | 26400 | 60.0% | -3.0 |
| 2026-09-27 | 41000 | 12300 | 13900 | 26200 | 63.9% | +3.9 |
- B2 is 2026-09-27.
- C2 is
2026-09-27 | sales 41000 | prime cost share 63.9% | change +3.9 pts. - D2 covers dates from 2026-08-31 to 2026-09-27, so the week ending 2026-08-30 is left out. The four shares are about 61.9%, 63.0%, 60.0% and 63.9%, which add up to about 248.8. Divided by 4, that is about 62.2%.
- E2 on Monday 2026-10-05 says totals are current through 2026-09-27, because that Monday is 8 days after the latest week. On Monday 2026-10-12 it is 15 days after, so E2 says totals are missing.
Part 4: Build the Zap
In Zapier, create a new Zap with these steps.
- Trigger: Schedule by Zapier, Every Week. Choose a day and a morning time. Monday works if you enter the weekend's totals on Sunday night or Monday morning. If your payroll numbers arrive later, choose Tuesday instead.
- Action: Google Sheets, Lookup Spreadsheet Row. Connect your Google account, choose your spreadsheet and the Summary tab. For the lookup column choose Key and for the lookup value type
summary. This row always exists, so the step always finds it. Do not add any "not equals", "greater than" or date comparison here, because the sheet already did that work. - Optional action: AI by Zapier, Analyze and Return Data. Described in the next section. Skip it if you only want the numbers.
- Action: Gmail, Send Email. Put your own address in the To field, and only your own. Write a subject such as Weekly numbers. For the body, build it from the fields of step 2 using Zapier's insert-data menu: the Latest Line, then the Four-Week Average Prime Cost Share, then the Status. If you used the AI step, add its output above them. Use the field names, not typed copies of the numbers.
If the email body runs the lines together, look for a body type option in the Gmail step and choose plain text.
The optional AI step. The AI step turns the lines into three plain sentences. In the instructions field paste the text below. Then, where the step asks for the data to analyze, map in the Latest Line, the Four-Week Average Prime Cost Share and the Status from step 2. Exact field labels in Zapier change, so look for the instructions field and the input field.
You are writing a short note for a restaurant owner from three pieces of data: a latest-week line, a four-week average prime cost share, and a status message. Write exactly three plain sentences. Sentence one says what moved compared with the prior week, using only the figures in the line. Sentence two compares the latest prime cost share with the four-week average. Sentence three names one thing the owner could check in their own reports, such as a supplier invoice, a schedule or a spike in sales. If the status message says totals are missing, make sentence one say so and skip sentence two. Use only the figures given. Do not invent numbers, give advice about taxes or staffing, or compare to any industry figure.
Latest line: [Latest Line]
Four-week average prime cost share: [Four-Week Average Prime Cost Share]
Status: [Status]
In Zapier you replace each square-bracket label by clicking into the field and inserting the matching item from step 2. The brackets here only mark where the data goes. Zapier prints the data itself, not the label.
Test each step as you add it, then turn the Zap on.
Part 5: What Zapier receives and keeps
Zapier reads the Summary row at run time, and the values in it pass through Zapier's systems: the latest week line, the average, and the status text. Zap History stores the data each step received and returned, so your weekly sales figure and prime cost share will sit in your Zapier account's history, readable by anyone with access to that Zapier account. How long it is kept depends on your plan and settings, so check Zapier's help pages. The sheet itself stays in Google. Gmail sends the email as you.
If you use the AI step, the text you map in is sent to the AI model that Zapier runs, so the AI sees the latest line, the average and the status. It sees nothing else from the sheet, because those three values are all you map in. Read Zapier's own data terms before you use the step, or leave it out. Neither the AI step nor the rest of the Zap can see staff names or pay rates, because the sheet never holds them.
On cost, Zapier counts a task for each action step that runs successfully. The trigger is free, and an action that errors or halts does not count. The Google Sheets lookup and the Gmail send are two successful actions each week, and the AI step adds more depending on the model tier you pick. Check Zapier's pricing page for the current numbers.
Part 6: Test and refine
- Type a made-up week into the Weekly tab and watch E to H fill. Check one row by hand with a calculator.
- Check the Summary row: Latest Week, Latest Line, average and Status should match what you expect.
- In Zapier, use the Test button on the lookup step. You should see the five Summary columns come back.
- Test the Gmail step. The email should reach your inbox. Delete the made-up weeks before you go live.
- To test the "forgot to paste" case, temporarily move your most recent Week Ending dates in the Weekly tab back by a month, after noting the originals. Re-test the lookup. The Status should now start with TOTALS ARE MISSING, and the email should still arrive.
Real Example: A Monday With a Missed Week
Setup: The sheet above, a Monday 8 AM Zap, and the AI step turned on.
Input: On Tuesday 2026-09-29 you typed the week ending 2026-09-27 into the Weekly tab: sales 41000, food and beverage 12300, labor 13900 (invented example figures). The Zap runs the following Monday, 2026-10-05.
Output: The email arrives with three sentences from the AI step, then the Latest Line 2026-09-27 | sales 41000 | prime cost share 63.9% | change +3.9 pts, the four-week average 62.2% and the status "Totals are current through 2026-09-27". The note might say that prime cost share rose 3.9 points from the prior week while sales fell, that the latest week sits above the four-week average, and that you could check the week's supplier invoices and the schedule. You compare it with your own history and your accountant's view. This guide does not tell you what a good number is.
On Monday 2026-10-12 you forget to enter the week ending 2026-10-04. The Zap still runs, and the email arrives with the status "TOTALS ARE MISSING". You paste the numbers in that day.
Time saved: You spend about ten minutes a week typing totals and a couple of minutes reading the email. You see prime cost drift within days instead of waiting for the monthly P&L.
What to Do When It Breaks
- A Monday passes with no email at all (the silent failure). Zapier stays quiet when a Zap stops, so check in this order. Open Zap History in Zapier and look for Monday's run. If there is no run, the Zap is switched off or its schedule was changed. If the run says "Safely halted" at the lookup step, the Key cell no longer says
summaryexactly (someone renamed it, or a stray space crept in), or the Summary tab was renamed or deleted. If the run shows an error on a step, reconnect the Google account, because connections expire. As a habit, notice the missing Monday email the same day, because that absence is the only alarm you get. - The email says TOTALS ARE MISSING but you entered them. Check that the Week Ending cell is a real date, not text that looks like a date. Click it and use Format, then Number, then Date. Also check that you typed the actual last day of the week.
- A number looks wrong. Look for stray text in columns B to D, such as a currency symbol typed in, which turns a number into text. Also check that the rows are in date order with no gaps, because the change figure uses the row directly above.
- The change shows n/a. That is correct for the first week and for any week after a week with blank totals.
- The email shows a long number instead of a date. Some part of the sheet is joining a date without the TEXT wrapper. The Digest Line and Status formulas above already have it, so compare yours to the formulas above.
- The AI sentences contradict the numbers. The AI step can misread. Trust the Latest Line, not the sentences, and tighten the instructions or remove the step.
Variations
- Simpler version: Skip the AI step. The Zap then has three steps and the email is just your three sheet fields.
- Extended version: Add a column for covers or for a single sales channel and fold it into the Digest Line. Keep totals only, and keep each added column to a number you can paste from a report in a minute.
What to Do Next
- This week: Back-fill the last four to six weeks so the average has data from day one.
- This month: Show the sheet to your accountant and ask whether the cost and labor definitions you use match theirs.
- Advanced: Build the renewal reminder Zap next. It follows the same pattern with a different Summary tab.
Advanced guide for restaurant owner-operators. Zapier plans, task counts and app step names change, so confirm them at zapier.com before you build.