Un huésped encuentra tu hotel, revisa tu web y luego ve la misma habitación más barata en otro sitio. Reserva allí, tú pagas una comisión, y el huésped aprende que tu propia web no es el lugar donde reservar. Cuando esto ocurre porque un socio ha filtrado una tarifa que nunca quisiste vender al público, tu propio inventario se está usando para venderte por debajo de tu precio.
El seguimiento de la paridad de tarifas es cómo los hoteles y las marcas de viajes descubren dónde ocurre esto, en qué mercados y a través de qué canales. Esta guía cubre qué significa la paridad ahora que han cambiado las reglas, por qué la mayoría de las comprobaciones de paridad generan falsas alarmas, y código probado que compara lo mismo con lo mismo.
Conclusiones clave
- La paridad ya no es algo que una agencia de viajes online pueda imponer a los hoteles en gran parte de Europa. Ahora es sobre todo del interés del propio hotel: no verse superado en precio con sus propias habitaciones.
- Las rebajas suelen venir de tarifas mayoristas o de paquete filtradas que aparecen en sitios con los que el hotel nunca contrató, no de las agencias principales en sí.
- Los precios deben comprobarse desde los mercados donde los huéspedes reservan. La misma habitación puede mostrarse a precios, monedas y visualizaciones de impuestos distintos según dónde esté el comprador.
- Compara solo productos idénticos: mismas fechas, habitación, régimen y condiciones de cancelación, con los impuestos incluidos y las monedas convertidas. En nuestro ejemplo construido, una comprobación rápida generó cinco alertas, tres de ellas falsas; la comprobación normalizada generó exactamente las dos rebajas reales.
- Trata una rebaja detectada como el inicio de una investigación: averigua la tarifa de qué socio se filtró y luego corrige el contrato o la configuración de distribución.
Qué significa ahora la paridad de tarifas
Históricamente, las agencias de viajes online exigían a los hoteles ofrecerles precios al menos tan buenos como en cualquier otro sitio. Una cláusula de paridad “amplia” cubría todos los canales; una “estrecha” cubría solo la web propia del hotel. Ambas se han desmantelado en gran parte de Europa:
- Alemania. La Oficina Federal de Cárteles prohibió las cláusulas de mejor precio estrechas de Booking.com en 2015, y el Tribunal Federal de Justicia confirmó en mayo de 2021 que infringen el derecho de la competencia.
- Unión Europea. En septiembre de 2024, el Tribunal de Justicia dictaminó que las cláusulas de paridad de precios de las plataformas, amplias o estrechas, no pueden tratarse en principio como restricciones accesorias exentas del derecho de la competencia.
- Ley de Mercados Digitales. Booking.com fue designado guardián de acceso en mayo de 2024 y tuvo que cumplir a partir de noviembre de 2024. Las cláusulas de paridad están prohibidas para esta empresa bajo la Ley, de modo que los hoteles y otros proveedores pueden ofrecer precios y condiciones distintos, incluso mejores, en sus propias webs y otros canales, y Booking.com no puede aplicar medidas con el mismo efecto, como subir comisiones o retirarlos de los listados.
- En otros lugares. Varios países, entre ellos Francia, Italia, Austria, Bélgica y Suiza, han restringido las cláusulas de paridad para las plataformas de alojamiento en su legislación nacional.
Esto es información general, no asesoramiento legal; las reglas difieren según el país y el contrato, así que consulta con un abogado sobre tus propios acuerdos.
La consecuencia práctica es que la paridad ha cambiado de bando. Un hotel ahora suele ser libre de fijar precios por debajo de las agencias en su propia web, y muchos quieren hacerlo. Lo que aún necesita saber es si alguien está vendiendo sus habitaciones por debajo de su propio precio directo, y cómo.
De dónde vienen las rebajas
| Fuente | Cómo ocurre | Qué muestra el seguimiento |
|---|---|---|
| Tarifas mayoristas filtradas | Tarifas netas pensadas para incluirse en paquetes se revenden como habitaciones sueltas | Sitios desconocidos por debajo de tu tarifa directa, a menudo en metabuscadores |
| Desagregación de paquetes | La tarifa de hotel más vuelo de un operador turístico se desglosa y se vende como habitación | Precios por debajo de lo que cualquier canal público debería ofrecer |
| Tarifas de socio y móvil | Un canal muestra un precio más bajo a usuarios registrados o de la app | Diferencias que solo aparecen en ciertos dispositivos o sesiones |
| Precios por moneda y mercado | Un canal fija precios distintos según el país o la moneda del comprador | Rebajas en algunos mercados y no en otros |
| Cargas obsoletas o erróneas | Un cambio de tarifa no llegó a todos los canales | Diferencias de corta duración en fechas concretas |
Solo algunas de estas son responsabilidad de alguien, y solo algunas pueden solucionarse con una llamada de teléfono. El seguimiento tiene que mostrar suficiente detalle para distinguirlas.
Por qué las comprobaciones de paridad ingenuas generan falsas alarmas
Una comprobación de paridad parece simple: encontrar el mismo hotel en varios sitios y comparar precios. Hecho así, llena un panel de alertas que no son reales, y pasa por alto algunas que sí lo son. Las razones habituales:
- Productos distintos. Una tarifa no reembolsable o una tarifa solo habitación no es una rebaja de una tarifa flexible con desayuno.
- Visualización de impuestos. Muchos sitios mostrados a compradores de EE. UU. muestran precios antes de impuestos; la mayoría de los sitios europeos los incluyen. El mismo total puede parecer varios puntos porcentuales más barato.
- Moneda. Convertir a tipos de cambio distintos, o comparar entre monedas directamente, crea diferencias de uno o dos puntos porcentuales por sí solo.
- Mercado. El precio de un canal en Estados Unidos no es comparable con tu precio directo tal como se muestra en Alemania. Compara cada mercado consigo mismo.
- Fechas y ocupación. Distintas duraciones de estancia y números de huéspedes producen totales distintos para la misma tarifa por noche.
El código
El módulo que sigue compara presupuestos solo cuando venden lo mismo en las mismas condiciones, normaliza la visualización de impuestos y la moneda, compara cada canal con el precio directo mostrado al mismo mercado, y reporta la diferencia. Los códigos de habitación deben ser tus propios códigos normalizados, mapeados a partir de la denominación de cada canal, porque los canales describen la misma habitación de forma distinta.
from collections import defaultdict
from dataclasses import dataclass
from decimal import ROUND_HALF_UP, Decimal
@dataclass(frozen=True)
class Quote:
channel: str # "direct", or the name of the OTA or metasearch listing
market: str # where the shopper was, e.g. "DE" or "US"
hotel: str
check_in: str
nights: int
room: str # your own normalised room code, not the channel's wording
board: str # "room-only", "breakfast", ...
refundable: bool
price: Decimal # total for the stay, exactly as displayed
currency: str
taxes_included: bool
def product_key(q):
"""Two quotes are only comparable when they sell the same thing on the same terms."""
return (q.hotel, q.check_in, q.nights, q.room, q.board, q.refundable)
def comparable_total(q, fx_to_base, hotel_tax):
"""Total price in the base currency with the destination's taxes included."""
amount = q.price if q.taxes_included else q.price * (1 + hotel_tax[q.hotel])
return (amount * fx_to_base[q.currency]).quantize(Decimal("0.01"), ROUND_HALF_UP)
def find_undercuts(quotes, fx_to_base, hotel_tax, tolerance=Decimal("0.01")):
"""Compare every channel with the direct rate shown to the same market, and report cheaper offers."""
groups = defaultdict(list)
for q in quotes:
groups[(product_key(q), q.market)].append(q)
undercuts, unmatched = [], []
for (key, market), group in groups.items():
direct = [comparable_total(q, fx_to_base, hotel_tax) for q in group if q.channel == "direct"]
if not direct:
unmatched.extend(q for q in group)
continue
best_direct = min(direct)
for q in group:
if q.channel == "direct":
continue
total = comparable_total(q, fx_to_base, hotel_tax)
gap = (best_direct - total) / best_direct
if gap > tolerance:
undercuts.append({"channel": q.channel, "market": market, "hotel": key[0], "check_in": key[1],
"direct": best_direct, "channel_total": total, "gap": round(gap, 3)})
return sorted(undercuts, key=lambda u: u["gap"], reverse=True), unmatched
Dos decisiones de diseño importan. Los impuestos se aplican por hotel, porque pertenecen al destino, no al país del comprador. Y los presupuestos sin una oferta directa comparable se devuelven por separado en lugar de descartarse, ya que un canal que vende un producto que tú no vendes directamente es un hallazgo en sí mismo.
Un ejemplo trabajado
Probamos el módulo con un conjunto construido de diez presupuestos para un hotel y una estancia, mostrados a compradores en Alemania, Estados Unidos y Reino Unido, con dos rebajas genuinas plantadas entre ellos. Es una ilustración con precios inventados, no una medición de ningún hotel o canal real.
| Comprobación | Alertas generadas | Rebajas reales encontradas | Falsas alarmas |
|---|---|---|---|
| Rápida: precio mostrado frente al precio directo en el mismo mercado | 5 | 2 | 3 |
| Normalizada: mismo producto, impuestos incluidos, una sola moneda | 2 | 2 | 0 |
Las tres falsas alarmas son las clásicas: un listado estadounidense que mostraba su precio antes de impuestos y que en realidad estaba en paridad, una tarifa no reembolsable, y una tarifa solo habitación. La comprobación normalizada dejó a un lado estas dos últimas por no ser comparables y las listó por separado. Un listado del Reino Unido un 0,5% por debajo del directo tras la conversión se quedó dentro de la tolerancia del 1%, que es aproximadamente el tamaño de diferencia que la sola conversión de moneda puede crear.
Recopilar los presupuestos
La calidad del seguimiento de paridad depende de recopilar lo que los huéspedes realmente ven:
- Compra desde el mercado del huésped. Los canales y los resultados de metabuscadores difieren según el país del visitante, así que recopila desde dentro de cada mercado que te importe. Nuestra prueba de si las aerolíneas y los hoteles cotizan de forma distinta según el país de salida muestra por qué esto no es opcional.
- Mantén las sesiones consistentes. Haz coincidir idioma, moneda y zona horaria con el mercado, como se explica en cómo hacer coincidir la geolocalización, la zona horaria y el idioma del proxy, para que un canal no te cambie a los precios de otro mercado a mitad de sesión.
- Comprueba los dispositivos por separado. Las tarifas móviles y de app pueden diferir de las de escritorio; prueba ambas donde tus huéspedes usen ambas.
- Captura las condiciones completas. Registra régimen, política de cancelación, ocupación y si los impuestos están incluidos, no solo el precio principal. Los números mostrados también necesitan analizarse según el idioma y región, como se explica en normalizar precios, números y fechas entre distintos idiomas y regiones.
- Muestrea fechas, no solo mañana. Las filtraciones a menudo aparecen en fechas futuras concretas, así que cubre un abanico de fechas de llegada y duraciones de estancia.
- Recopila con cortesía. Comprueba un conjunto sensato de fechas según un calendario en lugar de machacar los resultados de búsqueda, y respeta los términos de cada sitio.
El mismo enfoque de recopilación sustenta el scraping de precios de vuelos y hoteles en general, y nuestro caso de uso de viajes explica cómo los equipos lo aplican en muchas propiedades.
De la alerta a la solución
Una alerta de rebaja es el comienzo del trabajo, no el final:
- Confírmala. Vuelve a comprobar la oferta desde el mismo mercado, y asegúrate de que el proceso de reserva realmente termina en ese precio.
- Rastréala. Una reserva de prueba, o el código de tarifa y el proveedor mostrados al finalizar la compra, suele identificar la tarifa de qué socio se filtró.
- Actúa sobre el origen. Ajusta el contrato mayorista, cambia qué tarifas recibe un socio, o cierra un canal para las fechas afectadas.
- Haz seguimiento a lo largo del tiempo. Registra las rebajas por socio y mercado. Un socio que filtra repetidamente es una conversación comercial, no un problema de seguimiento.
En resumen
La paridad de tarifas ha dejado de ser una cláusula que imponen las agencias y se ha convertido en una pregunta que los hoteles se hacen a sí mismos: ¿está alguien vendiendo mis habitaciones más barato de lo que lo hago yo? Responderla de forma fiable significa recopilar precios de los mercados donde reservan los huéspedes y comparar solo productos idénticos, con los impuestos y la moneda normalizados.
Hazlo así, y las alertas de paridad se vuelven escasas y reales. Sáltatelo, y el panel se llena de visualizaciones de impuestos y tarifas no reembolsables mientras la tarifa filtrada que te está costando reservas se esconde entre el ruido.
Fuentes y referencias
- Tribunal de Justicia de la Unión Europea, nota de prensa sobre el asunto C-264/23, Booking.com, 19 de septiembre de 2024.
- Bundeskartellamt, el Tribunal Federal de Justicia confirma la ilegalidad de las cláusulas de paridad de precios estrechas de Booking.com, 2021.
- Comisión Europea, Booking debe ahora cumplir con la Ley de Mercados Digitales, noviembre de 2024.
- Datos de prueba construidos y código por Shifter, 3 de octubre de 2026.