Skip to article

Dynamic airline pricing: when the cached fare is wrong

When an airline calculates an offer for each search, a cached fare may no longer explain the price. Booking systems need to retain the quote, its conditions and when it expires.

Airline pricing is changing from published fare rules towards offers calculated for a particular search. That changes what a booking system can cache, compare and explain to a customer.

A stored fare rule and a time-limited offer are different records. If the price changes before payment, the product needs to know which offer the traveller saw, whether it is still valid and what requires fresh approval.

The risk is keeping the old storage and audit model while the pricing model changes. This note follows what that means for search, booking and travel agents.

What a filed fare actually was

Strip the romance and a fare was a small program. A base amount, plus rules: book fourteen days ahead, stay a Saturday night, no changes, no refund. Those rules were published in the filing, identical for every buyer, and they were the mechanism.

Economists call this second-degree price discrimination, and the distinction matters more than the jargon suggests. The seller publishes a menu; buyers sort themselves by choosing which restrictions to accept. The airline never had to work out who you were. It made you declare it, by picking the cheap fare and living with the Saturday night.

That is why the rule had to be readable. A menu nobody can read is not a menu. Every "book on a Tuesday" tip anyone ever gave you was a person playing a game whose rules were posted, and the posting was not a courtesy. It was load-bearing.

A generative pricing engine does not file a rule and wait. It takes demand signal, route, competitive position, booking window and time to departure, and returns a number for this query. Then it does it again, differently, because the inputs moved.

There is no menu. There is no restriction to accept in exchange for a discount. There is an output, and the inputs are not things you control.

WHAT YOU SEE HOW THE PRICE IS SET WHAT YOU CAN DO THE FILED FARE a rule in the fare filing stay a Saturday night full fare, no restriction lower fare, Saturday stay you pick the one you qualify for change the trip, change the price the rule is public and the same for everyone THE GENERATED PRICE no rule is shown only a number demand, route, competition, booking window, time to departure a model, retrained continuously nothing to satisfy, no lower bucket no input you control THE DISCRIMINATION IS NOT NEW. WHAT WENT AWAY IS THE RULE YOU COULD READ AND ANSWER.
Both systems charge different people different prices. Only one of them publishes a rule, and only one leaves the buyer a move.

What changes for caching and price comparison

This is not a pricing story. It is a story about an interface changing shape underneath a lot of code that was written against the old one.

You assumedBecause a fare was dataWhat is true of a model output
A price can be cachedThe filing changed a few times a dayIt is valid for the query that produced it
Two searches agreeSame file, same answerDivergence is normal, not a bug
A price is reproducibleRe-read the recordYou cannot re-run yesterday's inputs
Tests can assert amountsFixtures were stableGolden-file tests rot immediately
A change is explainablePoint at the rule that movedThere is no rule to point at
Offers are comparableEveryone fetched the same artifactEach comparison is a fresh inference

Read the third row twice, because it is the one that will cost you a support team. "It was cheaper an hour ago" used to be a checkable claim. Someone opened the fare history and either agreed or did not. Against a per-query price, that sentence is unfalsifiable in the strict sense: there is no artifact to check, and the honest answer is that nobody can reconstruct what you were shown.

That answer is unacceptable to a customer, so somebody will invent a better-sounding one. Cache what you displayed, with the inputs and a timestamp, or accept that your support desk is going to start guessing.

Keep the conditions that explain the offer

The consumer story hiding inside the architecture is simpler than the privacy debate suggests, and worse.

Charging different people different prices does not require knowing anything personal about them. It requires knowing the shape of their trip. A one-way out Tuesday morning and back Thursday evening, booked eleven days ahead, on a route with one nonstop, is a business trip. No name, no browsing history, no loyalty number, no cookie. The itinerary is the profile.

So a system can price you precisely while touching nothing a privacy lawyer would recognise as personal data, which is exactly what makes the current wave of regulation slide off it.

Pricing also raises a disclosure question: what information shaped this offer, and can the customer understand the price they received? Keep a record of the inputs, quote time and applicable conditions. Review the rules for each market against the system you actually operate.

Personal data and trip details are different inputs, but neither tells the whole story on its own. A useful pricing review starts with what the system collects, what it infers and how those inputs affect the offer.

Why your shopping agent does not fix this

The comforting version is that it evens out. They get a pricing model, you get an AI agent, the arms race nets to zero.

It does not, and the reason has nothing to do with model quality. The seller's model is trained on years of its own transactions: every fare offered, every one accepted, every one abandoned, across every route and season. It has seen the distribution. Your agent sees one session. It cannot know what the passenger in 14B paid, and it cannot know what you would have paid, which is the only number the other side is trying to find.

The testing is blunt about where agentic booking actually is. When Bain put large language models against real flight search in March 2026, airline sites were reached directly only about 5% of the time, autonomous browser agents ran 5 to 30 minutes before hitting a date picker or a login wall, and no tool completed a booking reliably.

There is a second-order problem underneath that, and it is the one that will decide how this settles. Travel search has always been rationed by a human being having to sit down and click. An agent has no such limit: it does not tire, does not settle for good enough, and does not care what a query costs the system answering it. Every serious shopping agent makes the seller's search economics worse, and the rational response to that is to meter, throttle or charge for the looking.

So the buyer's agent degrades the seller's economics, and the seller's fix is to restrict the buyer's agent. That is not an arms race. One side has a model and a meter. The other has a chat window.

Store the quote, its inputs and its expiry

None of this argues for pretending the old world still exists. It argues for treating a price as what it now is.

  • Store the offer, not the number. An amount with no inputs, timestamp and expiry is not a record of anything.
  • Make expiry explicit in your API. A price without a TTL is a lie your own client will believe.
  • Revalidate before commit, always. The gap between shown and charged is now the product.
  • Test behaviour, not amounts. Assert that a stale offer is rejected, not that a fare equals a fixture.
  • Log what the customer saw. When the record and the display disagree, the display is the promise you made.

The industry spent forty years building on the assumption that a price was a fact you could look up. It is becoming a claim generated for one person at one moment, and the only durable version of it is the copy you kept.

Source