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.
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.
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.
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 replace | Replace with | Why |
|---|---|---|
| Passport numbers and dates of birth | Nothing | Identity data that no step uses |
| Traveller names | Room codes such as R1 to R13 | The pack needs the rooming structure, not the people |
| Medical, dietary or mobility details per person | Counts 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 emails | Nothing | Not 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):
| ID | Item | Fact | Source | Status |
|---|---|---|---|---|
| T1 | Hotel check-in | From 15:00 | Hotel confirmation, Arrival | Stated |
| T2 | Hotel check-out | 11:00 on the confirmation; 12:00 in the hotel terms | Hotel confirmation; hotel terms, Departure | CONFLICT |
| T3 | Rooms | 13 twin or double rooms, breakfast "included" | Hotel confirmation, Booking summary | Stated |
| T4 | Airport transfer | "Shared shuttle", about 50 minutes; driver meets the group at arrivals with a name board | Transfer voucher, Service | Stated |
| T5 | Transfer luggage | One suitcase and one cabin bag each | Transfer voucher, Conditions | Stated |
| T6 | Boat trip | Day 3, meet 09:30 at the marina; lunch "not included" | Excursion voucher, Details | Stated |
| T7 | Boat trip cancellation | "Non-refundable" within 7 days of the trip | Excursion voucher, Conditions | Stated |
| T8 | Group balance due | 70 days before departure | Agency payment schedule | Stated |
| T9 | Late-arrival hotel policy | Not stated | MISSING |
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.
| Supplier | Stated limits (quoted) | Source | Your column |
|---|---|---|---|
| Hotel | "Rooms are allocated on arrival"; check-out time conflicts (T2) | Hotel terms, Allocation | What our terms say |
| Transfer company | One suitcase and one cabin bag each; "driver waits up to 30 minutes after landing" | Transfer voucher, Conditions | What our terms say |
| Boat trip | "Non-refundable" within 7 days; running order "subject to weather" | Excursion voucher, Conditions | What 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.
| Sent | Job | Draws on | Your check | |
|---|---|---|---|---|
| E1 | D-84 | Welcome, the pack and the key dates | The pack, T8 | The version date matches the pack |
| E2 | D-77 | Balance reminder | T8 | Amount and date come from your own schedule, never from the chat |
| E3 | D-49 | Rooming list: names must match travel documents | T3 | Names come from your booking system, not the chat |
| E4 | D-28 | Documents and insurance reminder | Standard paragraphs | Paragraphs inserted unchanged, date checked |
| E5 | D-14 | Meeting point, packing, baggage | T4, T5 | Luggage limits match the voucher |
| E6 | D-7 | Final plan and contacts | The whole table | Re-run the comparison with the newest documents |
| E7 | D-2 | Departure day | T1, T4, T6 | Contact numbers tested |
| E8 | D+1 | Safe arrival and first-day information | T1, T6 | On-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.
| Step | By hand (minutes) | With the pipeline, checks included (minutes) |
|---|---|---|
| Facts table, about 40 facts | 90 | 40 (10 to extract, 30 to verify against the originals) |
| Pack: draft, tag check, claims audit | 180 | 65 (10 to draft, 35 to read, 20 to audit) |
| Eight pre-departure emails | 240 | 80 (10 each) |
| Total | 510 | 185 |
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:
- Every table row has been compared with the original document today, not on booking day.
- No row at CONFLICT or MISSING appears as a fact in the pack or an email.
- The claims audit has been run on the final text, with every item resolved or removed.
- The entry-requirements and insurance paragraphs are inserted unchanged, with the date they were last checked.
- The pack carries a version number and "correct as at" date, and the previous version is saved.
- 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
- ChatGPT Prompts for Travel Agents: 10 for Quotes and Follow-Ups — Ten prompts for quotes and follow-ups before the group books.
- Travel Agent Commission Tracking: Match Supplier Payments With AI — Match supplier payments to commission once the trip runs.
- Travel Agent Follow-Up Emails: Chase Silent Quotes With AI — Chase silent quotes without nagging.
- Best AI Tools for Travel Agents: Itineraries, Emails and Research — Itinerary, email and research tools for agencies compared.
- Travel Agency CRM: What a Small Agency Needs and Where AI Helps — What a small agency needs from a CRM, and where AI fits.
- What AI Costs a Small Travel Agency and What It Saves — What AI costs a small agency and what it saves.
- How to Use AI in the Travel Industry: Weather Cancellations for Tours — Weather cancellations for tours, with messages to send.
- AI Marketing for Travel Agents: A Month of Posts and Emails — A four-week content calendar, a destination fact-check table, a supplier claims check and a four-email sequence for travel agents.
- AI Tools and AI Development: The Complete 2026 Guide — the AI hub, including every tutorial in the AI-for-business series.
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.