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.
Please be sure to save your spreadsheet in CSV format. Other formats are not supported.
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):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.
The name the room is booked under.
The check-in date. Most common date formats are accepted and normalised automatically.
The check-out date. Must be after the arrival date.
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).
Number of guests. Numeric values only.
The channel the booking came from, e.g. Booking.com or Expedia.
The booking total. Currency symbols and commas are ignored, e.g. "$1,240.00" is read as 1240.00.
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.
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.
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.
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.
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.
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.
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.
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.
A temporary problem prevented the upload. Wait a moment and try again. If it keeps happening, email [email protected].