Importing Tours from Spreadsheets

A tour is two sheets, not one: the tour itself, and its day-by-day itinerary. They are linked by the tour’s code. This page is the whole procedure — what goes in each file, the order to upload them, and the rules the import enforces so that what lands is exactly what you wrote.

Two sheets, one tour

Both live in the Import / Export menu at the top of the Tour Manager (Tours → Tour Manager).

SheetMenu itemsWhat it carries
Tours sheetSample sheet · Export tours · Import toursThe tour itself, one row per tour: code, name, type, durations, cities, theme, highlights, inclusions, descriptions, images, flags.
Days sheetSample days sheet · Export days · Import days — replaces itinerariesThe itinerary: one row per day — city, night, the three meals, attractions, travel, sightseeing and the service flags.

Why two? A day is a record in its own right — three meals, a night, attractions, travel, several flags — and a tour has several of them. That does not fit into one row of a spreadsheet without inventing a code inside a cell that nobody can edit reliably. Suppliers have a separate properties sheet for the same reason.

A tours sheet on its own imports a tour with no days. No days means no nights, no meals and nothing to price from: the tour shows a “no day-by-day itinerary” gap instead of a price until its days arrive.

Screenshot: The Tour Manager's Import / Export menu: the tours sheet items above, the days sheet items below

The procedure

  1. Get both files. For new tours, download Sample sheet and Sample days sheet — each has one example row, and both use the same placeholder code. For existing tours, use Export tours and Export days.
  2. Fill them in. Give the tour a real code in the Code column of the tours sheet and put the same code in the Template Code column of every one of its day rows. That code is the link.
  3. Import the tours sheet first, with Import tours.
  4. Then import the days, with Import days. Order matters: a days sheet never creates a tour, it only fills one that already exists. Before anything is replaced, the import shows how many tours and days the file holds, how many rows it will skip and why, and any columns it will not read — and asks you to confirm.

Open the tour afterwards (the calendar button on its row) and check the Day-by-Day Itinerary on the Details tab: the day count, and each day’s meals, should read exactly as your sheet said.

The tours sheet

Required columns are Code, Name, Type and Duration Days. The rest are optional: Duration Nights, Duration Hours, Accommodation Nights, Cities, Destinations, Theme, Physical Level, Age Suitability, Best For, Highlights, Main Attractions, Inclusions, Exclusions, Short and Long Description, Image URL, Gallery URLs, Default Transport Service, Transport City, Pickup Required, Featured and Active.

  • Lists — cities, highlights, attractions, inclusions, best-for and the like — are separated with a semicolon (a | also splits, so keep it out of the text).
  • Type, Theme, Physical Level, Best For come from your vocabulary. You may type either the word you see on the form (“Day Tour”) or its key (day_tour). A value that matches nothing is refused by name, with your valid options listed — never stored as something the form cannot show.
  • Numbers are whole numbers; Featured, Active, Pickup Required take true or false (yes / no and 1 / 0 also work). Anything else — “two”, “2.5”, “ture” — refuses the row rather than being read as nothing or as false.
  • Image URL and Gallery URLs are the only way to give a tour pictures: the Tour Manager form has no image field.
  • Meals Included is written on export and ignored on import. It is worked out from the days, so it can describe the tour but never contradict it. Meals belong on the days sheet.
  • Column headers are forgiving (“Tour Code”, “Days” are accepted) and order does not matter. Columns the import does not read are named in the result, never silently dropped.

The days sheet

Required columns are Template Code and Day. Days for one tour must run 1, 2, 3 … with no gaps or repeats (row order does not matter; the set must be whole).

Every meal, every day, stated

A meal is a cost line and part of the agreement with the customer, so each of Breakfast, Lunch and Dinner must be one of three words on every row. A blank cell is refused, not read as “none”.

ValueMeaningPriced?
includedIn the hotel or cruise rate (board basis)Inside the room rate
externalYou take the group to a restaurantYes — per person, from your meal rates
noneNot provided; the customer’s own arrangementNo
external is a cost, not “own expense” — own expense is none. Any meal can be at a restaurant, breakfast included: guests who land before check-in eat somewhere.

Every day says whether it has sightseeing

A day lists its Attractions, sets Guide to true, or puts none in Sightseeing. A day that does none of these is refused — a departure day included, so give it none. Saying none while listing attractions or a guide is refused too. A day in the air is exempt. (A sheet saved before the Sightseeing column existed is not held to this rule.)

The other columns

  • Title and Description — the day’s heading and text.
  • City — one city. “Cairo; Luxor” is refused: a day that travels is in the city it ends in.
  • Accommodation — hotel, cruise, none, or in_the_air for an overnight flight. Nights are counted from these, not from Duration Nights. A departure day is none. A blank means the day does not say, and pricing works it out.
  • Attractions — names, semicolon-separated, matched to your attraction rates by name.
  • Transport — road (the default), flight, train or sleeping_train. A flight or day train runs from the previous day’s city into this one; a sleeping train leaves this day’s city for the next. Leg From / Leg To give a ticket its own route, and are refused on a road day.
  • Assist At Departure / Arrival — yes or no, airport assistance on a flight day only.
  • Transport Lines, Road Transfers, Cruise Boarding Assist, Cruise Leaving Assist, Local Transfer, Day Trip From, Sightseeing Length — the same settings as the day editor in the Tour Manager. Blank leaves them to the usual rules.
  • Airport Arrival / Departure, Hotel Check-in / Check-out, Guide — true or false (yes / no and 1 / 0 also work). Anything else refuses the row.

What the import will and will not do

  • Tour rows update by code. An existing code is updated; a new code is created. Codes match whatever their letter case. Re-importing never touches days you have already built.
  • A blank cell clears the field; a missing column leaves it alone. Clear Image URL in an exported sheet and the tour loses its image; leave the column out of the sheet and the image stays. (A blank Duration Nights reads as 0; a blank yes/no column keeps its value.)
  • A days sheet replaces the whole itinerary of every tour it names, and leaves every tour it does not name alone. Export fresh before editing rather than reusing an old file.
  • One refused day refuses its whole tour. Writing the other days would delete the refused one, so that tour keeps its current itinerary until the sheet is fixed.
  • Nothing is guessed. A row with a problem is refused with the reason, and the rest of the file still imports. The result names the first reason; fix it and import again to see the next.
  • The example row is skipped. Any code beginning EXAMPLE- is ignored, so uploading a sample unedited creates nothing — and if every row is still an example, the import says so rather than reporting “nothing to do”.
  • A code may appear once in a tours sheet; a repeat is refused.
  • Codes are yours. Two organizations can use the same tour code without colliding.
  • Who can import: admins and managers, like the rest of the Tour Manager.
Tour ManagerNext: Transport Packages