Tony Wang6 min de lecturaCómo scrapear Agoda en 2026 (API y Python)
Scrapea Agoda en 2026: búsqueda y detalle de hoteles, homes, actividades y vuelos — DIY, sin código o API estructurada, con lo legal.
La forma más rápida de scrapear Agoda en 2026 es llamar a una API estructurada que devuelve JSON normalizado — búsqueda y detalle de hoteles, viviendas vacacionales, actividades y vuelos — en lugar de hacer ingeniería inversa de los endpoints internos de Agoda y montar una flota de navegadores para sortear sus defensas. Agoda es una de las OTA más grandes originarias de Asia y compite de frente con Booking.com en el sudeste asiático y más allá, pero no tiene una API pública de lectura sencilla y defiende sus páginas en consecuencia. Esta guía cubre los tres enfoques, qué devuelve cada superficie y las bases legales.
¿Por qué scrapear datos de Agoda?
Los datos de hoteles, viviendas, actividades y vuelos de Agoda alimentan varios casos de uso recurrentes:
- Monitoreo de precios y disponibilidad de hoteles — seguir cómo se mueve la tarifa de un alojamiento según ciudad, fecha y temporada.
- Comprobaciones de paridad de tarifas entre OTAs — comparar el precio de un hotel en Agoda con Booking.com, Expedia o el sitio propio del alojamiento.
- Investigación de mercado — medir la densidad de oferta de hoteles y viviendas vacacionales por ciudad, especialmente en los mercados de APAC donde Agoda es fuerte.
- Productos de metabúsqueda de viajes e itinerarios — combinar datos de hoteles, actividades y vuelos para un mismo destino.
- Pipelines de viajes con IA — alimentar datos normalizados de hoteles y vuelos a un agente o asistente de planificación de viajes en lugar de scrapear HTML sobre la marcha.
¿Es legal scrapear Agoda?
Opción 1: hacerlo tú mismo en Python (y por qué falla)
Las páginas de búsqueda y de hotel de Agoda se renderizan a partir de llamadas internas de estilo XHR/GraphQL detrás de JavaScript del lado del cliente, así que un scraper DIY tiene que replicar esas peticiones:
import requests
# Agoda's search UI calls internal endpoints that aren't documented for public use
resp = requests.get(
"https://www.agoda.com/api/en-us/serp/search/hotels",
params={"cid": -1, "city": 9395},
headers={"User-Agent": "Mozilla/5.0 (compatible; research-bot/1.0)"},
)
Funciona en la demo y luego se rompe:
- Sin API self-service abierta. Las verdaderas APIs de Partner de Agoda (Search, Content, CDS) requieren convertirte en afiliado o socio MSE aprobado a través de un account manager — no es un formulario de registro para un caso de uso de investigación o monitoreo.
- Endpoints internos, sin garantía de estabilidad. Las formas de las peticiones detrás de las páginas de búsqueda y de propiedad no son un contrato público; Agoda puede cambiar parámetros, headers o campos de respuesta sin previo aviso.
- Anti-bot en el storefront. Agoda protege sus páginas con detección de bots y limitación de tasa ajustadas para un flujo de reserva, no para una extracción de investigación — espera bloqueos o páginas de desafío desde un cliente HTTP simple a cualquier volumen real.
- Cuatro superficies distintas, cuatro formas distintas. Hoteles, viviendas vacacionales, actividades y vuelos son productos independientes con identificadores propios (property id, activity id, ruta IATA) — cubrir los cuatro implica cuatro integraciones, no una.
Opción 2: herramientas sin código o ya hechas
Un puñado de actors de scraper de marketplace apuntan específicamente a la búsqueda de hoteles de Agoda y sirven para una extracción puntual ocasional, pero heredan la misma fragilidad frente a anti-bot y endpoints internos que el DIY, se rompen en silencio cuando Agoda cambia su markup, y no cubren viviendas, actividades ni vuelos en la misma herramienta.
Opción 3: una API estructurada de Agoda
Para un flujo de trabajo repetible en las cuatro superficies, una API de scraping de Agoda devuelve JSON normalizado sin flota de navegadores ni ingeniería inversa de endpoints. Busca hoteles por ciudad:
curl "https://api.crawlora.net/api/v1/agoda/hotels/search?city_id=9395&limit=10" \
-H "x-api-key: $CRAWLORA_API_KEY"
Obtén el detalle de un hotel, una búsqueda de viviendas vacacionales, una búsqueda de actividades y una búsqueda de vuelos en Python:
import requests
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1"
hotels = requests.get(f"{base}/agoda/hotels/search", headers=h, params={
"city_id": 9395, "limit": 10,
}).json()["data"]["properties"]
property_id = hotels[0]["property_id"]
detail = requests.get(f"{base}/agoda/hotels/{property_id}", headers=h).json()["data"]
homes = requests.get(f"{base}/agoda/homes/search", headers=h, params={
"city_id": 9395, "limit": 10,
}).json()["data"]["homes"]
activities = requests.get(f"{base}/agoda/activities/search", headers=h, params={
"keyword": "chim chum", "city_id": 9395,
}).json()["data"]["activities"]
flights = requests.get(f"{base}/agoda/flights/search", headers=h, params={
"origin": "SYD", "destination": "BKK", "departure_date": "2026-10-20", "adults": 1,
}).json()["data"]["itineraries"]
Un resultado de detalle de hotel es JSON normalizado (campos reales — consulta los docs):
{
"code": 200,
"msg": "OK",
"data": {
"property_id": 10637,
"display_name": "Baiyoke Sky Hotel",
"accommodation_type": 34,
"rating": 4,
"address": {
"city": { "id": 9395, "name": "Bangkok" },
"country": { "id": 106, "name": "Thailand" },
"address1": "222 Ratchaprarop Road, Ratchathewi",
"postal_code": "10400"
},
"main_image_url": "https://pix8.agoda.net/hotelImages/10637/-1/878a9b58ccd19eee41b98d20e388c080.jpg?ca=9&ce=1",
"number_of_rooms": "659",
"chain_id": 3603,
"description_short": "Experience Luxury and Convenience at Baiyoke Sky Hotel.",
"policy": {
"adult": ["Guests 12 years and older are considered adults."],
"additional": ["When booking more than 5 rooms, different policies and additional supplements may apply."]
},
"source_url": "https://www.agoda.com/search?cid=-1&selectedproperty=10637&city=9395"
}
}
La búsqueda de vuelos devuelve itinerarios con detalle por segmento (aerolínea, aeronave, cabina, escalas), y flights/itinerary-amenities añade notas sobre amenities de cabina (wifi, comidas, distribución de asientos) para un número de vuelo dado. Guarda una fila por propiedad (o ruta) por fecha de extracción, y vuelve a ejecutar según un calendario para seguir el movimiento de precios.
Qué puedes recopilar
Datos públicos de hoteles: resultados de búsqueda (property id, nombre, calificación, ciudad, URL de origen) y detalle de hotel (dirección, número de habitaciones, cadena, políticas, descripción, imagen principal). Listados de viviendas vacacionales mediante el endpoint de búsqueda de homes. Actividades y planes por palabra clave o ciudad, más el detalle de cada actividad (categorías, duración, descripción). Itinerarios de vuelo por origen/destino/fecha (precio, aerolínea, escalas, segmentos) y autocompletado de ubicaciones para construir rutas. Solo datos públicos de listados.
Limitaciones
- Sin API oficial self-service abierta. Las APIs de Partner de Agoda son solo para afiliados/MSE a través de un account manager, no un formulario de registro para investigación.
- Los endpoints internos cambian con el tiempo. Las llamadas del storefront de Agoda no son un contrato público documentado y pueden cambiar sin previo aviso.
- Las tarifas y la disponibilidad cambian constantemente. Una sola extracción solo cubre la ciudad, las fechas y el número de personas que buscaste — vuelve a extraer por cada rango de fechas que te interese.
- Cuatro superficies distintas. Hoteles, viviendas, actividades y vuelos usan identificadores y formas de respuesta distintos — planifica cuatro integraciones, no una.
- Solo datos públicos. Esto recopila lo que está listado públicamente — nunca una forma de completar o manipular una reserva real.
Dónde se usa esto
- Monitoreo de precios de hoteles y viviendas vacacionales — seguir la tarifa y disponibilidad de un alojamiento a lo largo del tiempo.
- Paridad de tarifas entre OTAs e investigación competitiva — comparar los precios de Agoda con otros canales para el mismo alojamiento.
- Productos de planificación de viajes y metabúsqueda — combinar datos de hoteles, actividades y vuelos para un destino.
Fuentes
Empieza a recopilar
Pruébalo primero, gratis: pasa cualquier URL pública por el Free Web Scraper, o comprueba si un sitio bloquea bots con el Anti-Bot Checker — sin registro.
Prueba los endpoints de búsqueda y detalle de hotel en el Playground, revisa el esquema en los API docs y consulta los precios. Agoda cubre el lado más orientado a APAC de los datos de OTA; cómo scrapear Booking.com cubre la mayor OTA global por tráfico, cómo scrapear Trip.com completa el conjunto de comparación de tarifas con otra OTA fuerte en APAC, y cómo scrapear Airbnb cubre el lado de alquiler de corto plazo del mismo viaje — consulta el caso de uso más amplio de investigación de viajes y hospitalidad para ver cómo encajan entre sí. Consulta también es legal el web scraping.
Parte de nuestra serie de guías how-to-scrape — todas las plataformas que cubrimos, en un solo índice.
Preguntas frecuentes
¿Tiene Agoda una API pública?
Agoda ofrece APIs de Partner/Affiliate (Search, Content, CDS, Post-Booking) a través de su Developer Portal, pero el acceso requiere convertirte en afiliado o socio de metabúsqueda aprobado mediante un account manager — no hay un registro self-service sencillo para acceso de lectura abierto.
¿Es legal scrapear Agoda?
Los hechos públicos, como el nombre de un hotel o su calificación en estrellas, no tienen derechos de autor, y según hiQ v. LinkedIn acceder a datos públicos por lo general no constituye una violación de la CFAA. Pero los Términos de Uso de Agoda prohíben explícitamente el scraping, la minería de datos y el acceso automatizado (incluido el de asistentes con IA), así que trata cualquier scraping como un riesgo contractual frente a los términos de uso, no como una autorización legal — consulta nuestra guía sobre si el web scraping es legal.
¿Cómo obtengo un property id de Agoda?
Busca hoteles por city_id (o nombre de ciudad) mediante el endpoint hotels/search; cada resultado incluye un property_id, que luego pasas al endpoint hotels/{property_id} para obtener el detalle completo.
¿Puedo scrapear las viviendas vacacionales de Agoda por separado de los hoteles?
Sí — homes/search es un endpoint independiente de hotels/search y devuelve listados de tipo alquiler vacacional (display_name, accommodation_type, rating, address) siguiendo el mismo patrón de city_id.
¿Cubre la API los vuelos de Agoda?
Sí — flights/search devuelve itinerarios por origen, destino y fecha de salida (precio, aerolínea, escalas, detalle por segmento), flights/search-locations resuelve códigos de ciudad/aeropuerto a partir de una palabra clave, y flights/itinerary-amenities devuelve notas sobre amenities de cabina para un número de vuelo determinado.
¿Qué datos puedo recopilar legalmente de Agoda?
Hechos públicos de listados: nombres, calificaciones, direcciones, número de habitaciones, descripciones y URLs de origen de hoteles y viviendas vacacionales; nombres y categorías de actividades; itinerarios y tarifas de vuelo. Evita todo lo que esté detrás de un login, y no uses los datos para completar o manipular una reserva real.
¿Por qué se rompe un scraper DIY de Agoda?
Las páginas de búsqueda y de propiedad de Agoda llaman a endpoints internos no documentados detrás de JavaScript del lado del cliente, con detección de bots ajustada al flujo de reserva. Las formas de las peticiones pueden cambiar sin previo aviso, y un cliente HTTP simple suele ser bloqueado o enfrentar un desafío con cualquier volumen real de scraping.