Blog · Territory, capacity and quota planning · Hospitality
Build restaurant guest groups from identified POS or loyalty records. Compare visit frequency, check value, occasions, and repeat spending while keeping anonymous checks separate.
Customer segments for restaurants work best when they group identified guests by recorded visit frequency, net spending, and occasion. Build the history from a POS or loyalty export, then compare the groups against the same dates. Keep anonymous checks outside individual guest histories.
The useful result is a small table the restaurant team can act on: which guests return, what their checks are worth, and which occasions account for their spending. Labels such as busy professional or adventurous diner do not follow from a receipt.
Export completed checks with check ID, stable guest ID, business date, occasion, location, and net sales. Include the same locations throughout the period. Keep voids and refunds visible until their treatment is agreed, rather than allowing canceled checks to become visits.
Use food and beverage sales after discounts and refunds. Exclude tips and tax collected for the government from this management comparison. The IRS explains that sales taxes imposed on buyers and collected for remittance are excluded from gross receipts. Reconcile your chosen sales basis with finance before comparing groups.
A guest ID must mean the same account on every date. Do not infer identity from a shared surname or card suffix. An ordering account may also represent a household; call it an identified account where that is the actual unit.
This illustrative US restaurant uses September 2026. Each completed check represents a separate visit; there are no split checks or refunds. Put these rows on a sheet named Checks, with headers in row 1 and columns A:E as shown. The blank cells in Guest ID are genuinely empty.
| Check ID | Guest ID | Business date | Occasion | Net sales (USD) |
|---|---|---|---|---|
| C01 | G01 | September 2, 2026 | Lunch | 30 |
| C02 | G01 | September 9, 2026 | Lunch | 36 |
| C03 | G01 | September 20, 2026 | Dinner | 54 |
| C04 | G02 | September 4, 2026 | Lunch | 24 |
| C05 | G02 | September 18, 2026 | Lunch | 26 |
| C06 | G03 | September 12, 2026 | Dinner | 90 |
| C07 | G04 | September 5, 2026 | Dinner | 60 |
| C08 | G04 | September 25, 2026 | Dinner | 80 |
| C09 | September 15, 2026 | Lunch | 20 | |
| C10 | September 28, 2026 | Dinner | 80 |
On a Guests sheet, list G01 through G04 once in A2:A5. In Google Sheets, COUNTIFS counts records matching criteria, while SUMIFS sums the matching values. Covirage is not affiliated with Google.
Use B for visits, C for net sales, D for average check, and E for the segment:
B2 =COUNTIFS(Checks!$B$2:$B$11,A2)
C2 =SUMIFS(Checks!$E$2:$E$11,Checks!$B$2:$B$11,A2)
D2 =IF(B2=0,"",C2/B2)
E2 =IF(B2>=3,"Regular",IF(B2=2,"Returning","Single visit"))
Fill down. These thresholds are an example for this period, not an industry standard.
| Guest ID | Visits | Net sales (USD) | Average check (USD) | Segment |
|---|---|---|---|---|
| G01 | 3 | 120 | 40.00 | Regular |
| G02 | 2 | 50 | 25.00 | Returning |
| G03 | 1 | 90 | 90.00 | Single visit |
| G04 | 2 | 140 | 70.00 | Returning |
| Total | 8 | 400 | 50.00 |
Average check is sales divided by checks, so the total is 400 / 8 = $50.00. It is not an average of the guest averages. Establish a comparable window before choosing a normal level for each group.
List the segment labels in A2:A4 on a separate Summary sheet. Count guests from the Guests sheet, rather than counting transaction rows:
B2 =COUNTIFS(Guests!$E$2:$E$5,A2)
C2 =SUMIFS(Guests!$B$2:$B$5,Guests!$E$2:$E$5,A2)
D2 =SUMIFS(Guests!$C$2:$C$5,Guests!$E$2:$E$5,A2)
E2 =IF(C2=0,"",D2/C2)
| Segment | Guests | Visits | Net sales (USD) | Average check (USD) |
|---|---|---|---|---|
| Regular | 1 | 3 | 120 | 40.00 |
| Returning | 2 | 4 | 190 | 47.50 |
| Single visit | 1 | 1 | 90 | 90.00 |
| Total | 4 | 8 | 400 | 50.00 |
The guest count reconciles as 1 + 2 + 1 = 4. Visits reconcile as 3 + 4 + 1 = 8. Sales reconcile as 120 + 190 + 90 = $400. Anonymous sales are 20 + 80 = $100, so identified plus anonymous sales equal all checks: 400 + 100 = $500.
Identified sales coverage is 400 / 500 = 80.0%. Three identified guests visited more than once, so the within-period repeat-guest rate is 3 / 4 = 75.0%. Their spending is 120 + 50 + 140 = $310, or 310 / 400 = 77.5% of identified sales. Those percentages describe identified accounts only. Percentages are rounded to one decimal; check values use two decimals.
G01 bought both lunch and dinner. Retain that evidence rather than assigning the account permanently to one occasion. Identified lunch spending is 30 + 36 + 24 + 26 = $116; identified dinner spending is 54 + 90 + 60 + 80 = $284. Together they reconcile to $400.
This supports a lunch-versus-dinner review of actual spending. It does not establish why the guest came. Keep multiple customer segments separate when frequency groups and occasion tags overlap.
Operations owns the visit definition and POS reconciliation. Marketing can use the verified groups to choose a measured follow-up. Compare later visits over an equal follow-up window before attributing change to an offer. Spending history alone does not establish restaurant customer acquisition cost.
Bring a sample of your own POS or loyalty export with stable guest IDs, completed checks, dates, and net sales. Covirage maps the columns, its tools compute and check group counts and spending, and the external AI model explains the results with every figure traced to its rows. Create a free Covirage account and bring your own file.
See Covirage for hospitality for the supporting industry context.
Yes, if another source supplies a reliable guest identifier across completed visits. Reservation or ordering records may help when their IDs match the checks. If no stable identifier exists, group transactions by occasion, location, or basket and label the result as transaction analysis.
Use the measure your export supports. Average check divides net sales by completed checks. Spending per diner requires a reliable cover count. A loyalty account attached to a table check identifies an account, so it does not establish what each diner personally spent.
Refresh them on a consistent operating schedule after checking the latest sales export. Keep the observation window and thresholds unchanged when comparing results. Review new guests separately because someone observed only near the period end has had less opportunity to return.