Recetas/Cartografía un micro-mercado y mira cómo se mueve
Código Feed20 min

Cartografía un micro-mercado y mira cómo se mueve

Un huésped que elige tu hotel no elige entre todos los de la ciudad. Elige entre la docena de tu barrio, en sus fechas y en su banda de precio. Ese es el mercado que decide tu ocupación, y Booking ya lo ordena cada día — solo hay que guardarlo y volver a leerlo.

Cartografía un micro-mercado y mira cómo se mueve

Qué vas a construir

Una herramienta de línea de comandos que convierte una búsqueda de ubicación guardada en la foto completa de un micro-mercado: cada hotel listado con su precio, su posición en el propio ranking de Booking, su nota y su distancia al transporte público, más las medianas por categoría. Apúntala a dos fechas y te informa de la rotación — quién entra, quién desaparece, quién baja el precio y quién sube puestos. Exporta un informe HTML y un CSV.

Esto hay que montarlo antes

Obligatorio

Los endpoints no aceptan texto libre: aceptan tus identificadores. Esta receta da por hecho que lo de abajo ya existe en tu cuenta, y mientras falte algo la llamada responde vacía, no da error. Cada punto enlaza la receta que lo enseña.

  1. 01

    Crea la búsqueda de destino

    Un destino más sus filtros — estrellas, régimen, distancia, ocupación. Esos filtros son la entidad: deciden qué hoteles entran en el mercado y cuánto cuesta cada ejecución.

    Guía: Da de alta los cuatro tipos de entidad de tu cuenta →
  2. 02

    Lanza una importación sobre la búsqueda de destino

    Un dataset Feed solo contiene lo que una importación ha escrito. Apunta el feed a la búsqueda, lanza la primera ejecución a mano y lee la estimación de créditos antes de pulsar: los filtros deciden cuántos hoteles entran.

    Guía: Controla el mercado hotelero de una plaza entera →

Lo mismo por API, si prefieres no pasar por el panel:

cURL
curl -X POST "https://api.veetal.app/v2/account/location-search" \
  -H "veetal-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ ... }'   # see the account reference for the body

Para saber si ya ha terminado alguna importación, lístalas:

cURL
curl "https://api.veetal.app/v2/account/imports" \
  -H "veetal-api-key: YOUR_API_KEY"

Las lecturas Feed no se facturan por petición. Los créditos se van en las importaciones que recogen los datos, y por eso la estimación aparece antes de lanzar y no después.

Cómo funciona

  1. 01

    Define el mercado en el dashboard

    Una búsqueda de ubicación es la definición del mercado: destino, noches, ocupación y los filtros que importan — estrellas, tipo de alojamiento, nota mínima, distancia al centro. Un barrio te da un comp set; una ciudad entera te da un informe que no lee nadie.

  2. 02

    Prográmala y déjala correr

    El valor está en la serie, no en una foto. Una periodicidad diaria convierte el feed en el registro de cómo se movió el mercado; la primera extracción es solo el día uno.

  3. 03

    Clona la receta y pon tu key

    Node 20 y sin dependencias. Tu key va en un fichero `.env` y no sale de tu máquina.

  4. 04

    Pregunta qué fechas tienen datos, y léelas

    El feed indexa por la fecha de entrada que buscó cada import, y el histórico necesita el id del import que lo escribió. `--dates` lista los pares válidos para que no tengas que adivinar.

  5. 05

    Compara dos días

    Pasa `--vs` con una fecha anterior. La rotación —quién está listado hoy que no estaba la semana pasada— es la señal que no está mirando nadie.

La llamada

Una petición devuelve todos los alojamientos guardados para ese mercado y esa fecha, con precio, estrellas, nota, número de reseñas y detalle de ubicación. El id del import es lo que abre cualquier día que no sea el más reciente.

cURL
# The date is the check-in date the import searched. Older days need their import_id.
curl "https://api.veetal.app/v2/feed/location-search/YOUR_LOCATION_SEARCH_ID/2026-08-19/booking-location-search?limit=100&import_id=YOUR_IMPORT_ID" \
  -H "veetal-api-key: YOUR_API_KEY"

Clona y ejecuta

Ejecutable

La receta entera es una carpeta autocontenida: Node 20, sin paso de build, y una batería de tests que corre sin API key.

Terminal
git clone https://github.com/Veetal-Connect/recipes.git
cd recipes/micro-market-monitor
cp .env.example .env          # put your VEETAL_API_KEY in it
node --env-file=.env index.mjs --list
node --env-file=.env index.mjs YOUR_SEARCH_ID YYYY-MM-DD --vs YYYY-MM-DD   # the day to read, and the day to diff it against
Ver el repositorio ↗ Stack: Node 20 · JavaScript · no dependencies

Comprueba antes tu key

Una llamada, cinco segundos. Si esto responde, la receta va a funcionar.

cURL
# The date is the check-in date the import searched. Older days need their import_id.
curl "https://api.veetal.app/v2/feed/location-search/YOUR_LOCATION_SEARCH_ID/2026-08-19/booking-location-search?limit=100&import_id=YOUR_IMPORT_ID" \
  -H "veetal-api-key: YOUR_API_KEY"

Preguntas

¿Por qué una fecha que sé que se importó devuelve 404?

Por dos motivos, y los dos responden con el mismo error 510. O la fecha no es la que buscó el import —guarda la fecha de entrada, que en una programación diaria es el día en que se ejecutó, no una que elijas tú— o has pedido un día antiguo sin su `import_id`. Sin ese id el endpoint solo sirve la última extracción. Ejecuta `--dates` y usa un par de esa lista.

¿Esto no es lo mismo que seguir a mi competencia?

Es la capa de encima. Un comp set son los cinco hoteles que elegiste tú; un micro-mercado es todo lo que Booking enseña de verdad para esas fechas y filtros, incluidos los que nunca miras y la apertura nueva que te quitó reservas el mes pasado.

¿Qué cuesta?

Leer el feed no se factura por petición. Los créditos se van en los imports que recogen el dato, y una búsqueda de ubicación se cobra por extracción — mira el estimador del dashboard antes de programar una diaria sobre veinte mercados.

¿Por qué desaparece un hotel de un día para otro?

Normalmente porque se ha llenado para esas fechas, o ha cerrado su inventario en Booking. Esa es la parte útil: un hotel que sale del listado es una señal de demanda, y llega antes de que aparezca en el rate shopper de nadie.

¿Puedo comparar una ciudad entera?

Sí, pero pagina. Un barrio devolvió diez hoteles; una ciudad devuelve cientos y la respuesta viene paginada. La receta recorre todas las páginas — si escribes la tuya, `pagination.hasMore` es el campo que decide si estás viendo el mercado o un trozo.

¿Los precios son comparables entre hoteles?

Dentro de una misma extracción, sí: mismas fechas, misma ocupación, mismo momento. Ojo con que `priceFinal` es lo que se cobra tras el descuento y `priceOriginal` puede ser mucho más alto — que una tarifa de 583 baje a 386 es lo normal, así que promediar el campo equivocado te engañará.

Construye el tuyo

Empieza gratis con 100 créditos de API. Sin tarjeta ni llamada comercial.

Whatsapp