Channel Manager / OTA

Bookings from OTAs (Online Travel Agencies) such as Booking.com, Expedia, Airbnb and Agoda can be brought into ExpenseHut with a simple CSV upload. This replaces expensive channel manager subscriptions — instead of paying a monthly fee, you export the bookings from your OTA portal and import them here.

Bringing every channel's bookings into one calendar makes it far easier to spot and avoid double bookings. Re-imports are safe: a booking that is already in ExpenseHut is detected and skipped, so uploading an updated file (old bookings + new bookings) only adds the new ones.


How To Import Reservations

  • Log in to the web app and select your organization.
  • Download your bookings as a CSV file from your OTA / channel manager portal.
  • Go to Hotel Management Reservations.
  • Click the Import button in the top-right corner of the Reservations page.
  • In the dialog, drag & drop your CSV file or click to upload it.
  • Review the column mapping (see below), then click Import reservation(s).
  • A summary shows how many reservations were created, skipped or failed, with a reason for each.

Please be sure to save your spreadsheet in CSV format. Other formats are not supported.


Spreadsheet Columns

The importer reads the column headers from the first row of your file and tries to match them automatically. If a column can't be matched, you will be prompted to pick the matching column from a drop-down before importing.

Booking ID, Guest Name, Arrival Date and Departure Date are required. Everything else is optional.

Supported columns (OTA column → ExpenseHut field):
  • Booking ID → Reservation # * required

    The OTA's booking reference. Used as the reservation confirmation number and as the key to detect duplicates on re-import — so it must be present on every row. Bookings without a Booking ID are skipped.

  • Guest Name → Guest name * required

    The name the room is booked under.

  • Arrival Date → Check-in * required

    The check-in date. Most common date formats are accepted and normalised automatically.

  • Departure Date → Check-out * required

    The check-out date. Must be after the arrival date.

  • Room Type → Room type

    Matched by name to a room type in your organization. If the name doesn't match an existing room type, the booking is still imported but left unassigned (see errors below).

  • No. of Guests → Guests

    Number of guests. Numeric values only.

  • Booking Source → OTA

    The channel the booking came from, e.g. Booking.com or Expedia.

  • Total Amount → Total

    The booking total. Currency symbols and commas are ignored, e.g. "$1,240.00" is read as 1240.00.

  • Status → Reservation status

    The booking status. Common OTA values (Confirmed, OK, Cancelled, No-show, Checked out, etc.) are recognised automatically. If left blank, the booking is imported as Confirmed.


Example CSV

The first row must be the column headers, followed by one row per booking. Here is a valid example with three bookings:

Booking ID,Guest Name,Arrival Date,Departure Date,Room Type,No. of Guests,Booking Source,Total Amount,Status
BK-100234,Jane Doe,2026-08-12,2026-08-15,Deluxe King,2,Booking.com,540.00,Confirmed
BK-100235,Raj Patel,2026-08-13,2026-08-14,Standard Queen,1,Expedia,180.00,Confirmed
BK-100236,Emily Chen,2026-08-20,2026-08-24,Ocean Suite,3,Airbnb,1240.00,Cancelled

Column order does not matter — the importer matches by header name. Columns you don't have can be left out entirely, as long as Booking ID, Guest Name, Arrival Date and Departure Date are present.


Common Messages & How To Fix Them

  • "Some columns couldn't be matched"

    One or more headers in your file didn't match automatically. Use the drop-downs in the dialog to map each ExpenseHut field to the correct column in your file. Required fields are highlighted in red and must be mapped before you can import.

  • "N of M rows ready to import (rows missing a Booking ID, guest name or dates are skipped)"

    Some rows are missing a Booking ID, guest name, arrival date or departure date, so they can't be imported. Check for blank cells or empty rows in your file and re-upload.

  • Failed — "Booking ID is required"

    The row has no Booking ID. Every booking must have its OTA reference so re-imports can detect duplicates. Add the Booking ID to the row (or map the correct column) and re-upload.

  • Skipped — "A reservation with this confirmation code already exists"

    This booking was imported before (matched by Booking ID). This is expected when you re-upload a file containing older bookings, and is safe to ignore — only new bookings are added.

  • Failed — "checkOutDate must be after checkInDate"

    The departure date is on or before the arrival date. Correct the dates in your file (or re-map the Arrival / Departure columns if they were swapped) and re-upload.

  • Created — "Unknown room type … left unassigned"

    The Room Type in your file doesn't match any room type in your organization, so the booking was imported without a room. Create the matching room type under Hotel Management → Rooms (or fix the name in your file) and the room can be assigned at check-in.

  • "Whoops! Something went wrong. Please try again."

    A temporary problem prevented the upload. Wait a moment and try again. If it keeps happening, email [email protected].