By Emmanuel Gautier, CTO and Terry Donovan, VP of Product -- July 2026
An unsold seat on tomorrow’s 10AM tour is worth zero dollars after 10AM. It can’t be inventoried, refunded into next week, or shipped to a buyer in another city. It just evaporates.
And a seat sold for less than the market would bear is just as lost. The €30 booking on a Saturday-night tour the market would have paid €45 for? That €15 doesn’t come back tomorrow. The booking happened, the seat is gone, and the price was wrong. Perishable inventory cuts both ways: empty seats and mispriced seats are both forms of revenue that has already evaporated by the time you notice.
Airlines figured this out in 1985. Hotels followed in the late ’80s. Ride-sharing built its entire business model around it. Today, every flight you book, every hotel night you reserve, and every Uber you take has been priced by an algorithm weighing dozens of signals in real time.
Tours and activities? Mostly still on a sticky note in the operator’s office. One price, all year, regardless of weekend, weather, demand, or how many seats are left.
That’s the problem Walkway exists to solve. And because dynamic pricing is one of those things people tend to either trust completely or distrust completely, we want to open the hood. This post is about how our pricing engine actually works, what it considers, what it doesn’t, and — most importantly — what it isn’t.
It is not, despite what some operators worry, a machine for jacking up prices. The data we’ll share below tells a different story.
What “dynamic pricing” actually means
The phrase “dynamic pricing” gets used to mean a lot of different things, most of them inaccurate or partially accurate at best. So let’s be specific.
A static price treats every seat on every tour the same. Whether you book six months out or six hours out, whether the bus is empty or one seat from sold out, whether your city is hosting a marathon or a quiet Tuesday, you pay the same. That price was set once, sometimes months to years ago, and revisited when someone remembered to revisit it.
Variable pricing is one step up. Most “dynamic” pricing tools on the market are really variable pricing dressed in better clothing: simple rules like “if 80% full, increase by 10%” or “weekends cost 15% more.” Better than static, but still blunt — they ignore actual demand, ignore what competitors are doing, and ignore the difference between a slow Monday and a slow Monday during a heatwave.
What we do is different. Each upcoming seat gets evaluated continuously — 8 times per day, every day, until the tour happens. A typical seat sees 20 to 30 separate price evaluations between when it’s first listed and when it goes out the door. Each evaluation looks at seven independent signals and combines them into a single recommendation: go up, go down, or hold.
Since launch on December 16, 2025, our engine has pushed more than 2.3 million of these price recommendations live to operators — across 149 product-channel listings, 66,000 distinct experience slots, and 169 active days. That number matters not for bragging rights, but for what it means: each push was a small, considered decision made on data no human could have processed in time. We’re not trying to outsmart a great revenue manager; we’re trying to do something a human, no matter how skilled, cannot physically do.
The seven signals
We won’t share the math behind how we weight or combine these (that part is genuinely our secret recipe). But the inputs are not secret. They are, in fact, exactly the kind of signals a thoughtful human operator would want to consider, if they had unlimited time.
- Booking pace. A machine learning model predicts how fast a particular slot should be filling, given the date, day of week, time of day, season, and historical patterns. When the actual bookings outpace this prediction, demand is strong. When they trail it, demand is soft.
- Competitor pricing. Each product has a defined competitive set — comparable experiences in the same market. We continuously check whether you’re priced above, below, or in line with them.
- Competitor sell-outs and discounts. Different from price alone: when competitors actually run out of inventory, the market is tight. When they’re aggressively discounting, the market is soft. These are leading indicators that often arrive before price moves do.
- Market demand. Destination-level demand signals — is the city seeing elevated traveler volume? A convention, a marathon, school holidays, a heatwave?
- Product popularity. How your specific product is trending versus others in its category. Two ghost tours in the same city can have very different demand profiles.
- Price exploration. When historical data is thin — a new product, a new operator, a date that hasn’t been priced this way before — we systematically test small price moves and observe how bookings respond. Each test holds for 24 hours so we can actually see the response before adjusting again.
- Inventory scarcity. As a slot fills up, the remaining seats become more valuable — the same reason the last seat on a flight costs more than the first. This signal accounts for fill rate, the velocity at which it’s filling, and historical sell-out patterns for similar products.
Each signal contributes a directional force — up, down, or neutral — with a magnitude that reflects how strong the signal is. These get combined into a single net recommendation.
Putting the signals together
Here’s another part of our secret recipe: no two slots are priced the same way.
The algorithm doesn’t apply a formula like “if booking pace is up 20%, raise price by 5%.” There are no rules of that shape inside it. There is only a continuously updated picture of every signal against every other signal — and against everything the model has previously learned about this product, this channel, this time of year, this competitive context.
The weight given to any single input depends on the company it’s keeping. A competitor’s price cut means one thing when your own bookings are tracking strong; something completely different when they’re not. A slot at 70% capacity reads one way if it should be at 90% by now, and another way if it’s exactly where it should be. Strong demand on a Tuesday is not the same signal as strong demand on a Saturday. The algorithm has learned these distinctions — and many less obvious ones — from the bookings it has watched, and it carries that learning into every new decision.
Layered on top of every recommendation is a measure of conviction: how much the model trusts its own move. Early in a product’s life, conviction is low and adjustments are small and cautious. After enough observed bookings and tested prices, conviction grows and the algorithm acts with more weight behind each decision. Two slots that look identical on paper can carry very different conviction levels — and they get priced accordingly.
What you get is not one algorithm’s behavior. You get a different posture for every slot on your calendar, weighted by every piece of evidence the system has ever seen, refreshed every three hours.
Fast, autonomous, and self-correcting
Every slot gets re-evaluated every three hours. That means the algorithm has up to 8 chances per day to react to a market move — and it uses every one of them.
When a competitor drops their price at 2pm, your price has typically responded by evening. When a slot starts filling unexpectedly fast on Wednesday afternoon, the scarcity premium kicks in before Thursday morning. When a brand-new product hits the system with no booking history, the algorithm runs measured price tests every 24 hours — raise a couple of euros, watch bookings for a day, observe, adjust — until the demand ceiling reveals itself.
The exploration is genuinely autonomous. We don’t preset where to test; the algorithm chooses the moves that would teach it the most. And it tests in both directions: a higher price to see if customers will pay more (sometimes they will), a lower price to see if cheaper unlocks volume the operator was suppressing with a stale floor (sometimes it does). Both kinds of test produce knowledge. Each individual product typically explores 7 to 12 different price points across the first few weeks before settling into a steady-state corridor.
The most important property of this loop is what happens when a test goes nowhere. A higher price gets no bookings — the algorithm doesn’t sit on the bad decision. It pulls back, often within 36 hours, and books the lesson for the next slot. No human in the loop. No support ticket. No “the algo got it wrong this week.” The algorithm gets it wrong sometimes, briefly, and then it doesn’t.
What you experience as the operator is something closer to a pricing analyst or revenue manager who never sleeps, never gets distracted, and remembers every move they’ve ever made.
The myth we’d like to kill
The fear we hear most often, especially from operators who’ve never used dynamic pricing, sounds something like this: “So you’ll just keep pushing my prices up until customers stop booking?”
We understand the fear. It’s the same fear travelers have when surge pricing kicks in on a rainy Friday. But it’s a misunderstanding of what the algorithm is actually doing, and the data shows it clearly.
Here is the direction of every single price push we have ever applied to a live operator’s inventory, from launch through today:
A pricing system that only raised prices would be obviously broken. Demand isn’t always strong. Tuesdays in February don’t book like Saturdays in July. A system that can only push one direction is not pricing — it’s wishful thinking.
What our system does, most of the time, is adjust prices to discover demand the operator was suppressing with a stale price tier, to clear perishable seats that would have gone out empty, and to match competitors when the market softens.
The dramatic upside moves are the visible 5%. The other 95% is the quieter work.
When the algorithm does capture premium — and how it knows when to stop
That said, “doesn’t gouge” is not the same as “doesn’t push.” The fact that the algorithm moves prices down more often than up isn’t because it’s shy about upside. It’s because the conditions for real premium capture are specific, and they don’t apply to most slots most of the time. When the conditions are there, the algorithm captures hard.
Across the 548,000 upward pushes the system has made since launch, the distribution tells you something important:
About one in six upward pushes is a deliberate, double-digit move. Those happen when the data is telling us they should. Specifically, when two or three of these stack:
- The slot is filling faster than expected. Booking pace is the strongest leading indicator we have. When it lights up, the market is telling us — through actions, not opinions — that this date is worth more than the base price implied.
- Inventory is genuinely scarce. Not “the algorithm thinks it’s scarce.” Actually filling, at a velocity that historical patterns say will sell out. At 85% full on a Friday evening, the remaining seats are worth a meaningful multiple of the base price.
- The competitive set is tightening. When competitors are raising prices or running out of their own inventory, your product can ride that wave.
Since April alone, the algorithm has identified more than 15,000 distinct slots worth a bold premium push — averaging close to 2.5× the base price in cases where all three conditions converged. These aren’t moonshots. They’re price recommendations the market then validated by actually paying.
And here’s the discipline that makes the upside responsible: the moment booking response weakens, the algorithm backs off. It does not push prices into territory the market won’t validate. Every premium push is, in effect, a hypothesis the next booking either confirms or refutes. If it refutes — typically within 24 to 48 hours — the price moves back. That €156 e-bike pull-back further down this post is exactly this discipline in action.
Capturing premium responsibly isn’t a trade-off against capturing premium fully. The discipline is what lets the algorithm go higher when it should, because it knows it will catch itself if it’s wrong.
There’s a second layer of discipline that works before a single seat is sold: we measure how price-sensitive each product actually is. By watching how bookings respond to price across a product’s history, the algorithm learns whether an experience has genuine room to charge more, or whether its customers walk at the first euro of premium. A scarce but inelastic product — one whose buyers care more about getting the seat than the price — is allowed to push harder. An elastic one, where demand falls away quickly as price climbs, is held to a much tighter ceiling no matter how full it gets. So the scarcity premium isn’t one curve applied to everyone; it’s calibrated to what each product’s own customers have shown they’ll bear. A sold-out sunset cruise and a sold-out sightseeing bus, both at 90% capacity, can be treated very differently, because their customers are different.
What it looks like in practice
Let’s bring this to life with five real examples from our partner operators. Names are anonymized, but every number below is a real, redeemed booking at an algorithm-set price.
The capacity case (the dramatic one). A city tour operator in Iberia had a high-season weekend slot fill up fast. The base price was €35. The algorithm pushed the recommendation as high as €100.80 for the remaining seats — and across multiple slots in May and June, real bookings came in at €100+ per passenger. One slot in mid-June received a same-day booking for five people at €100 per pax, generating €500 from a single seat-block on a tour whose base price was €35. The customers paid the premium because, like the last seat on a flight, those final seats were genuinely scarce.
The pull-back case. On another Iberian operator’s product, the algorithm explored aggressively upward to €156, well above the base of €50. Bookings didn’t respond — the demand signal said that’s too much. Within hours, the algorithm autonomously pulled the price back down and continued to do so gradually. No human intervention, no operator complaint, no support ticket. Exploration in both directions, working as designed, self-correcting against bad ideas.
The soft-demand case (the one most operators don’t expect). During a quiet early-March week in a European capital, the algorithm detected that demand was running well below the seasonal baseline. It cut e-bike tour prices by 18% — from €33 to €27 — across multiple slots. The result: 148 guests across 72 bookings — seats that would almost certainly have stayed empty at the higher price. That isn’t “leaving money on the table.” That’s putting money on a table that would otherwise have stayed bare.
The both-channels case. An outdoor activity operator in western Europe had an afternoon slot reach 86% capacity. The algorithm raised prices from ~€30 to €48 across two distribution platforms simultaneously. Four passengers booked within 18 hours, generating €84 in extra revenue versus the base price.
The mature-product case. On a long-running heritage tour in the southern U.S., we measured a 10–13% revenue uplift over an equivalent period the year before, with +30% booking volume. We measured this with a difference-in-differences methodology and a placebo test on the prior year — the standard approach used by economists and the airlines to separate algorithm effects from seasonal effects. The increase wasn’t pure price-extraction. It was a combination of pricing competitively during soft periods to attract more bookings and capturing demand during peaks. The algorithm worked both ends of the market.
The pattern across all five: the algorithm isn’t trying to maximize each individual transaction. It’s trying to maximize the total revenue your inventory produces, which often means going down to bring volume in, not just up to extract more from existing customers.
What makes this hard (and where the engineering lives)
The honest answer to “what’s hard about this?” is not the seven signals. The seven signals are the easy part. The hard parts are:
Knowing when not to act. Over the algorithm’s lifetime, more than one in five pushes (21.6%) were holds — price unchanged. That isn’t the algorithm being lazy. That is the algorithm evaluating every signal, weighing every move, and concluding the current price is already right. The discipline to do nothing is harder than the impulse to do something.
Handling the noise. Most pricing signals are noisy. A single weekend’s bookings don’t tell you whether demand has changed. A single competitor price drop doesn’t mean the market has moved. Distinguishing signal from noise is where the machine-learning work lives, and it’s where this stops being “rules” and starts being statistics.
Combining signals coherently. Two signals pulling in opposite directions, three signals pulling weakly in the same direction, one signal screaming while the others whisper — every combination requires the algorithm to take a position. Getting that arithmetic right, slot after slot, hundreds of thousands of times a day, is where the years of work live.
What you control, always
We hear this concern often, and it’s worth saying clearly: you set the boundaries.
Operators define a minimum and maximum price for every product. The algorithm never recommends outside those bounds. You can set a hard cap — for example, “never exceed three times my floor price.” You can choose autopilot mode (recommendations applied automatically) or manual mode (you approve each one). And every recommendation comes with an explanation — why the algorithm is suggesting this price for this slot. We don’t believe in black boxes.
This matters because trust in dynamic pricing isn’t something we expect to be granted on day one. It’s something the algorithm has to earn — recommendation by recommendation, week by week.
What we’re not telling you (and why)
We’ve shared a lot here, but we’ve held some things back. We won’t tell you how we weight the seven signals against each other, how the booking pace model is structured, how we define competitive sets, what triggers exploration to begin or end, how the scarcity premium curve is shaped, or how we measure and apply each product’s price sensitivity. Those are real intellectual property and they took real engineering to build.
But the inputs aren’t secret, the philosophy isn’t secret, and the results aren’t secret. The secret is in the engineering — in handling millions of decisions a month consistently, in not over-reacting to noise, in knowing when to hold and when to move, and in doing this at a per-slot, per-day, per-channel level that simply cannot be done by hand.
Why this is the right time for tours
The tours and activities sector is roughly where airlines were in 1985 and where hotels were in 1990. Most operators are still on static or seasonal pricing. The competitive set hasn’t woken up. There is, in industry research terms, headroom — and it’s larger than what’s available in hotels or airlines today, because almost nobody has captured it yet.
Operators who adopt thoughtfully — with the right algorithm, the right guardrails, and a clear-eyed view of what they’re solving — are looking at credible revenue uplift in the high single digits to mid teens within the first few months. That’s not a wildly optimistic claim. It’s the same range hotels and airlines saw when they made the transition, applied to a sector that’s been waiting for the right tooling.
We built Walkway for that transition. The algorithm we’ve described is what’s powering it today, in production, across operators on three continents. More than 2.3 million pushes, 66,000 slots, six months in. Most of them, quietly bringing prices down to find demand. Some of them, capturing the value of a sold-out Saturday night.
If you’ve read this far, you already know more about how pricing decisions get made than most people in this industry. The rest is just running the system. We’d love to show you what it would do on your inventory.
Walkway provides dynamic pricing infrastructure for tour, activity, and attraction operators. We integrate with Ventrata, Xola, Prioticket, and Bokun, with more booking systems coming. To see what the algorithm would recommend on your products, get in touch.
Data in this post is sourced from Walkway’s production price-push history, December 16, 2025 through June 26, 2026.








