Skip to content
Log in
mDOS home

The wine-pairing email that arrives 48 hours after the bottle is poured

Most hospitality marketing stacks find out about a Friday-night wine purchase on Tuesday morning. The 48-hour personalised follow-up that actually converts is an architectural problem, and it's only possible when EPOS, email engine, and CRM share a single database.

Published 10 min read
The wine-pairing email that arrives 48 hours after the bottle is poured

Last Friday evening at 8:47pm, a guest at a country house hotel ordered a bottle of Châteauneuf-du-Pape with their dinner.

Forty-eight hours later, at 8:47pm on Sunday, an email landed in their inbox. Subject line: "The Rhône reds we'd line up alongside that Châteauneuf." Inside: three wines available at the same venue, with a one-tap booking link for a Wednesday-evening wine flight in their group's private dining room. The email was personalised to their venue, branded to that venue's sub-brand, and the wines listed were the three the cellar actually had in stock that week.

The marketing team didn't write that email on Saturday. The marketing team didn't even know that guest had ordered Châteauneuf-du-Pape on Friday night. The system did all of it, autonomously, because the EPOS, the email engine, the menu engineering layer, and the venue-level stock data all live in the same database.

This article is about why that sentence ("all live in the same database") is the difference between hospitality marketing that compounds revenue per customer and hospitality marketing that performs at the depressing industry average of 22% email open rates and 1.8% conversion.

The legacy reality: data fragmented across eight systems

Most multi-site hospitality operators are running variations of the same stack. EPOS is Toast, Zonal, TISSL, Lightspeed, or ICRTouch. Email marketing is Mailchimp, Klaviyo, Dotdigital, or Marigold. Booking is OpenTable, Design My Night, ResDiary, or SevenRooms. CRM is Salesforce, HubSpot, or a bolt-on inside the booking system. Loyalty is Como, Punchh, Eagle Eye, or Paytronix. Stock is Trail App, Procure Wizard, MarketMan, or MarginEdge. Menu engineering is Avero or Restaurant365 Menu Analytics. Reviews are Birdeye, ReviewPro, GuestRevu, or Trustpilot.

Each of these is a competent product in isolation. Each was bought separately. Each has its own customer record. Each has its own login. Each charges its own per-site licence fee. And, critically, each is connected to the others via integrations, which in practice means one of four mechanisms.

The first is Zapier or Workato webhooks: fire on events, deliver elsewhere, latency anywhere from 30 seconds to 30 minutes, prone to silent failures when API contracts change. The second is nightly CSV exports: the till exports yesterday's transactions to the marketing system overnight, available in segments tomorrow morning. The third is bespoke point-to-point integrations built by an agency: fragile, expensive to maintain, broken whenever either vendor releases a major version. The fourth is manual upload: someone in head office downloads the report and uploads it to the marketing platform on Tuesday.

In all four mechanisms, the EPOS event and the marketing trigger are separated by time and by system. The bottle of Châteauneuf got opened on Friday. The marketing system finds out about it on Sunday morning at the earliest, more likely Tuesday afternoon. By then, the customer is back home in London thinking about something else.

The 48-hour wine-pairing email didn't happen in any operator running this stack. It can't happen.

What changes when EPOS and email share a database

The mDOS architecture takes a different position. There's one Postgres database. The POS module writes orders into it. The email module reads triggers from the same Postgres notification stream. The loyalty engine writes points into the guest's loyalty balance inside the same transaction as the POS close. The CRM layer reads guest profiles from the single guest record that the POS, PMS, booking widget, CMS portal, voucher engine, and review collector all write to.

When that bottle of Châteauneuf gets billed to the table, the till order being saved and the flow runner that decides what to send live in the same system: the flow engine is invoked in-process against the same database, with no webhook, no external API call, no nightly export, and no Zapier action that might fail silently. Time-delayed steps (like the wine-pairing email scheduled for 48 hours later) are advanced by a high-frequency scheduler that runs every few minutes, not an overnight batch.

Specifically, the POS close fans out two notifications. The first is a till order being completed, covering the whole basket. The second is a menu category being purchased, fired once for each distinct menu category in the basket.

That second one is the architectural detail that makes the wine-pairing scenario work. The customer's basket contained wine as a category. The flow runner sees a wine category purchase and matches it against an active flow definition: "48 hours after a wine purchase, send the wine-pairing email branched by venue stock."

That flow definition is something the marketing team built once, in the UI, in about twelve minutes. It runs forever. It runs for every venue across the estate, autonomously, with venue-level overrides on which specific wines to feature based on what's actually in stock at that venue that week.

Why no legacy stack can do this

Three architectural realities prevent it, even in operators who have spent millions on integration projects.

The first is identity reconciliation. The bottle of Châteauneuf was billed to a table. The till knows the table number. The till may or may not know which booking the table was attached to. The booking system may or may not know which CRM record matches the booking. The CRM may or may not have the customer's email address. Each hop is a join across two different vendor databases, each with its own schema, each with its own customer identifier. The probability that a transaction at the till maps cleanly to a marketable email address in a fragmented stack hovers around 40%. In unified architecture, the till knows the booking, the booking knows the contact, the contact has the email, all in one query against one database. The match rate approaches 100%.

The second is event granularity. Most legacy POS-to-email integrations send "order completed" as a single event with a JSON blob. The marketing system has to parse the blob, identify line items, classify them into categories, and decide whether any trigger should fire. This logic lives in the marketing system, written by a marketing operations specialist, fragile, untested. In mDOS, category classification happens at the POS layer. The till already knows that a Châteauneuf-du-Pape is in the wine category, because the menu engineering layer is the same system. The category purchase trigger fires with the category pre-attached. The marketing system receives a clean, typed event. No parsing. No classification logic. No fragility.

The third is the stock check. Even if a legacy operator could detect the wine purchase and trigger an email 48 hours later, they can't personalise the email to what's actually in stock at the customer's venue this week. The stock system and the email system are different products. The integration layer between them, if it exists, is point-to-point. In mDOS, the email template variables resolver pulls live stock data from the same database. The wines listed in the email are the wines available at that customer's venue on the day the email sends.

The result: an email that feels written by a sommelier, sent at the right moment, for wines the venue can actually serve. The customer books the wine flight on Wednesday. The system attributes the £180 cover back to the email, which is attributed back to the trigger, which is attributed back to the original POS event from the previous Friday. The loop closes. The marketing team can prove the revenue contribution. The CFO can see the ROI. The flow runs forever.

What this looks like at estate scale

Imagine a 200-venue group. Every Friday and Saturday night, that group sells somewhere between 8,000 and 14,000 bottles of wine. With a 60% email-marketable rate against the dining guests, that's roughly 6,000 wine-pairing emails being personalised and sent autonomously over 48 hours, each branched by venue, each targeting in-stock wines, each attributed back to revenue.

A single flow definition. Built once. Running across the entire estate. With venue-level overrides so that the country house hotel features its own cellar list while the city centre wine bar features its own. With venue-level pricing so that London markups apply automatically. With per-venue pause behaviour, so that a venue on a major refurbishment can hold its wine emails for a week without affecting the rest of the estate.

This is what "estate-wide marketing execution in twelve minutes, not weeks" actually means. It's not a marketing claim. It's an architectural consequence of having the EPOS and the email engine share a database.

The 150+ triggers question

The wine-pairing scenario uses one of the more than 150 distinct triggers wired into the mDOS flow engine. The list is hospitality-specific in a way that generic marketing platforms can't match without bespoke development.

A booking no-show: the Friday 7:30pm booking didn't arrive, so an instant recovery flow offers reasonable next-week alternatives. Late checkout granted: a hotel guest asked for late checkout, was approved, so upsell the spa treatment. Bill settled: the charge-to-room bill is paid at end of stay, so trigger the review request at the right emotional moment, not the next morning when they're checking emails on the M4. Loyalty birthday: a tier-aware birthday email with a venue-relevant offer. Voucher expiring: the gift voucher you bought your mother in November expires in 14 days. Space enquiry: someone filled in the private dining enquiry form on a venue page, the sales team gets notified and the customer gets the venue's PDF brochure, both in the same flow.

Each of these triggers exists because the data it depends on exists in the same database as the email engine. A vendor that doesn't own the PMS can't trigger on a late checkout being granted. A vendor that doesn't own the POS can't trigger on a bill being settled. A vendor that doesn't own the booking system can't trigger on a space enquiry. The unified architecture isn't a feature. It's the prerequisite that makes all 150+ triggers possible.

What to ask your current stack

If you're running a multi-site hospitality operation today, three questions test whether your current stack can do what we've described.

How long is the latency between a POS transaction and the email engine being able to act on it? If the answer involves overnight batches, CSV exports, or Zapier, the wine-pairing scenario is impossible at your operation.

What percentage of POS transactions map cleanly to a marketable email address in your CRM? If the answer is below 60%, identity reconciliation is leaking marketing opportunity at every shift.

How long does it take your marketing team to build a new automated flow, end-to-end, including the segmentation and the venue-level overrides? If the answer is "weeks" or "needs developer time," your team is doing operational work the architecture should be doing for them.

These three questions aren't marketing questions. They're architectural questions. And they determine whether your stack can do what guests in 2026 will increasingly expect: hospitality marketing that feels considered, timely, and personal, because the system noticed the bottle they ordered before they finished pouring it.

See mDOS with your own business

A 30-minute call with one of our experts, built around what you want to fix first.

Book a demo

About the author

Ross Crawford
Founder, Mr Digital

Ross Crawford is the founder of Mr Digital and mDOS, and a Fellow of the Chartered Institute of Marketing (FCIM). He has worked in hospitality marketing since 2008, when he started at Fuller’s.

  • Fellow of the Chartered Institute of Marketing (FCIM)
Written by the people named above. Facts and figures are checked against their sources before publishing. Our editorial standards

Keep reading