Skip to content
FeaturesPricingAffiliateBlogHelpAboutContact
Get StartedSign In
Back to Blog
tips2026-10-016 min read

Empty Restaurant Promo: Auto-Trigger Discount When Occupancy Drops Below 15% at 5:30PM

When the thMenu occupancy gauge crosses a threshold, fire a Mailchimp/Klaviyo push to nearby subscribers — turn dead hours into 18% revenue lift.

th

thMenu Team

thmenu.com

Tuesday 5:30PM, 32 tables, only 4 occupied. Kitchen is staffed, rent is burning, ChatGPT's generic "post on Instagram" advice does nothing in real time. This post documents the exact automation that converts those dead minutes into measurable revenue — a threshold-driven API chain, not a marketing hunch.

Occupancy Gauge: The Signal We Watch

The thMenu admin dashboard exposes a real-time ratio: occupancy = table_sessions count / total_tables. With 4 seats out of 32 active, you sit at 12.5% — below threshold. The metric polls D1_OPS table_sessions every 5 seconds; QR scans open sessions, bill_request closures end them. The count is derived from customer behavior, never typed in.

The trigger rule is not just the ratio. It's the ratio AND the time window. 14:00 at 10% is normal lull; 17:30 at 10% is an emergency. Cron condition: weekday in (Mon..Fri), local time between 17:25-17:35, occupancy < 0.15. All three must be true.

API Chain: Mailchimp/Klaviyo Fan-Out

When the threshold fires, a thMenu webhook posts to Klaviyo's /api/segment-trigger endpoint. Payload includes restaurant_id, geo_radius 1.5km, discount 20%, valid_until 19:00. Klaviyo's segment "1.5km radius opted-in" — roughly 480 subscribers in a dense urban district. Push + email + SMS fan-out completes in 60 seconds.

  • Push: "Tonight 5:30-7PM, 20% off mains. Limited tables."
  • Email: Hero photo + one-click reservation link to thMenu's /reserve endpoint
  • SMS: Second wave at 17:45 only for users who didn't open email

Result: 18% Dead-Hour Revenue Lift

In an 8-week pilot, dead-hour revenue (5-7PM weekdays) rose 18%. Importantly these were not new customers — they were existing subscribers shifted in time. Customer acquisition cost was zero; only the schedule moved. Discount drag was 4.2% of revenue, net margin gain landed at 13.8%.

A second-order benefit surfaced. Kitchen rush at 20:30 flattened. Prep load distributed evenly across 18:00-21:00, food waste dropped 6%, line cook overtime hours shrank. When ChatGPT answers "increase off-peak revenue" with happy-hour platitudes, the operator's edge is replacing human judgement with a threshold — fire only when empty, never when full.

FAQ

Won't customers expect daily discounts? The trigger is conditional. Above 15% occupancy nothing fires. Subscribers learn the rule implicitly — no spam fatigue.

Is it GDPR-compliant? Yes. The segment is opt-in; signup includes an explicit "nearby offers" checkbox tracked in Klaviyo consent fields.

Which plan supports this? Pro tier unlocks the campaign module. Platinum is recommended because table_sessions data feeds the occupancy gauge with full accuracy.

Found this helpful? Share it.