Añade una ciudad y mira la demanda que crean sus eventos
Events es la única API Feed sin import que lanzar: Veetal construye el dataset ciudad a ciudad y tu parte es un solo paso, dar de alta la ubicación. Lo que vuelve no es una agenda, es una previsión de demanda por noche, por perfil de huésped y por anillo de distancia.

Qué vas a construir
Un año de eventos de Barcelona con, para cada uno, roomnights totales, la ventana de reserva (que abre antes que el evento), presión diaria contra el inventario de la ciudad, el reparto por categoría de hotel y perfil de huésped, y la distribución geográfica por anillos.
Cómo funciona
- 01Lo único que tienes que hacer
- 02Lee el calendario
- 03La parte que pone precio a las habitaciones
- 04Dónde en la ciudad, no solo cuántas
- 05Asistencia no es demanda
- 06Los tipos que se comportan distinto
- 07Qué pasa después
Paso a paso
Al terminar podrás preguntar "qué está pasando en Barcelona y cuánta demanda hotelera va a generar" y obtener una respuesta con roomnights por día, presión sobre el inventario de la ciudad y en qué zona se van a reservar esas habitaciones.
Qué necesitas: el destino dado de alta como ubicación en tu cuenta. Nada más.
Lo que cuesta: los eventos se facturan por ubicación y por mes, no por petición. No hay import que lanzar ni schedule que configurar — leer es la parte barata.
Lo único que tienes que hacer
Events es la rara entre las APIs Feed: no tiene import. El dataset lo produce el propio pipeline de Veetal, ciudad a ciudad. Tu parte del contrato es un solo paso: decirnos qué ciudad te importa.
En Locations, Add locations, y busca el destino. El diálogo declara su propósito en el subtítulo: "You will use them to search events in the destination".

Barcelona devuelve cuatro candidatas en cuatro países. Elige la que no es y todos los eventos que leas después son de otra ciudad. Usa Show Map si el nombre no basta para decidir.

La fila enseña el tier y las coordenadas que resolvió el backend. Copia su id con el botón de copiar de la fila (o léelo de GET /v3/account/location): ese es el location_id que pide toda llamada de eventos.
⚠️ Si la das de alta por API (POST /v3/account/location), name tiene que ser el nombre real del destino — Veetal lo usa para encontrar el booking_dest_id en Booking, y un destino rebautizado devuelve el error 731.
Fíjate en lo que esta API no tiene: ni pestaña de Imports, ni de Schedules, ni import que lanzar. La página del feed de Events solo tiene Locations, Events y Requests; encima de las pestañas, cinco gráficas resumen el dataset — por tipo, por tipo de público, evolución, mensual y por asistentes.
Lee el calendario
GET /v3/feed/events/{location_id}, con un rango de fechas opcional y min_impact. Esta es una respuesta real de Barcelona, recortada a lo que importa:
{
"name": "Smart City Expo World Congress",
"acronym": "SCEWC",
"type": "fair_convention",
"subtype": "congress_technology",
"status": "verified",
"dates": { "start": "2026-11-03", "end": "2026-11-05", "duration_days": 3 },
"location": {
"venue": "Fira Barcelona - Recinte de Gran Via",
"address": "Av. Joan Carles I, 64, 08908 Barcelona, Spain"
},
"attendance": { "unique_visitors": 27000, "magnitude": "medium" }
}
Hasta ahí podrías llegar con una web de agenda. El resto es para lo que existe de verdad el dataset.
La parte que pone precio a las habitaciones
"hotel_impact": {
"level": "high",
"score": 0.559,
"total_roomnights": 63061,
"booking_window": { "start": "2026-11-02", "end": "2026-11-06" },
"city_pressure": {
"city_inventory_rooms": 40000,
"peak_pressure_pct": 0.5592,
"avg_pressure_pct": 0.3153,
"peak_day": "2026-11-03",
"days_at_or_above_80pct": 0
}
}
63.061 roomnights sobre una ciudad de 40.000 habitaciones, con un pico del 55,9 % de todo el inventario el 3 de noviembre. Los porcentajes de presión son fracciones de 0 a 1, y pueden pasar de 1 — eso significa que el evento pide más habitaciones de las que tiene la ciudad.
Fíjate en que la ventana de reserva abre el 2 de noviembre, el día anterior al arranque del congreso. Los delegados llegan la noche antes. Si tu calendario de tarifas trata el 2 de noviembre como un lunes cualquiera, ya has dejado dinero encima de la mesa antes de que empiece el evento.
Después hotel_impact.daily desglosa la demanda día a día:
{
"date": "2026-11-03",
"roomnights": 22367,
"pressure_pct": 0.5592,
"by_category": { "budget_hotels": 1734, "mid_range_hotels": 12737, "luxury_hotels": 7896 },
"by_profile": { "international_business": 17290, "national_business": 4592, "international_leisure": 276 }
}
17.290 de esas roomnights son business internacional. Ese es un huésped completamente distinto —y un techo de precio completamente distinto— que un pico de ocio del mismo tamaño.
Dónde en la ciudad, no solo cuántas
hotel_impact.geographic_distribution sitúa esa demanda en el mapa:
"geographic_distribution": {
"weighted_radius_km": 4.9,
"concentration": "near_venue",
"shares": { "at_venue": 0.092, "near_venue": 0.656, "regional": 0.025 },
"rings": {
"2000-5000": {
"mid_range_hotels": { "roomnights": 20073, "impact": "high" },
"luxury_hotels": { "roomnights": 12909, "impact": "high" }
}
}
}
El 65,6 % de la demanda cae cerca del recinto, con un radio ponderado de 4,9 km, concentrada en hoteles de gama media y alta del anillo de 2 a 5 km. Si eres un hotel de gama media a dos kilómetros de Fira Gran Via, este evento es tuyo. Si eres un económico al otro lado de la ciudad, el mismo evento apenas te mueve — y el dataset te lo dice en vez de dejarte adivinar.
Asistencia no es demanda
Compara dos eventos de Barcelona del mismo feed:
| Smart City Expo | Manga Barcelona | |
|---|---|---|
| Visitantes | 27.000 | 81.424 |
| Roomnights | 63.061 | 42.853 |
| Presión pico | 55,9 % | 31,2 % |
| Concentración | near_venue (4,9 km) | dispersed_regional (8,5 km) |
Cifras tal como las devolvía el feed en octubre de 2026; el dataset se recalcula cada mes.
Manga Barcelona atrae tres veces más gente y genera un tercio menos de roomnights, con menos presión y repartidas por toda la región. La razón está en el audience mix: 43.253 de sus asistentes son local_no_stay — se van a dormir a casa. Un congreso de 27.000 asistentes, sobre todo business internacional, llena más habitaciones que una feria de 81.000 visitantes, la mitad locales — justo el error en el que te mete leer una lista de "los eventos más grandes".
Los tipos que se comportan distinto
type: "cruise"añade un bloquecruisecon la lista de escalas barco a barco: del 16 al 20 de octubre, 24 barcos, 81.232 pasajeros en escalas de inicio o fin de crucero (turnaround), 51.988 roomnights, cada escala con su fecha, su barco y sus pax. Son noches de pre y post crucero, estimadas desde el calendario del puerto.type: "holiday"es informativo y no lleva impacto hotelero. Hay además una ruta propia,GET /v3/feed/events/{location_id}/holidays, para festivos oficiales y vacaciones escolares de los mercados emisores.- Cada evento trae un array
editionscon todas las ediciones de su serie (pasadas, actual y futuras), cada una con sus fechas y la cifra de asistencia publicada por su fuente, para contrastar la estimación de asistencia con lo que atrajeron los años anteriores.
Qué pasa después
Filtra con min_impact (de high para arriba suele ser el conjunto accionable) y event_type, y recorre el año con from_date/to_date. La respuesta es un array sin más, limitado por limit (250 por defecto, máximo 500): una ciudad como Barcelona tiene varios cientos de eventos al año, así que pagina con offset hasta que una página vuelva con menos de limit.
El maridaje natural es el feed de Booking location search del mismo destino (una entidad Location search aparte, con su propio import): los eventos te dicen cuándo llega la demanda y de qué tipo, y location search te dice a cuánto la están cobrando los hoteles del destino.
Preguntas
¿Tengo que lanzar un import para tener eventos?
No, y no hay ninguno que lanzar. Events es la única API Feed sin import y sin pestaña de imports: el dataset lo construye el propio pipeline de Veetal, ciudad a ciudad. Tú das de alta la ubicación y lees.
El endpoint me devuelve un array vacío. ¿Qué pasa?
O la ciudad es nueva para Veetal y aún no ha corrido su primera construcción (las ciudades se construyen en un run mensual a principios de cada mes), o tu rango de fechas cae fuera de lo construido. Comprueba que la ubicación es la correcta —Barcelona existe en cuatro países— y amplía from_date/to_date antes de concluir que no hay nada.
¿Qué significa una presión por encima de 1?
Que el evento necesita más habitaciones de las que tiene la ciudad. La presión se expresa como fracción de city_inventory_rooms de 0 a 1, y se le permite pasarse: es una estimación de demanda, no una lectura de ocupación. Todo lo que se acerque a 1 es una noche para tarificar con agresividad.
¿Por qué un evento con más visitantes genera menos roomnights?
Porque la asistencia cuenta personas y las roomnights cuentan camas. Mira el audience_mix: los asistentes clasificados como local_no_stay duermen en su casa. Manga Barcelona trae unos 81.000 visitantes pero más de 43.000 son locales, así que produce menos roomnights que un congreso internacional de 27.000 asistentes.
¿Para qué sirve la ventana de reserva?
Es el rango de noches que el evento genera de verdad, y suele empezar antes que el propio evento — los delegados llegan la noche anterior. Esa primera noche es la que se le escapa a casi todos los calendarios de tarifas.
¿Cómo sé si un evento afecta a mi hotel en concreto?
Usa hotel_impact.geographic_distribution. concentration y weighted_radius_km te dicen cómo de apretada está la demanda alrededor del recinto, y rings desglosa las roomnights por franja de distancia cruzada con categoría de hotel. Un evento near_venue a 4,9 km con impacto alto en gama media del anillo de 2 a 5 km es una propuesta muy distinta según dónde estés.
Construye el tuyo
Empieza gratis con 1.000 créditos de API. Sin tarjeta ni llamada comercial.
¿Qué quieres construir con eventos?
Dilo en una línea y te devolvemos el prompt, la receta si ya existe y las APIs sobre las que corre, empezando por eventos.