All guides

    Evidence-reviewed guide

    Hotel Board Basis and Meal Plans Across OTAs

    How board basis behaves as a rate-level code rather than a property fact, why the published content models have structured fields for breakfast and all-inclusive but nothing for half or full board, and how to audit a meal plan across channels without reading a scope difference as an error.

    Reviewed by Lotte · Editorial owner: MisMatchMaker AI · Published 6 October 2026 · Evidence reviewed 6 October 2026

    Direct answer

    Board basis is a property of the rate plan, not of the hotel, so two channels showing different board codes can both be correct. Audit it by establishing which rate plan each listing was displaying, then comparing what the code includes - which meals, on which days, for whom, and whether drinks are part of it. Expect the structured data to help only at the ends of the range: the reviewed content models carry fields for breakfast and for all-inclusive, and none of them has a field for half board or full board.

    Key takeaways

    • Board basis belongs to the rate plan, so an inclusion difference between channels is usually scope, not error.
    • Google's lodging schema has fields for breakfast and for all-inclusive, and no field for half board, full board, lunch, or dinner inclusion.
    • Booking.com configures meals in two separate places - a price payable on arrival, and the meals row of a rate plan.
    • Half board is therefore published as prose on most channels, which is why it is the least consistent board code.
    • A board code with no stated basis - per person, which days, drinks or not - is an incomplete answer however consistently it appears.

    Board basis is a rate-level code, not a property fact

    Room only, bed and breakfast, half board, full board, all-inclusive. These read like descriptions of a hotel and they are not - they are descriptions of a rate plan. The same property can legitimately sell a room-only rate, a bed-and-breakfast rate, and a half-board rate on the same night, and whichever one a channel happens to display becomes the board basis a guest believes the hotel offers.

    Booking.com makes the split explicit in where it puts the settings: a meal payable by guests on arrival is configured under the property's facilities and services, with a price per person per day, while a meal included in a specific rate is configured in the meals row of that rate plan under rates and availability. Those are two different screens expressing two different facts, and both can be true at once.

    This is why the board-basis audit has a step the other field audits do not. Before comparing anything, establish which rate plan each public page was displaying when the evidence was captured - and note that this can change with the dates, occupancy, and length of stay searched. Skip that step and the audit manufactures conflicts out of a property doing nothing wrong.

    • A board code describes a rate plan, so two channels can disagree and both be right.
    • Booking.com splits meals into a property-level price on arrival and a rate-level inclusion.
    • The displayed plan can change with dates, occupancy, and length of stay.
    • Record the rate plan beside every captured board value, or the comparison is not meaningful.
    • The real errors are narrower: a plan whose name promises a meal that is not attached to it.

    The structured gap: there is no half-board field

    Board basis is unusual among listing fields in that the structured data runs out in the middle. Google's lodging schema carries fields for whether breakfast is offered to all guests, whether it is free, whether it is a buffet, and whether the property has an all-inclusive rate option or sells all-inclusive only. It carries no field for half board, full board, demi-pension, lunch inclusion, or dinner inclusion. Expedia Group's content reference lists, which document amenities, attributes, categories, payment types, and several other lists, document no meal-plan reference list at all.

    So the two ends of the range are structured and the middle is not. A property selling room-only or all-inclusive can express that in data. A property selling half board has to express it in a rate-plan name, a description, or policy text - which is to say, in prose that no automated comparison and no guest-facing filter can read reliably.

    That is the mechanical reason half board is the least consistently published board code, and it is worth stating plainly to anyone who asks why their dinner-inclusive rate keeps being misunderstood. The data model does not have a place to put it. The practical response is to write the inclusion into the rate plan name and the description in consistent words, decided once, and to treat that wording as a field under change control rather than as copy.

    Note what does exist in data: Booking.com's accommodation details return meal prices for breakfast, lunch, and dinner. Prices for the individual meals are modelled even where the board code combining them is not, which gives you somewhere consistent to put the lunch and dinner facts even on a channel that cannot express full board.

    What the reviewed content models express about meals
    Board codeStructured field availableWhere it ends up instead
    Room onlyImplied by the absence of an inclusionRate plan with no meal attached
    Bed and breakfastYes - breakfast availability and free-breakfast fieldsRate-level meal inclusion
    Half boardNo dedicated field in the reviewed modelsRate plan name, description, policy text
    Full boardNo dedicated field in the reviewed modelsRate plan name, description, policy text
    All-inclusiveYes - all-inclusive available and all-inclusive onlyProperty attribute plus rate plan
    Individual meal pricesYes - breakfast, lunch and dinner prices in Booking.com dataProperty-level meal price payable on arrival

    What a board code has to specify to be auditable

    Two channels can publish the identical words 'half board' and still be selling different things. Half board normally means breakfast plus one other meal, but which meal, whether drinks are included, whether it covers the departure day, and whether children are charged differently are all unstated by the code itself. A guest who books half board expecting dinner with a drink and finds dinner without one has been misled by a listing that was perfectly consistent.

    So the approved record needs to carry more than the code. Decide and write down which meals are included, the basis on which they are charged or credited, what happens on arrival and departure days, whether a drinks allowance is part of it, what the child basis is, and which venue serves it. Then publish those details in the same words everywhere, so the comparison across channels is a comparison of the same statement.

    Where a channel has no field for any of this, it goes in the description. That is not a workaround to apologise for - it is the only place the information can live on a model that stops at breakfast, and it is far better than letting the desk explain it on arrival.

    • State which meals the code includes, by name.
    • State the basis: per person per night, and the child basis separately.
    • State what happens on the arrival and departure days.
    • State whether any drinks are included, and which.
    • State the venue, and the serving times if they are restricted.
    • Publish the same wording on every channel and keep it under change control.

    Why board basis goes stale

    The dominant cause is the promotion that is only half unwound. A dinner-inclusive package runs for a season, the campaign ends, and the rate plans are retired on the channels the campaign ran on - but the property-level meal attribute, edited at the same time and owned by somebody else, stays as it was. The listing goes on describing a board basis the property stopped selling.

    Seasonal operation produces the same drift in the opposite direction. A resort that sells half board in winter because the nearest restaurant is closed, or a city hotel that drops dinner service out of season, is making a real operational change that needs to reach the listings as part of the change rather than as a separate task that may not happen.

    The third pattern is quieter and specific to this field. Because half board has no structured home, its wording lives in a rate plan name typed by hand - so it gets retyped, abbreviated, and translated inconsistently across channels over the years. Nobody made a mistake; the field simply has no single value anywhere to be the one that is right.

    • A package ends and the rate plan is retired while the property-level meal attribute is not.
    • Seasonal service changes reach some channels and not others.
    • Hand-typed rate plan names diverge across channels because no structured field holds the code.
    • A rate plan is republished and loses its attached meal.
    • An all-inclusive attribute is set at property level while only some rate plans are actually all-inclusive.

    A repeatable board-basis audit

    Fix the search before capturing anything: the same dates, the same occupancy, the same length of stay on every channel. Then record the board code, the rate plan it belongs to, the exact wording, and the URL. Only with the rate plan recorded can you tell a conflict from a scope difference, which is the distinction this field lives or dies by.

    Correct at the interface that owns each fact - the rate plan for inclusion, the property settings for a meal price payable on arrival - and verify the public page afterwards. A saved rate plan is not evidence that the public page now describes the meal.

    Capturing board-basis evidence that can actually be compared
    1. Fix the search

      Same dates, occupancy, and length of stay on every channel before capturing.

    2. Capture with context

      Record the code, the rate plan it came from, the exact wording, and the URL.

    3. Unpack the code

      Which meals, which days, whose drinks, what child basis - compare the details, not the label.

    4. Classify

      Genuine conflict, rate-plan scope difference, or missing evidence.

    5. Correct and verify

      Edit at the owning interface, then re-check the public page after publication.

    Frequently asked questions

    Why do two OTAs show different board basis for the same hotel?

    Most often because they are displaying different rate plans. Board basis is a property of the rate plan rather than of the hotel, so a channel showing a room-only rate and a channel showing a half-board rate are both describing the property correctly. Compare like-for-like rate plans, searched on the same dates, occupancy, and length of stay, before treating the difference as an error.

    Is there a structured field for half board on OTA listings?

    Not in the models we reviewed. Google's lodging schema carries fields for breakfast availability, free breakfast, buffet breakfast, and all-inclusive rates, but no field for half board, full board, lunch, or dinner inclusion, and Expedia Group's content reference lists document no meal-plan list. Half board therefore lives in rate plan names and description text, which is why it is the least consistently published board code.

    Where does Booking.com keep the meal settings?

    In two separate places, which is worth knowing before you go looking. A meal payable by guests on arrival sits under the property's facilities and services with a price per person per day, while a meal included in a specific rate sits in the meals row of that rate plan under rates and availability. Booking.com's accommodation data also returns meal prices for breakfast, lunch, and dinner.

    Does 'half board' mean the same thing on every channel?

    The words do; the contents do not. Half board normally means breakfast plus one other meal, but which meal, whether any drinks are included, whether it covers the departure day, and how children are charged are all unstated by the code. Publish those details in the same wording everywhere, because that is the statement a guest is actually relying on.

    Should an all-inclusive property set the attribute at property level?

    Only if it is true of the property rather than of one rate plan. Google's schema distinguishes a property that offers an all-inclusive rate option from one that sells all-inclusive only, and setting the stronger value when some rate plans are room-only publishes an inclusion the guest will not receive. Match the attribute to what every rate plan actually delivers.

    What meal information does MisMatchMaker compare?

    It compares breakfast availability, whether breakfast is included, the breakfast price, and the serving hours published on supported OTA listings. It does not compare half-board or full-board codes, because the channels do not publish them as structured values, and it cannot tell you which rate plan a platform chose to display.

    Related guides

    Related tools and references

    Hotel child policies across OTAs

    Where each channel draws the child age line, whether a free child counts against occupancy, and the family search test that shows what guests are quoted.

    Expedia Partner Central explained

    One listing, several public brands: what Partner Central controls, what Expedia Group does not document openly, and how to confirm a change landed.

    Hotel OTA listing consistency study

    Original measurements of how often a hotel's own OTA listings disagree, with the selection rule, scan window, mismatch definition and limits published in full.

    Compare the supported fields

    Run a session-only check across supported OTA listings, then confirm any change in your own source of truth.

    Run a free match check

    Not ready to scan? See a sample report or read how the check decides a field disagrees.