[Deprecated] This project is no longer maintained due to Kiwi.com's enhanced anti-bot protections, which prevent reliable automated scraping.
EU-Trip-Gen is an AI-assisted automated travel optimization system designed to scrape and aggregate flight data from Kiwi.com and accommodation listings from Airbnb. It employs Large Language Models to parse unstructured data into structured formats and uses Python-based scalable automation for efficient data collection and processing. The system ranks potential trips by cost-effectiveness and exploration hours, delivering optimized travel itineraries based on configurable search parameters.
- Scrapes flight price calendars and detailed flight options from Kiwi.com
- Scrapes Airbnb listings and their calendar availability
- Estimates exploration hours, trip cost, and cost-effectiveness
- Uses LLM-based data parsing via OpenRouter or DeepSeek API
- Saves top results in
final_trips.json
.
├── main_controller.py # Entry point and core logic
├── config.json # Configuration file (API, cities, search params)
├── api_handler.py # Rotating API client for OpenAI-compatible models
├── flight_scraper.py # Flight price scraping from Kiwi.com
├── airbnb_scraper.py # Airbnb listing scraping and calendar parsing
├── run_log.txt # Optional: log file for AI responses
└── final_trips.json # Stores best trips found
pip install playwright openai
playwright installEdit the config.json file to control:
-
API Settings:
provider: Choose betweenopenrouterordeepseekkeys: Comma-separated list of API keysmodels: Set default and task-specific model names per provider
-
Search Parameters:
origin_city_id: City code for trip origin (e.g.,warsaw-poland)start_date: Search start date (format:YYYY-MM-DD)days_to_search: Number of days to scan afterstart_datemax_trip_duration_days: Maximum allowed length of a tripnum_adults: Number of travelersmin_exploration_hours: Minimum required hours for exploration at destinationcookie_wait_seconds: Wait time after accepting cookiesday_starts_at_hour/day_ends_at_hour: Hours of the day for usable timeairport_buffer_hours: Buffer hours for arrival/departure flight time
-
Destination Control:
-
Enable or disable countries and cities
-
Example:
"italy": { "enabled": true, "cities": { "rome-italy": "Rome", "venice-italy": "Venice" } }
-
-
Paths:
log_file: File to log AI outputs and errorsresults_file: File where results will be saved
python main_controller.pyThe browser runs in headless mode by default. If you want to observe scraping in a visible browser, you can change this in main_controller.py:
browser = p.chromium.launch(headless=False)- Printed best trip results per destination
- Final data stored in
final_trips.json
Each entry contains:
- Travel dates
- Cost per hour
- Flight and Airbnb details
- Browser must stay open if running in non-headless mode
- Tool depends on UI structure of Kiwi.com and Airbnb — major site updates may require adjustments
- The AI is only used for parsing unstructured flight text into structured JSON
MIT