Plan Travel Itineraries with Gemini AI, Live Amadeus Flights, and Airbnb Stays
Go to WorkflowDescription
This workflow contains community nodes that are only compatible with the self-hosted version of n8n.
Here is the Full Node-by-Node Breakdown of the workflow Workflow
Execution Video: https://youtu.be/qkZ6UaO7aCE
1. Webhook (Webhook)
Purpose**: Accepts incoming user queries via HTTP GET with the text parameter.
Example input**: 4 people from Germany to Bangkok @14th August 2025
2. AI Agent (AI Agent)
Type**: LangChain Agent
Model**: Google Gemini 2.5 Flash via Vertex AI
Prompt logic**:
Extracts structured travel info (origin city, destination, date, number of people)
Determines 3-letter IATA codes
Uses MCP’s Airbnb Tool to scrape listings starting from that date
Returns**:
A markdown + bullet-format response with:
Structured trip info
List of Airbnb listings with titles, price, rating, and link
3. MCP Client List Tool (MCP Client List Tool)
Purpose**: Fetches a list of tools registered with MCP (Multi Channel Parser) client for the AI agent to select from
Used by**: AI Agent as part of listTools() phase
4. MCP Execute Tool (MCP Execute Tool)
Purpose**: Executes the selected MCP tool (Airbnb scraper)
Tool input**: Dynamic — passed by AI Agent using $fromAI('Tool_Parameters')
5. Google Vertex Chat Model (Google Vertex Chat Model)
Purpose**: Acts as the LLM behind the AI Agent
Model**: Gemini 2.5 Flash from Vertex AI
Used for**: Language understanding, extraction, decision-making
6. Grabbing Clean Data (Code Node)
Purpose**: Parses AI output to extract:
Structured trip data
Airbnb listings (with title, rating, price, link)
Handles**:
Bullet (•) and asterisk (\*) formats
New and old markdown styles
Fallbacks for backward compatibility
Output**: Clean JSON:
{
"tripInformation": {...},
"listings": [...],
"totalListings": X,
...
}
7. Flight Search with fare (HTTP Request)
API**: Amadeus Flight Offers API
Purpose**: Searches live flight offers using:
originIataCode
destinationIataCode
travelDate
numberOfPeople
Auth**: OAuth2
8. Flight Data + Airbnb Listings (Code Node)
Purpose**:
Parses Amadeus flight offers
Formats date, time, and durations
Merges flight results with earlier Airbnb + trip info JSON
Sorts by cheapest total price
Output**:
{
"tripInformation": {...},
"listings": [...],
"allFlightOffers": [...]
}
9. Edit Fields (Set Node)
Purpose**:
Assigns final response fields into clean keys:
traveldetails
listings
flights
10. Respond to Webhook
Purpose**: Sends back the final structured JSON response to the caller.
Output**: Combined travel itinerary with flights + Airbnb
Summary
This end-to-end workflow is a fully autonomous travel query-to-itinerary engine. From a plain text like “4 people from Vijayawada to Bangkok @14th August 2025,” it:
Parses and understands the query using an AI agent
Fetches Airbnb stays by scraping live listings
Searches real-time flights via Amadeus
Merges and formats everything into structured, digestible JSON
No manual parsing, no frontend — just AI + APIs + automation.
NOTE: I JUST USED A COMMUNITY NODE "n8n-nodes-mcp" + UNOFFICIAL AIRBNB MCP