AI Adoption GuideHospitalityConfirm
Preference extraction from booking notes
NLP parses free-text booking fields to extract dietary needs, special occasions, and accessibility flags.
Hospitality processBookConfirmPrepareArriveStayDepartReviewReturn
By Don, DoneThat’s AI coach · updated
What counts as a quality extract
Each extracted preference must cite the booking-note sentence that supports it. The three fields that matter on confirm are dietary needs, special occasions, and accessibility-related flags. If the note never states one of those, that field stays empty. Do not invent a diet.
Reservations ops still confirms. The extract is a reading of this booking's free text, not a write to the guest profile and not a standing medical record.
That rule is the whole quality outcome. Everything below is how to keep it.
Property management and central reservation comments (Oracle Hospitality, Mews, Cloudbeds) and guest-messaging notes in products such as Canary are the usual sources. Treat them as a class of free-text fields attached to a reservation. Do not assume a shared schema, a shared allergen code list, or a shared preferences object. You are parsing sentences.
Load booking notes for this reservation only
Open the reservation you are confirming. Load the comment, special-request, and agent-remark fields that belong to this booking number. If a messaging thread is attached to the same stay, load it as a second source and keep the source name on every cite.
Name the source the way the desk already talks: CRS remark, PMS comment, chat transcript. If the cite cannot be opened from the reservation screen, it is not a usable cite.
Do not roll in the guest master, a cancelled duplicate booking, or a share-with adult's remarks unless those strings are actually stored on this reservation. If every note field is blank, return empty fields and stop. There is no extract.
When two fields repeat the same request, keep two cites. Deduping in the model hides which system the text came from.
If the reservation itself is missing arrival, occupancy, or rate essentials, fix completeness first. Preference text on an unworkable booking wastes the desk. Use incomplete reservation flagging as the gate.
Prior-stay and elite comments are not this note. Retrieve them separately through loyalty context retrieval so a historic pillow request does not become a cited dietary need for tonight.
Extract with a cite, then stop guessing
After the text is loaded, fill each of the three fields with either a short label plus a verbatim cite, or blank.
Stay close to the guest or agent wording. If they wrote "gluten-free breakfast," do not upgrade that to a celiac flag. If they wrote "anniversary," do not upgrade that to a honeymoon package.
Illustrative example (one booking remark, not a property case study):
"Arriving late Friday. Celebrating our 10th anniversary; can we have sparkling water in the room. Guest asked for gluten-free breakfast. Ground-floor room if you have one. Kids in connecting next door if possible."
Quality extract:
- Occasion: 10th anniversary. Cite: "Celebrating our 10th anniversary; can we have sparkling water in the room."
- Dietary: gluten-free breakfast. Cite: "Guest asked for gluten-free breakfast."
- Accessibility-related: ground-floor room. Cite: "Ground-floor room if you have one."
What you leave out: connecting rooms is inventory configuration, not a diet or accessibility extract on this page. Sparkling water is an amenity in the occasion sentence; it is not a beverage allergy. Late arrival is operations, not a preference field here.
If ops later needs the ground-floor line for housekeeping or engineering, pass the confirmed cite into guest preference-based room setup. If the sentence is about mobility equipment, a service animal, or a comparable need, treat it as an accessibility need trigger after confirm, not as a dietary code.
Empty stays empty when the note is silent
A silent note is a complete result. "No special requests" does not mean omnivore. A blank comment does not mean "no allergies." An occasion field stays empty unless the text names an event.
Do not complete a pattern. "Dietary TBC," "allergies?," or a checked box with no sentence is not a peanut allergy. "Nut-free if possible" can be cited as a nut-free request; it still is not a diagnosed peanut allergy unless the note says peanut.
If the model emits a flag and cannot point to a sentence in this booking's note, drop the flag. A flag with no sentence is a defect. Do not show ops an orphan badge and hope they reverse-engineer it.
Pulling diet from another system is invention too. A CRM diet tag, a last-year restaurant check, or a similar guest name is not a cite from this note.
Ops confirms before the stay or profile changes
Show a review list: field, proposed label, cited sentence, source field. The agent accepts, edits, or rejects each row. Keep the cite in full so the agent can read it without hunting; a truncated snippet is how a wrong-sentence cite slips through.
Reject leaves the stay field empty. Edit lets the agent correct the label while keeping a real cite. Accept is the only path that may map into the special-request codes your property already uses.
Do not treat the extract as the profile. Profiles survive the stay. A gluten-free breakfast line for Friday is not automatically a lifetime allergen. Writing unconfirmed NLP into the guest master is how a one-off remark becomes a permanent medical flag.
Confirmation is also the peanut-allergy check. The cite must contain the meaning of the label. "Gluten-free breakfast" supported by "Guest asked for gluten-free breakfast" is aligned. "Peanut allergy" supported by the anniversary sentence is not. Agents should read the sentence first.
Only confirmed values feed dining, room setup, or accessibility workflows. The extract does not auto-page F&B or engineering.
Where quality breaks if you skip a step
A flag with no sentence. Keyword maps fire on "sparkling," on an empty default, or on a leftover PMS checkbox. The desk then phones the guest about a medical issue nobody stated. Require a cite or discard.
Treating the extract as the profile. A connector writes model output into guest preferences overnight. The next stay inherits a diet nobody confirmed. You cannot later see which booking invented it. Keep extracts on the reservation until a person promotes a subset on purpose.
Inventing a peanut allergy. The note says "dietary requirements TBC," "no pork," or nothing, and the model fills the most familiar allergen. That is fabrication even if the guest later happens to have that allergy. Empty stays empty. Ops can call. The model does not guess.
Wrong-sentence cites are a quieter miss. Quoting the late-arrival clause as the occasion evidence trains the desk to ignore the queue. Quote the clause that actually states the preference, not the whole remark block.
Oracle Hospitality, Mews, Cloudbeds, and Canary remain note stores. They do not replace cited sentence or blank, then a person confirms.
Is this worth automating for you?
Whether this pays back depends on how much time it takes your team today. Most teams estimate that from memory, and the estimate is usually wrong in one direction or the other.
DoneThat reconstructs where the time actually went, with no timers to forget, so you can measure the baseline before committing to a project and check the gain afterward.
Measure the baseline first