Skip to content
HotelSEO Lab
← The Lab
Hotel Measurement Specifics

My Promo Code Redemption Report: Tracking Which Offers Actually Move Bookings

How I track redemption volume, discount cost, and incremental versus cannibalized bookings per promo code so you can kill offers that just discount demand you already had.

HotelSEO LabDecember 13, 2026 9 min read

I have a confession that will make some revenue managers wince: for years I ran promo codes the way most independent hoteliers do. I made up a code, slapped it in an email, watched a few bookings come in, and told myself it worked. It “worked” the way a horoscope works. Something happened, the timing felt right, so I assumed I caused it.

Then I actually built a redemption report and looked at the numbers honestly. About half my offers were doing nothing but handing a discount to guests who were already going to book at full rate. I was paying people to do what they were already doing. That is the single most expensive mistake I see independent hotels make, and almost nobody measures it.

So this is my promo code redemption report — the actual columns I track, how I separate real new business from cannibalized business, and how I decide which offers to kill. If you run codes through your booking engine and you have never asked “did this offer create demand or just discount it?”, this one is for you.

Why most promo code tracking is theater

Here is the trap. You send a SPRING20 code. Forty bookings come in over the next two weeks with that code attached. You add up the revenue, feel great, and renew the offer next quarter.

What that math never asks is the only question that matters: how many of those forty people would have booked anyway?

If thirty of them were already planning to stay with you — they saw your Instagram, they had your tab open, they were going to hit “book” regardless — then you just gave thirty guests a 20% discount for free. The offer didn’t move them. It moved your margin, in the wrong direction.

A redemption count tells you the offer was used. It does not tell you the offer worked. Those are completely different things, and conflating them is why so many hotels run a permanent state of low-grade discounting that slowly erodes their average rate.

Redemption volume measures usage. Incrementality measures impact. An offer that gets redeemed 200 times but creates 12 net-new bookings is not a winning offer — it is a 188-deep discount on demand you already owned.

The columns in my actual redemption report

I keep this deliberately simple because a report nobody updates is worthless. Here are the fields I track per code, and why each one earns its place.

ColumnWhat it capturesWhy it matters
Code + channelOne unique code per offer per channelYou cannot attribute anything if email and social share a code
RedemptionsBookings that used the codeThe headline number everyone already tracks
Room nightsTotal nights on those bookingsA 4-night stay is worth more than four 1-night stays
Gross revenueRevenue before the discountYour top-line credit
Discount costDollars actually given awayThe line most reports quietly omit
Baseline paceNormal booking rate for those dates/segmentThe comparison that reveals cannibalization
Est. incrementalBookings I believe are genuinely newThe number I actually manage to

The first five are easy — your booking engine and PMS hand them to you. The last two are where the real work is, and where almost everyone stops. Let’s get into them.

How I estimate incremental versus cannibalized

This is the heart of it. You will never get a perfect, lab-grade number here, and anyone selling you one is lying. But you can get directionally honest, which is infinitely better than the comforting fiction of raw redemption counts.

My approach is comparison against a baseline. For any offer, I ask: what was the booking pace for these exact dates and this exact guest segment before the code went out, and during periods when no code was live?

The cleanest signal I ever get is a true holdout. If I send an offer to half my email list and withhold it from a matched half, the difference in bookings between the two groups is about as close to “incremental” as an independent hotel can practically measure. It is not always feasible, but when the stakes are high — a big seasonal push — it is worth the setup.

When a holdout isn’t realistic, I lean on three tells:

  1. Booking window. Codes that pull in last-minute bookings for dates that were not going to fill are far more likely to be incremental than codes redeemed 90 days out for a peak weekend that always sells.
  2. New versus repeat. A code redeemed by a first-time guest from a city you don’t usually pull from smells like new demand. The same code redeemed by your regular who stays monthly is almost certainly cannibalized.
  3. Rate sensitivity of the segment. Leisure travelers chasing a deal behave differently than a corporate guest on a fixed per-diem. I weight my incrementality guesses accordingly.

None of these are proof. Together they are a reasonable story, and a reasonable story beats a flattering count every single time.

A worked example (illustrative, not a real client)

Let me walk through how this changes a decision. These numbers are made up to show the method — do not treat them as a benchmark.

Say I’m looking at two offers I ran last quarter:

On a raw redemption report, WEEKEND15 looks like the winner — twice the redemptions, twice the revenue credit. On an incrementality basis, it’s the one I kill. MIDWEEK20, the “smaller” offer, is doing the actual job: filling rooms that would otherwise go empty.

That inversion is the whole reason this report exists. The offer that looks best is often the one quietly costing you the most.

How this ties back to your direct booking economics

Here is where promo codes connect to the bigger picture I bang on about constantly. The point of running direct offers is to shift your booking mix in a healthier direction — to win back more business you’d otherwise hand to an OTA, not to undercut your own full-rate direct demand.

OTA commissions typically run 15 to 25%. If a smart, well-targeted code converts a guest who was about to book through an OTA into a direct booking, even a 15% discount can come out ahead of the commission you’d have paid — and you keep the guest relationship, the email, the data. That is a genuinely good trade. I walk through the full arithmetic in the book-direct math piece, and it’s the lens I want you using here.

But a code that discounts a guest who was already booking direct at full rate is pure margin leakage. Same discount, opposite outcome. The redemption report is how you tell those two apart instead of averaging them into one cheerful-looking number.

The goal was never “more redemptions.” It was a healthier booking mix at a defensible average rate. A promo code that lowers your rate without changing your mix is a cost dressed up as a marketing win.

If you don’t yet have a handle on how much OTA dependence is actually costing you, that’s the prerequisite conversation. I lay out the mechanics of why guests get intercepted in how the OTAs steal your search traffic — because plugging that leak is usually worth far more than any discount you could run.

My kill-or-keep rules

Once the report is populated, the decisions get refreshingly blunt. Here’s how I triage offers each quarter.

Kill it when:

Keep and scale it when:

Investigate further when:

A quarterly cull is enough for most independents. The discipline is simply having the cull — most properties never retire an offer; they just keep stacking codes until the whole rate structure is mush.

Where promo tracking sits in a real measurement stack

Promo code redemption is one slice of a larger habit: actually measuring what your direct channel does instead of trusting vibes. It plugs into the same booking engine and analytics setup you’d use to measure conversion rate, abandonment, and channel attribution. If your booking flow itself is leaking — slow, clunky, or burying the direct offer — no amount of clever code tracking saves you. That’s the conversion-side work I cover under book-direct CRO, and it’s the natural partner to this report.

And honestly, before you obsess over squeezing another point out of a promo code, make sure the front of the funnel is healthy: that you actually rank for your own name, that you show up in local search and in AI answers, and that you’re not feeding every high-intent searcher straight to an aggregator. The discount is the last lever, not the first. Plenty of properties try to discount their way out of a visibility problem, and it never works — you can’t promo-code your way to demand that was never going to find you.

Start with one report next quarter

You don’t need software. You need one spreadsheet, a unique code per offer per channel, and the willingness to look at the cannibalization column without flinching. Run it for a single quarter and I promise at least one of your “best” offers turns out to be your most expensive one.

If you’d like help wiring up clean tracking — unique codes, baseline pace, the incrementality logic, and the booking-engine plumbing behind it — that’s exactly the kind of work I do. Take a look at book-direct CRO to see how I approach the direct-channel economics, then book a call and we’ll pull apart your current offers together. I’d rather help you kill three lazy discounts than watch you renew them for another year.

FAQ

Quick answers

What is hotel promo code redemption tracking?

It is the practice of attaching a unique code to each offer, then measuring how many bookings used it, how much discount you gave away, and whether those bookings were genuinely new demand or guests who would have booked anyway at full rate.

How do I tell incremental bookings from cannibalized ones?

Compare the booking pace of guests who used the code against your normal baseline for the same dates and segment. If the discounted nights were already filling at the same rate without a code, most of those redemptions are cannibalized rather than incremental.

Should every promo code have its own tracking code?

Yes. One shared code across email, social, and your homepage makes it impossible to know which channel earned the booking or what the true cost of each offer was. A unique code per offer and channel is the whole point.

Does discounting hurt my direct booking strategy?

Not if the discount is genuinely winning back business you would otherwise lose to an OTA. It hurts when you discount demand that already chose you direct at full price, which quietly lowers your average rate for no gain.

Keep reading

More from the Lab

Free intro call

Let's go find out why the OTAs are outranking you for your own name.

20 free minutes. We'll look at your hotel live, show you where you're invisible — on Google and in the AI answers — and tell you straight whether we can help.

No lock-in · No 12-month handcuffs · You talk to the strategist