ChatGPT for Travel Agents: Group Trip Info Packs and Departure Emails

Coding Liquids tutorial cover featuring Sagnik Bhattacharya for ChatGPT for Travel Agents: Group Trip Info Packs and Departure Emails.
Coding Liquids tutorial cover featuring Sagnik Bhattacharya for ChatGPT for Travel Agents: Group Trip Info Packs and Departure Emails.

Load the supplier confirmations into one ChatGPT Project and have it pull every fact into a table with the source line beside it. Draft the pack and the departure emails from that table alone, then check each line against the original document and strike whatever the table can't support before the group sees it.

That order is the whole pipeline: documents, then facts, then drafts, then a liability check, then sign-off. It is written for the agency owner rather than the traveller, so it covers what consumer trip-idea prompts rarely touch: promises the pack makes that no supplier document backs, and what to do when a supplier changes something after the pack has gone out. Visa and entry rules are left out on purpose. The pack points to official sources instead.

Follow me on Instagram@sagnikteaches

The worked example is a 26-traveller group on a six-night beach holiday, with one hotel, one transfer company, one excursion supplier and flights ticketed separately. The figures and outputs are illustrative. For the paperwork around departure, pre-departure document packs with AI is the sibling piece, and what a travel agent must check before sending an AI itinerary covers single-client trips.

Connect on LinkedInSagnik Bhattacharya

Stage 1: redact, then load the supplier documents

Everything downstream is only as good as the documents, so choose them first: the hotel confirmation and its terms, the transfer voucher, the excursion voucher, your group payment schedule and your own terms of business. Five files for the example trip. A ChatGPT Project holds them with the instructions. As of October 2026 OpenAI's help page lists 5 files on Free, 25 on Go and Plus and 40 on Pro and Business, with up to 10 uploaded at once, and the project's own instructions take priority over your general ones. If a trip has more documents than your plan allows, merge them into one file per supplier.

Subscribe on YouTube@sagnikteaches

Before uploading, strip what no step needs. Confirmations carry names, booking references and sometimes passport or health details, and none of that helps ChatGPT build a pack.

Remove or replaceReplace withWhy
Passport numbers and dates of birthNothingIdentity data that no step uses
Traveller namesRoom codes such as R1 to R13The pack needs the rooming structure, not the people
Medical, dietary or mobility details per personCounts only: "1 step-free room"Health information tied to nobody
Booking references and portal logins[REF-H1], [REF-T1], [REF-X1]Keeps credentials out of chats
Travellers' phone numbers and emailsNothingNot needed for drafting

Scanned or photographed documents deserve extra suspicion, because text read from an image can swap a digit. That's one more reason Stage 4 compares the final pack with the originals rather than trusting the extraction. If your clients' contracts restrict sharing documents with software tools, settle that before you start; tracking supplier payment and release deadlines with AI is a useful companion once the documents are in order.

Stage 2: the facts table everything else is drafted from

The facts table is the pipeline's single source of truth. One row per fact, each with the document and section it came from, and two special statuses: CONFLICT where two documents disagree and MISSING where a pack would normally need something no document states. The prompt forbids filling gaps from general knowledge, which is the habit that puts "airport pick-up included" into a pack when nobody sold one.

Read the five supplier documents in this project. Build a facts table with one row per fact and these columns: ID (T1, T2 ...), ITEM, FACT, SOURCE (document name and section or heading), STATUS. Rules: record only what a document states. Where a document uses a word that matters (included, not included, shared, private, non-refundable, subject to), quote it in the FACT column. If two documents disagree, put both values in the row and set STATUS to CONFLICT. If something a group pack normally needs is not stated anywhere, add a row with FACT "not stated" and STATUS MISSING. Never fill a gap from general knowledge.

Sample output, nine rows of the full 40 (illustrative):

IDItemFactSourceStatus
T1Hotel check-inFrom 15:00Hotel confirmation, ArrivalStated
T2Hotel check-out11:00 on the confirmation; 12:00 in the hotel termsHotel confirmation; hotel terms, DepartureCONFLICT
T3Rooms13 twin or double rooms, breakfast "included"Hotel confirmation, Booking summaryStated
T4Airport transfer"Shared shuttle", about 50 minutes; driver meets the group at arrivals with a name boardTransfer voucher, ServiceStated
T5Transfer luggageOne suitcase and one cabin bag eachTransfer voucher, ConditionsStated
T6Boat tripDay 3, meet 09:30 at the marina; lunch "not included"Excursion voucher, DetailsStated
T7Boat trip cancellation"Non-refundable" within 7 days of the tripExcursion voucher, ConditionsStated
T8Group balance due70 days before departureAgency payment scheduleStated
T9Late-arrival hotel policyNot statedMISSING

Two rows need work before any drafting starts. T2 is a conflict between the hotel's confirmation and its own terms, so ask the hotel which is right, get the answer in writing, and record it as a new row. T9 is the kind of gap a group asks about at 23:00 on departure night: a flight landing after midnight and no word on whether the room is held. The row doesn't answer it; it just stops you answering it from memory.

Then the step that can't be skipped: read all 40 rows against the original documents. It takes about half an hour. Every later error that traces back to a table row is an error you chose not to catch here, and every error that doesn't trace to a row was introduced downstream, which is far easier to find.

One housekeeping rule saves confusion. When a supplier sends a revised confirmation, upload it under a new file name and tell ChatGPT in the prompt to treat the older version as superseded. Otherwise the table may quote both and report a CONFLICT that is really just history, and you'll waste a morning chasing a disagreement that no longer exists.

Stage 3: the pack, drafted with a source tag on every claim

The pack is drafted from the table and nothing else, and the prompt adds a rule that turns checking from a reading exercise into a lookup: every sentence that states a time, quantity, inclusion, limit, price or condition must end with its row ID. No ID, no such sentence. The tags come out before the pack is sent, but they let a second person verify a sentence in ten seconds.

Draft the group information pack from the facts table only. Sections: Trip at a glance; Key dates and payments; Your hotel; Transfers; Your boat trip; What is not included; Documents and entry requirements; Contacts; If something changes. Rules: every sentence that states a time, quantity, inclusion, limit, price or condition ends with its table ID in square brackets, for example [T1]; a sentence without an ID may not state any of those things. Copy the words included, not included, shared and non-refundable exactly as quoted in the table. For any row marked CONFLICT or MISSING write "to be confirmed" and the ID. In "Documents and entry requirements" insert [STANDARD ENTRY-REQUIREMENTS PARAGRAPH] and write nothing else. Put "Information correct as at [date]" at the top.

Sample output, three sections (illustrative):

YOUR HOTEL
Check-in is from 15:00 [T1]. Check-out time is to be confirmed [T2]. You'll stay in a twin or double room with breakfast included [T3].

TRANSFERS
A driver will meet the group at arrivals with a name board [T4]. The transfer is a shared shuttle of about 50 minutes [T4]. Each traveller may bring one suitcase and one cabin bag [T5].

YOUR BOAT TRIP
Meet at the marina at 09:30 on day 3 [T6]. Lunch is not included [T6]. The trip is non-refundable within 7 days of the date [T7].

DOCUMENTS AND ENTRY REQUIREMENTS
[STANDARD ENTRY-REQUIREMENTS PARAGRAPH]

What the tags prevent is easy to picture. Left to its own fluency, a draft writes "enjoy a relaxing private transfer to your hotel", which sounds like every holiday brochure and contradicts the voucher's "shared shuttle". It can also round "about 50 minutes" into "under an hour", and turn "breakfast included" into "breakfast every morning", which the confirmation never said. With a tag requirement, each of those becomes a sentence that cites a row, and a row that says something different.

Notice what the prompt does with entry requirements: it inserts a standard paragraph and writes nothing else. That paragraph is yours, written once with your adviser, and it tells travellers to check the official entry requirements for every country on their route and says you can't give visa advice. ChatGPT never composes it, because a plausible-sounding rule that is wrong, out of date or wrong for a particular passport is the costliest sentence a pack could contain.

A starting draft to take to your adviser might read like this (illustrative wording, not advice):

Entry rules depend on your passport, your route and your travel dates, and they can change at short notice. Before you travel, check the official government guidance for every country on your route, including any transit stops, and make sure your passport and any visa meet those rules. [Agency name] cannot advise on visas or entry requirements. Last checked by us: [date].

Once the adviser has approved the wording, it goes into every pack and email unchanged, and only the date moves. If a traveller asks a visa question, the reply points back to this paragraph and the official source; it never paraphrases a rule.

Stage 4: a liability check before anything is sent

A pack is a document your agency issues, and statements in it can be read as promises. How far that creates liability depends on how your business is set up and where you trade, which is a question for your solicitor or trade body and not for ChatGPT. What an owner can do is practical: make sure every promise in the pack traces to a supplier document, and that each supplier's own limits are visible next to what you've said. Three checks do that.

Check 1: the claims audit

Audit the pack below against the facts table. List, quoting the sentence: (1) every sentence that states a time, quantity, inclusion, limit, price or condition but has no table ID; (2) every sentence whose wording differs from its row in a way that changes the meaning, including added words such as every, all, free, guaranteed, private, direct, refundable, on time, sea view or accessible; (3) every inference, meaning a statement the row does not make but implies. Do not rewrite the pack. Do not tell me whether anything is legal.

[paste the pack, tags included]

Sample output (illustrative, for a pack where a few untagged sentences crept in):

UNTAGGED
- "Enjoy a relaxing private transfer to your hotel." States an inclusion with no ID. T4 says "shared shuttle".
CHANGED MEANING
- "Breakfast is included every morning." T3 says breakfast "included"; "every morning" is added.
INFERENCE
- "You can cancel the boat trip free of charge up to a week before." T7 says only "non-refundable" within 7 days. It does not say what applies before that.

You make the fixes, not ChatGPT. The transfer becomes "a shared shuttle". Breakfast loses "every morning" unless the hotel's document says it does. The cancellation sentence goes, or you write to the supplier and ask what applies before the 7-day mark, then add the answer as a new row. The third category deserves the most attention, because inferences read as perfectly sensible, which is why they survive a read-through.

Check 2: the suppliers' own limits, side by side

From the supplier documents only, build a table of each supplier's stated limits: what they say they are responsible for, baggage or capacity limits, cancellation and change terms, any "subject to", weather or force majeure wording, and where they say complaints or claims go. Quote their wording and give the source. Do not interpret the law and do not say who is liable for what.
SupplierStated limits (quoted)SourceYour column
Hotel"Rooms are allocated on arrival"; check-out time conflicts (T2)Hotel terms, AllocationWhat our terms say
Transfer companyOne suitcase and one cabin bag each; "driver waits up to 30 minutes after landing"Transfer voucher, ConditionsWhat our terms say
Boat trip"Non-refundable" within 7 days; running order "subject to weather"Excursion voucher, ConditionsWhat our terms say

That table already catches something. If your draft pack said "your rooms will be next to each other", the hotel's "allocated on arrival" contradicts it, and you either get the hotel to confirm adjoining rooms in writing or remove the sentence. The last column is for you: who the traveller actually contracts with for each component, and what your terms of business say about it. ChatGPT can lift a supplier's wording, but it can't know your contractual position, and a confident guess there is worse than a blank.

Check 3: the words that need a source

Keep a short list of words that may appear in a pack only when a supplier document, quoted in the table, uses them: included, free, guaranteed, private, direct, refundable, on time, adjoining, accessible, and any claim about a view. Where a supplier hasn't confirmed something yet, the pack says "subject to supplier confirmation" and the table row stays at CONFLICT or MISSING. Every version carries "Information correct as at [date]", and you keep every version you have sent, because the question after a complaint is always what the traveller was told and when.

Stage 5: eight pre-departure emails from the same table

The emails come from the facts table, not from the pack, so a mistake in one document can't copy itself into the other. Plan the series around the departure date (call it D) and give each email a job and a check. The timings below are a sketch for a group that pays a balance 70 days before departure; adapt them to your own payment schedule.

EmailSentJobDraws onYour check
E1D-84Welcome, the pack and the key datesThe pack, T8The version date matches the pack
E2D-77Balance reminderT8Amount and date come from your own schedule, never from the chat
E3D-49Rooming list: names must match travel documentsT3Names come from your booking system, not the chat
E4D-28Documents and insurance reminderStandard paragraphsParagraphs inserted unchanged, date checked
E5D-14Meeting point, packing, baggageT4, T5Luggage limits match the voucher
E6D-7Final plan and contactsThe whole tableRe-run the comparison with the newest documents
E7D-2Departure dayT1, T4, T6Contact numbers tested
E8D+1Safe arrival and first-day informationT1, T6On-call person confirmed
Using the facts table and the schedule below, draft one pre-departure email only: E[number], sent [N] days before departure. Plain and warm, under 170 words, one main action, from [agency name]. Use only facts in the table and put each fact's ID in square brackets after the sentence; I will delete the tags before sending. Do not give visa, health or insurance advice: where the email needs any, insert [STANDARD ENTRY-REQUIREMENTS PARAGRAPH] or [STANDARD INSURANCE REMINDER] exactly. Do not promise anything that is not in the table. Leave CONFLICT and MISSING rows out and list them for me after the email.

SCHEDULE: E1 D-84 pack and key dates; E2 D-77 balance reminder; E3 D-49 rooming list; E4 D-28 documents; E5 D-14 meeting point and packing; E6 D-7 final plan; E7 D-2 departure day; E8 D+1 safe arrival.
Draft E6.

Sample output (illustrative):

Hi everyone, one week to go. Here is your final plan. A driver will meet the group at arrivals with a name board [T4]. The transfer is a shared shuttle of about 50 minutes [T4], and each person may bring one suitcase and one cabin bag [T5]. Hotel check-in is from 15:00 [T1]. On day 3 the boat trip meets at the marina at 09:30 [T6]; lunch is not included [T6]. Please check your documents are in order: [STANDARD ENTRY-REQUIREMENTS PARAGRAPH]. Questions before you fly? Reply here or call [agency contact]. [your name]

Left out: T2 and T9, listed after the email as the open items, so the email says nothing about check-out. That's the behaviour you want from the last instruction, and it also gives you a reminder to chase the hotel before E6 goes out. Watch for two additions the table never supplied: a line telling travellers to confirm their flights online, which depends on each airline's own rules, and general advice about weather or what to pack. Neither is in a supplier document, so both go.

When a supplier changes something after the pack is out

Changes are where a pack turns from an asset into a risk, because a traveller holding version one will act on it. The fix is the same table, used backwards: add the new document, ask what moved and which of your own documents repeat it.

Here is the current facts table and a new supplier document. Compare them. List every row that changed (old value, new value, source), every row now in CONFLICT and every new fact. Then list which pack sections and which scheduled emails mention each changed row, by ID. Draft a change notice for the group under 80 words that states only the changed facts. Do not rewrite the pack.

Suppose the hotel writes to move check-in from 15:00 to 16:00. Sample output (illustrative):

CHANGED
- T1 Hotel check-in: 15:00 to 16:00 (hotel email, [date])
NEW CONFLICTS: none
AFFECTED: pack section YOUR HOTEL; emails E5, E6, E7
NOTICE
Update from [agency name]: the hotel has moved check-in from 15:00 to 16:00. Your updated pack (version 2, correct as at [date]) is attached. Reply here if the later check-in causes a problem.

Then do the housekeeping nobody enjoys. Update row T1 with the new source, regenerate only the affected sections and emails, give the pack a new version number, and add a line to a simple log: version, date, what changed, who approved, when sent. For a bigger disruption such as a cancellation or a refund, ChatGPT prompts for travel agents covering delays, cancellations and refunds has the messages.

Why the checking time is the point: the sums for 26 travellers

The case for checking every row is arithmetic. Suppose, hypothetically, that a model slips on one detail in 20. A pack built from a 40-fact table then carries about two errors, and nothing about the text tells you which two. Reading harder doesn't find them, since the sentences are fluent. A lookup does: each tagged sentence is compared with its row, and each row with its document. That is what the extra minutes buy, and it is why the saving below is smaller than a "draft everything in seconds" promise would suggest. The minutes are assumptions for this example; time your own.

StepBy hand (minutes)With the pipeline, checks included (minutes)
Facts table, about 40 facts9040 (10 to extract, 30 to verify against the originals)
Pack: draft, tag check, claims audit18065 (10 to draft, 35 to read, 20 to audit)
Eight pre-departure emails24080 (10 each)
Total510185

The saving is 325 minutes, about five and a half hours, on one group. Each further group repeats the same steps, so six groups a year at these figures is 6 x 325 = 1,950 minutes, roughly 32 hours: time you could spend on supplier negotiation rather than retyping check-in times. Upstream of the pack, a travel proposal template that builds a client-ready trip PDF with AI shows how the same supplier facts feed the quote before the pack exists.

Who drafts, who checks and who signs off each pack

The pipeline can fail quietly when the person who drafted a pack is also the only person who reads it. In a three-person agency, assign roles. The drafter runs stages 1 to 3. A different person, the checker, runs stage 4 and reads each tagged sentence against its row. The owner, or whoever carries responsibility for what the agency promises, sends. In a one-person agency the checker is you the next morning, with the supplier documents open beside the pack rather than in your memory.

The checker works through a short list before anything is sent:

  1. Every table row has been compared with the original document today, not on booking day.
  2. No row at CONFLICT or MISSING appears as a fact in the pack or an email.
  3. The claims audit has been run on the final text, with every item resolved or removed.
  4. The entry-requirements and insurance paragraphs are inserted unchanged, with the date they were last checked.
  5. The pack carries a version number and "correct as at" date, and the previous version is saved.
  6. Source tags are removed, placeholders are filled, and a test copy has been read on a phone.

None of this needs a more advanced tool than a ChatGPT Project and a spreadsheet. What it needs is the habit of treating ChatGPT's output as a draft that has to pass a lookup, in the same way a supplier's confirmation has to pass your eyes.

Questions travel agency owners ask about AI-built group packs

Can ChatGPT tell travellers which visas they need?

No, and your pack shouldn't try. Entry rules depend on the passport, the route and the date, and they change. Use one standard paragraph, approved by your adviser, that sends travellers to the official page for each country on their route, and add the date you last checked. ChatGPT inserts that paragraph unchanged and never writes the rules.

Is it safe to upload supplier confirmations to ChatGPT?

Only after redaction. Confirmations carry names, booking references and sometimes passport or health details, none of which any step here needs. Replace them with codes first. Personal plans let you turn off training on your chats in privacy settings, and OpenAI doesn't train on ChatGPT Business content by default, but your client contracts may set stricter rules.

Does a group pack create liability for the agency?

It can, because statements in a pack may be read as promises. How far depends on how your business is structured and where you trade, so ask your solicitor or trade body. The practical steps are universal: source every claim, say 'subject to supplier confirmation' where a supplier hasn't confirmed, and date-stamp every version.

How often should I re-check the supplier documents?

Before every email in the series, and whenever a supplier writes to you. Re-run the facts-table comparison with the newest documents, not the ones from booking day, and send the group a short change notice if anything moved. A pack is only correct as at its date.

Further reads

Sources: OpenAI help pages on Projects in ChatGPT (file limits, project instructions; checked October 2026). The trip, supplier terms, figures and sample outputs are illustrative. This tutorial gives no visa, entry-requirement or legal advice.

Want a group-pack pipeline your team can trust?

On a 1:1 call we'll map how supplier documents become packs and emails in your agency today, set up the facts table and checks, and decide who signs off before anything reaches a traveller.

Book a 1:1 call with me