What it is
Every channel takes a cut. OTAs charge commissions or service fees to the host, the guest, or both. Direct bookings carry card processing fees and marketing costs.
Channel cost % = (host-side OTA fees + payment processing fees) ÷ GBV. Guest-paid service fees are not a cost to the host and are usually excluded from both sides.
Why operators track it
- Margin. One of the largest variable costs in a booking.
- Channel decisions. Compare channels on cost, ADR, and cancellation together.
- Owner statements. Owners see these fees and ask about them.
- Reconciliation. Expected fees vs fees in payouts reveals errors.
How it is calculated
Channel cost % = (OTA host fees + payment processing fees) ÷ gross booking value
- OTA host fees: from payout or reservation detail.
- Payment fees: processor fees, mainly on direct bookings.
- Marketing for direct: optional, shown separately.
- GBV as defined on the GBV page.
Worked example
Example data The same made-up portfolio is used on every hospitality page: a manager with 120 homes, four of them shown in detail.
In October the four example homes had GBV of $33,600 and channel costs of $3,890. Channel cost = 11.6%. These fee amounts are example values, not quoted channel rates.
How to read it
- Compare net of cost, not commission alone. A cheaper channel with more cancellations may be worse.
- Fee models change. Check each channel's current terms.
- Include direct costs honestly.
- We do not publish a benchmark. Levels vary by market, season, and property type.
Definitional choices and common pitfalls
- Host fees only or include guest fees. Usually host-side only.
- Marketing for direct. Include, or show separately.
- Basis. GBV or rent. GBV is common.
- Refunds. Fees refunded on cancellation reduce cost.
How different roles use it
| Role | How they use it |
|---|---|
| Revenue manager | Weighs channel cost against ADR and volume. |
| Finance / trust accounting | Reconciles fees to payouts. |
| Owner relations | Explains channel fees on statements. |
| Product / engineering lead | Captures fee lines per reservation. |
Questions it answers
- What are we paying to each channel?
- Is direct actually cheaper once marketing is counted?
- Did fees in payouts match expected fees?
How to present it in a report
- Cost % by channel next to ADR and cancellations.
- Total channel cost by month.
- Reconciliation of expected vs actual fees.
| Channel | GBV | Host fees | Payment fees | Cost % |
|---|---|---|---|---|
| OTA A | $15,000 | $1,950 | $0 | 13.0% |
| OTA B | $9,250 | $1,300 | $0 | 14.1% |
| OTA C | $2,950 | $450 | $0 | 15.3% |
| Direct | $6,400 | $0 | $190 | 3.0% |
Example amounts. Not quoted channel rates.
Data you need
Fields
| Field | What it means | Example value |
|---|---|---|
| Host fee | Per reservation from the channel | $120 |
| Payment fee | Per transaction | $30 |
| GBV | Per reservation | $1,850 |
| Payout | Net received | $1,730 |
What the raw data looks like
Example data A few rows as they might come out of the source system.
| Reservation | Channel | GBV | Host fee | Payment fee | Payout |
|---|---|---|---|---|---|
| R-88412 | OTA A | $1,850 | $120 | $0 | $1,730 |
| R-88544 | OTA C | $2,650 | $190 | $0 | $2,460 |
| R-88590 | Direct | $1,850 | $0 | $30 | $1,820 |
Where this data usually lives
- OTAs and booking channels (Airbnb, Vrbo, Booking.com, and partner distribution sites) hold payout reports, host fees, reviews, and cancellations. Payouts are usually net of host fees.
- Bank feeds and payment processors hold deposits, refunds, and chargebacks used to match payouts.
- Property management system (PMS) holds units, the calendar with block types, reservations, rates, fees, and often owner statements and trust accounting. For example: Guesty, Hostaway, OwnerRez, Track, Streamline, and Escapia. Some larger managers run their own in-house PMS.
- Accounting software holds the general ledger, AP, and bank reconciliation.
The same field can live in more than one system. Agree with the customer which one is the source of truth.
Common data gaps and traps
- Fees only in payout files, not on reservations.
- Batch payouts with fees netted.
- Processor fees in a separate system.
Related metrics
FAQ
- What commission do OTAs charge?
- It depends on the channel, the fee model the host chose, and the contract. Check each channel's current terms. We do not quote rates here.
- Are guest service fees a channel cost?
- Not to the host. Exclude them from both sides.
- Is direct booking free?
- No. It has payment processing and marketing costs.
For your data teamFormula variants, tables, SQL sketch, and dashboard spec
Formula details
channel_cost_pct = (SUM(host_fees) + SUM(payment_fees)) / gbv
Worked example detail
| Channel | GBV | Channel cost | % |
|---|---|---|---|
| OTA A | $15,000 | $1,950 | 13.0% |
| OTA B | $9,250 | $1,300 | 14.1% |
| OTA C | $2,950 | $450 | 15.3% |
| Direct | $6,400 | $190 | 3.0% |
| Total | $33,600 | $3,890 | 11.6% |
Tables and fields
| Table | Fields | Notes |
|---|---|---|
reservation_lines |
reservation_id, line_type, amount | line_type includes host_fee, payment_fee |
payouts |
payout_ref, channel, gross, fees, net, paid_at |
SQL sketch
SELECT r.channel,
SUM(l.amount) FILTER (WHERE l.line_type IN ('host_fee','payment_fee'))
/ NULLIF(SUM(l.amount) FILTER (WHERE l.line_type NOT IN ('tax','deposit','host_fee','payment_fee')),0) AS channel_cost_pct
FROM reservations r JOIN reservation_lines l USING (reservation_id)
WHERE r.status='confirmed' GROUP BY r.channel;
Build spec
Copy this into a ticket. It lists the grain, inputs, logic, and edge cases.
metric: hospitality.channel_cost
grain: one row per reservation
inputs:
- host fees
- payment fees
- GBV lines
logic:
- cost = host + payment fees
- pct = cost / gbv
edge_cases:
- refunded fees: net them
- batch payout: allocate by reservation GBV
- gbv 0: null
As a dashboard card
- Bar of cost % by channel with GBV as a label.
Common mistakes
- Quoting a channel's list rate instead of actual fees.
- Ignoring direct costs.
- Including guest-paid fees.