Sign in

Blog · Territory, capacity and quota planning · Hospitality

Customer segments for restaurants: use visits and spending

Build restaurant guest groups from identified POS or loyalty records. Compare visit frequency, check value, occasions, and repeat spending while keeping anonymous checks separate.

The short answerCustomer segments for restaurants are groups of identified guests defined by recorded visits, spending, or dining occasions. Start with a consistent guest ID in a POS or loyalty export, count completed visits over the same period, and compare net spending per visit. Anonymous checks can describe baskets and occasions, but cannot establish individual repeat behavior.

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.

Start with identified visits

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

Roll the checks up to each guest

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.

Compare segments and prove the totals

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.

Add occasion without inventing a persona

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.

Where restaurant segments go wrong

  • Anonymous checks become one guest. A blank ID is missing identity, never a shared customer record. Keep its spending in the sales reconciliation.
  • Split checks become repeat visits. Combine related checks into the visit unit before counting, if the export supports that relationship.
  • Partial histories look infrequent. A newly identified guest has less observation time than an account present from the start.
  • Large tables look like high individual spenders. A check attached to one loyalty account may include several diners. Compare cover counts only when recorded consistently.
  • Changing bands look like behavioral change. Freeze the rules for a comparison and review segment migration separately.

Compare your own restaurant guest groups in Covirage

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.

Questions people ask

Can I segment restaurant customers without a loyalty program?

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.

Should restaurant segments use average check or spending per guest?

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.

How often should restaurant customer segments be updated?

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.