Engineering
Engineering13 min readBy The Data Workers Team

Best practices for agentic travel and hospitality data: a field guide for airline, hotel and OTA data teams

Travel and hospitality data teams run on partner feeds they do not control, guest identities that never quite match and prices that depend on both. This field guide shows how to run that back office with agents, practice by practice: how to map feed changes before rates go stale, merge duplicate guest and loyalty profiles safely, keep personal and payment data out of analytics, and hold every price and points change for a named person.

Ask a head of travel data what the week looked like and the answer is rarely the roadmap. A channel manager changed its rate feed on Friday night. An airline's new NDC connection started returning orders next to PNRs. A loyalty member turned out to be three people in three systems, and the offer engine mailed all three. Bookings, rates and availability arrive from hundreds of partners, and every one changes on its own schedule.

The mandate is to treat bookings, stays and traveller identity as data products and give revenue management, personalisation and guest-facing AI agents inputs they can trust. The trap is that, without automation, the team spends the season repairing feeds and explaining why two reports disagree.

Our view: the work that keeps travel data correct is repeatable, so agents should own it, and people should own the decisions that move a price, a member's points or the scope of payment data. The full playbook covers the domain and the neighbouring marketing, ads and customer data teams share its patterns; this report covers how to do the work well.

The old world

It is 22:30 on a Friday before a holiday weekend. A channel manager has shipped a new version of its rate and availability feed. The file is valid, so the nightly load succeeds, but tax and fees are two fields now, length-of-stay restrictions sit in a nested block and three rate-plan codes are new. The rate table fills with nulls. Revenue management reprices at six on Saturday and finds out with a property priced off yesterday's numbers.

On Monday finance reconciles bookings to property revenue by hand and finds a gap nobody can explain. The loyalty team will not merge duplicate members, because the last merge combined two travellers' points and nobody could undo it. A free-text notes field from the same release has carried email addresses into analytics for weeks.

The new world

Same Friday with Data Workers. The Schema Evolution agent spots the new layout in the first file, in staging. The Data Context & Catalog agent lists every table, report and campaign that reads the changed fields. The migration is generated and tested with a rollback point, and the Quality Monitoring agent ties staged rates to the property management system. The Data Access & Governance agent flags the notes field as personal data. Because rate-bearing fields set prices, the Autonomous Data-Conductor holds the change for the revenue systems owner to approve.

Here is that night as a chain of hand-offs between agents:

How the swarm hands one problem from agent to agent: a channel-manager feed change before the weekend reprice. Each step leaves a signed receipt.
Fig. 1:How the swarm hands one problem from agent to agent: a channel-manager feed change before the weekend reprice. Each step leaves a signed receipt.

The rest of this report walks through the seven practices that make that night possible. At a glance:

The practices in this report, old world vs. new world. Each row is a practice; the right column is how it runs when agents own the back office. Illustrative.
Fig. 2:The practices in this report, old world vs. new world. Each row is a practice; the right column is how it runs when agents own the back office. Illustrative.

The practices, one by one

1. Map every partner feed change the day it ships

GDS and NDC connections, channel managers, property systems and OTA supplier files are valid by their own specification and different from what your pipelines expect. They change without notice, especially before peak.

Why it's harder than it looks: the breakage is silent. A renamed field or a nested block does not fail the load, it produces nulls, and the damage shows up in a forecast input or a campaign audience days later.

  1. 1.The Schema Evolution agent runs detect_schema_change on each landed file and records what moved.
  2. 2.The Data Context & Catalog agent runs blast_radius_analysis, so the list of affected tables, reports and audiences exists before anyone edits a model.
  3. 3.The Schema Evolution agent runs check_compatibility and generate_migration, with a rollback plan, in staging.
  4. 4.The Pipeline Building agent updates the models and create_quality_tests_for_pipeline proves last night's values are the same under the old and new layout.
  5. 5.Non-price fields publish at the autonomy level you set. Rate-bearing fields, restrictions and forecast inputs go to the revenue systems owner with the diff and the tie-out.

2. Tie bookings to property and ticketing revenue every morning

Revenue management, finance and the executive dashboard all read bookings, and when they disagree every downstream product loses credibility.

Why it's harder than it looks: the sources count different things. A booking is a PNR in one system, an order in another and a folio in the property system. Cancellations reverse yesterday's numbers, and a quarterly tie-out finds a gap too late to trace.

  1. 1.The Quality Monitoring agent runs run_quality_check each morning, comparing bookings by property, route and channel with property and ticketing revenue.
  2. 2.get_anomalies separates a normal swing from a break, so a late cancellation file does not raise the alarm a missing property does.
  3. 3.The Incident Debugging agent uses get_root_cause to trace a gap to the change behind it, such as a tax setting a new layout represents differently.
  4. 4.The Autonomous Data-Conductor holds any publish that does not tie, and the finance data owner sees the gap and its cause before the number reaches a dashboard.

Across the routine work these practices cover, here is the difference in elapsed time:

Time to complete 6 routine travel and hospitality data tasks, current practice (black) vs. the agent swarm (green). Illustrative.
Fig. 3:Time to complete 6 routine travel and hospitality data tasks, current practice (black) vs. the agent swarm (green). Illustrative.

The biggest change is duplicate loyalty profile batches: from about two weeks to 2 hours. Work that waited in queues finishes in minutes or hours, because agents detect, fix and verify in one pass.

3. Resolve guest and loyalty identity on a copy, then merge with a rollback point

One guest view across the booking engine, property or departure systems, loyalty platform and customer service underpins every offer and liability report. See the entity resolution and unified profiles playbook for the identity problem in depth.

Why it's harder than it looks: a wrong merge is worse than a duplicate. It combines two travellers' points, tier status and stay history, and exposes one person's details to the other. Nicknames, travel arrangers' emails and families sharing an address look like duplicates and are not.

  1. 1.The Quality Monitoring agent finds likely duplicate members across sources on a schedule and groups them.
  2. 2.The Data Context & Catalog agent runs trace_cross_platform_lineage to show what reads each profile, from points liability reports to audience exports.
  3. 3.The Pipeline Building agent builds the merge with generate_pipeline, runs it on a copy with validate_pipeline and checks that points, tier status and stay counts are conserved.
  4. 4.The batch, with shared emails and corporate arrangers split out as exceptions, goes to the loyalty owner as one decision through request_governance_review. Every applied merge keeps a rollback point.

4. Set freshness targets on the feeds revenue management reads

A late or partial feed is a pricing error that lasts until the next load, and peak season multiplies the odds.

Why it's harder than it looks: freshness is not one number. A rate feed two hours late matters at 05:00 on a reprice morning and not at noon.

  1. 1.The Quality Monitoring agent records a freshness target per feed with set_sla, tied to the reprice that depends on it.
  2. 2.check_freshness shows whether the partner or your own load is late.
  3. 3.The Connectors agent checks get_dbt_run_history and reruns the job with trigger_airflow_dag, inside the autonomy you set.
  4. 4.If that fails, the Incident Debugging agent runs diagnose_incident and sends the on-call engineer a root cause and a ready fix.
  5. 5.If data cannot be ready in time, the Conductor tells the revenue systems owner before the reprice, so the decision to hold prices is a person's, made early.

5. Find personal and payment data when the field arrives

Travel data is personal by default: names, contact details, passport numbers and special service requests that can reveal health or religion. Under the GDPR, access, erasure and purpose limitation land on exactly the tables that duplicates pollute, and card fragments bring PCI scope.

Why it's harder than it looks: the risk arrives in free text. A notes field or a meal or mobility request passes every schema check and carries whatever people type. Discovery by audit comes months after the data has spread.

  1. 1.The Data Access & Governance agent runs scan_pii on new and changed fields, by name and by content, inside your network.
  2. 2.The Data Context & Catalog agent applies auto_tag_dataset, so lineage, access and quality agents treat tagged columns differently.
  3. 3.request_governance_review sends the security or privacy owner the field, examples to inspect and a proposed handling decision.
  4. 4.The owner decides, and generate_audit_report records it.

See how to handle PII in data pipelines, GDPR for data engineers and the PII detection and masking transformation. Data Workers does not make you compliant; your controls, people and assessors do.

6. Govern one definition of a booking, a stay and a member

Revenue management, finance and marketing each hold a version of ADR, net revenue, a "stay" and an active member. An offer engine that reads an ungoverned table spreads the wrong number to every guest at once.

Why it's harder than it looks: definitions drift with the business. NDC adds orders next to PNRs, an acquired brand brings another property system, and "a booking" quietly means three things.

  1. 1.The Data Context & Catalog agent records each definition with define_business_rule, with an owner and provenance, and marks the trusted table for each concept with mark_authoritative.
  2. 2.Dashboards, offer engines and AI agents resolve metrics through resolve_metric, so all answer from the Data Context Wizard's one definition.
  3. 3.When a feed change alters a meaning, such as net rate after a tax split, the agent proposes the updated definition with generate_documentation.
  4. 4.The definition owner approves, and every consumer reads the new meaning together.

7. Hold price- and points-affecting changes for a named approver

Rate-bearing fields set prices and loyalty fields move a member's balance. Trust depends on a person owning those changes.

Why it's harder than it looks: teams either review everything, which makes every feed change a ticket, or review nothing and discover a wrong price on Saturday. The fix is a level per class of change and an approver who gets a decision, not an investigation.

  1. 1.The domain owner sets the level per task class in Autopilot. Rate-bearing fields and points stay at L2. Revenue manager access is scoped by role and property with check_policy and provision_access.
  2. 2.For a rate-bearing change, the Data Context & Catalog agent attaches the blast radius, the Quality Monitoring agent the tie-out and the Schema Evolution agent the rollback plan.
  3. 3.The Conductor sends one decision to the revenue systems owner with before-and-after numbers per property or route. A points or tier change goes to the loyalty owner the same way.
  4. 4.The owner approves, edits or rejects. A waiting proposal expires and escalates; nothing applies silently. Payment and special-category scope stays at L0: people only.

That balance, autonomy where work is reversible and a named person where money or points move, looks like this by task class once a deployment matures:

Autonomous resolution by travel and hospitality data task class. Share of each task class closed autonomously, escalated for approval, or handled by a person. Price-bearing and points-affecting changes sit at L2 by design: always proposed, never applied without a named approver. Illustrative.
Fig. 4:Autonomous resolution by travel and hospitality data task class. Share of each task class closed autonomously, escalated for approval, or handled by a person. Price-bearing and points-affecting changes sit at L2 by design: always proposed, never applied without a named approver. Illustrative.

Catalog and docs upkeep closes autonomously 88% of the time. For rate and fare-bearing changes, autonomous closure is 10% at most by design, and loyalty points and tier status stays with people.

Designing the autonomy ladder

Autonomy is set per task class, and only a domain's owner can raise it. Every domain starts at L1. L0 to L2 run today. L3 and L4 describe where a domain can go on its own review record, and nothing in those two columns is running now or promised by a date.

Task classL0L1L2L3L4
Catalog and docs upkeepn/aStartDefaultWhere a domain can go firstWhere a mature domain can go
Partner feed mapping, non-priceHoldStartDefaultWhere a domain can goNot considered
Bookings tie-outHoldStartDefaultWhere a domain can goWhere a mature domain can go
Freshness repair and rerunsHoldStartDefaultWhere a domain can goNot considered
Duplicate profile mergesHoldStartDefaultOnce merge reversals stay rareNot considered
Rate-bearing fields and restrictionsNoNoAlways, revenue systems ownerStays at L2Stays at L2
Loyalty points and tier statusNoNoAlways, loyalty ownerStays at L2Stays at L2
Payment and special-category scopeAlwaysNoNoPeople onlyPeople only

L0 is watch only, L1 shows what the agent would do, L2 proposes and a person approves. L3 and L4 are not running today.

The operating model: who owns what

Agents change who does the work, not who is accountable:

RoleOwnsWhat the agents take off their plate
Head of Travel Data ProductsStandards, autonomy per domain, which domain goes nextAssembling status, chasing owners
Revenue systems ownerRate-bearing fields, restrictions, forecast inputsPreparing the diff, tie-out and rollback plan
Loyalty ownerProfile merges, points and tier changesFinding duplicates, testing merges, listing exceptions
Security and privacy ownersWhat may land in analytics; payment scopeScanning new fields, attaching examples
Data engineersReviewing proposals, building new data productsMapping partner changes, reruns, tracing breaks

The swarm behind the practices

No single agent delivers these practices. Each one is a hand-off between specialists, coordinated under the autonomy you set per domain.

AgentWhat it does on travel and hospitality dataPublic tools it calls
Connectors and Data IngestionLand GDS, NDC, channel-manager, property and loyalty feedsget_dbt_run_history, trigger_airflow_dag
Schema EvolutionMaps partner layout changes before they reach tablesdetect_schema_change, generate_migration
Pipeline BuildingBuilds booking, stay, profile and forecast models; tests merges on a copygenerate_pipeline, validate_pipeline
Quality MonitoringTies bookings to revenue, watches freshness, finds duplicate profilesset_sla, run_quality_check, get_anomalies
Incident DebuggingTraces a rate, ADR or booking-count discrepancy to its causediagnose_incident, get_root_cause
Data Access & GovernanceFinds personal data, applies role and property rulesscan_pii, check_policy, provision_access, generate_audit_report
Data Context & CatalogDocuments each data product with owner, lineage and consumersblast_radius_analysis, define_business_rule, resolve_metric
Cost Savings & Data CleanupRetires duplicate extracts and stale snapshotsget_cost_enrichment, detect_dead_assets

Data Context Wizard holds one governed definition of a booking, a stay, net revenue, ADR, an active member and a loyalty tier. Autonomous Data-Conductor coordinates the hand-offs and verifies the numbers that matter before the reprice and before offer engines read them. Spellbook Data Catalog makes each travel data product discoverable for revenue managers, marketers and analysts, in plain English.

What disappears

The clearest sign the practices are working is what stops happening:

  • •The Saturday reprice on yesterday's rates.
  • •Quarter-end scramble to tie bookings to property and ticketing revenue.
  • •Duplicate guests that every campaign and loyalty report inherits.
  • •Merges nobody dares to apply.
  • •Free-text notes quietly carrying personal data into analytics.
  • •Offers sent for stays that were cancelled.

Feed changes are caught where they enter, not where rates are read, and every action leaves a signed receipt, so the team can see what happened and reverse it.

A travel data leader's scorecard

If you own travel data as a product, bring these targets to every quarterly review:

  • •Feed change to verified model: target under an hour, against about a week today.
  • •Days per month bookings tie to property and ticketing revenue: target every day.
  • •Duplicate loyalty profile batch reviewed and merged: target 2 hours, with reversed merges kept rare.
  • •Freshness targets met on the feeds revenue management reads: target every reprice.
  • •New fields scanned for personal data before reaching analytics: target every field.
  • •Share of upkeep closed autonomously, and its token cost: targeting 88% for catalog and docs upkeep as the deployment matures.

The climb: from assisted to autonomous to agentic

Our thesis is that the data platform climbs the way analytics did, in stages, and that the hard part of data work was never knowing what to do but doing it. For travel and hospitality data teams, the climb looks like this:

  • •Assisted. Agents work alongside your team. They read the whole stack, show what needs doing and propose every fix with a receipt; rate-bearing fields, loyalty points and payment scope always go to a named approver.
  • •Autonomous, under your governance. Routine work runs on its own: layout changes are mapped into staging the day they happen, bookings are tied to revenue every morning and new fields are checked for personal data on arrival. Your team governs the agents instead of doing the upkeep.
  • •The agentic enterprise. A travel data team that ships demand and pricing inputs, loyalty analytics and personalised offers instead of chasing feeds. People set direction, and the platform carries it out.

You choose the altitude, every step is visible and reversible, and the pilot below is the first rung.

The pilot: how travel and hospitality data teams start

The pilot is how your team proves the value on its own data before committing.

  • •What we connect. A GDS, NDC or channel-manager feed; the property or reservation system; your loyalty platform; Snowflake or Databricks; dbt; Airflow or Dagster; Tableau or Looker, over MCP, inside your infrastructure. Nothing migrates.
  • •Scope. One distribution feed and the guest profile merge, at L2.
  • •First week. Agents run at L1 across the scoped domain. They map every pipeline, definition and lineage path and show the fixes they would have made, with receipts, so your team sees the value before anything changes.
  • •By week two. Partner layout changes are mapped into staging and bookings are tied to revenue every morning, on reversible work. Rate-bearing fields and loyalty points stay at L2 with a named approver.
  • •At day 30. We review the impact metrics against your baseline:
  • •Channel-manager or NDC feed change mapped: from about a week to 30 min
  • •Duplicate loyalty profile batch reviewed and merged: from about two weeks to 2 hours
  • •Bookings tied to PMS and ticketing revenue: from about two days to 12 min
  • •the share of catalog and docs upkeep closed autonomously, targeting 88% as the deployment matures
  • •The guarantee. In a 90-day pilot, ten engineering hours per data engineer per week recovered against a baseline both sides sign on day one, or the $7,500 fee is refunded.
  • •What you decide. Whether to expand to the next feed, brand or region.
  • •Cost. Start $7,500 one time (a 6 to 12 week pilot, credited in full against the first year); Scale from $1,000 a month and Enterprise from $3,000 a month, billed annually, unlimited seats, no usage meter, no markup on model spend. See pricing.

The pilot is the start of a longer curve:

Share of agent actions by autonomy rung over the first twelve months for a travel data products team. Month 0 is the manual baseline; every deployment starts at L1 and moves up only on evidence. Illustrative.
Fig. 5:Share of agent actions by autonomy rung over the first twelve months for a travel data products team. Month 0 is the manual baseline; every deployment starts at L1 and moves up only on evidence. Illustrative.

By month 12, more than 40% of agent actions run fully autonomously and manual work falls below 10%, while price-bearing and points-affecting changes stay with a named approver.