Automate hotel price comparison with multi-platform scraping and email reporting
Ready for 3.0Ready for 3.0. This template uses no nodes that n8n 3.0 removes. No removed nodes, versions or helpers found. Static check, last run 2026-10-19.
Nodes used (8)
- Webhook
n8n-nodes-base.webhook - Code
n8n-nodes-base.code - If
n8n-nodes-base.if - HTTP Request
n8n-nodes-base.httpRequest - Send Email
n8n-nodes-base.emailSend - Respond to Webhook
n8n-nodes-base.respondToWebhook - Edit Fields (Set)
n8n-nodes-base.set - Google Sheets
n8n-nodes-base.googleSheets
What it does
This is a production-ready, end-to-end workflow that automatically compares hotel prices across multiple booking platforms and delivers beautiful email reports to users. Unlike basic building blocks, this workflow is a complete solution ready to deploy. --- ✨ What Makes This Production-Ready ✅ Complete End-to-End Automation - Input: Natural language queries via webhook - Processing: Multi-platform scraping & comparison - Output: Professional email reports + analytics - Feedback: Real-time webhook responses ✅ Advanced Features - 🧠 Natural Language Processing for flexible queries - 🔄 Parallel scraping from multiple platforms - 📊 Analytics tracking with Google Sheets integration - 💌 Beautiful HTML email reports - 🛡️ Error handling and graceful degradation - 📱 Webhook responses for real-time feedback ✅ Business Value - For Travel Agencies: Instant price comparison service for clients - For Hotels: Competitive pricing intelligence - For Travelers: Save time and money with automated research --- 🚀 Setup Instructions Step 1: Import Workflow 1. Copy the workflow JSON from the artifact 2. In n8n, go to Workflows → Import from File/URL 3. Paste the JSON and click Import Step 2: Configure Credentials A. SMTP Email (Required) Settings → Credentials → Add Credential → SMTP Host: smtp.gmail.com (for Gmail) Port: 587 User: [email protected] Password: your-app-password (not regular password!) Gmail Setup: 1. Enable 2FA on your Google Account 2. Generate App Password: https://myaccount.google.com/apppasswords 3. Use the generated password in n8n B. Google Sheets (Optional - for analytics) Settings → Credentials → Add Credential → Google Sheets OAuth2 Follow the OAuth flow to connect your Google account Sheet Setup: 1. Create a new Google Sheet 2. Name the first sheet "Analytics" 3. Add headers: timestamp, query, hotel, city, checkIn, checkOut, bestPrice, platform, totalResults, userEmail 4. Copy the Sheet ID from URL and paste in the "Save to Google Sheets" node Step 3: Set Up Scraping Service You need to create a scraping API that the workflow calls. Here are your options: Option A: Use Your Existing Python Script Create a simple Flask API wrapper: python apiwrapper.py from flask import Flask, request, jsonify import subprocess import json app = Flask(name) @app.route('/scrape/<platform>', methods='POST') def scrape(platform): data = request.json query = f"{data'checkIn'} to {data'checkOut'}, {data'hotel'}, {data'city'}" try: result = subprocess.run( 'python3', 'pricescrap2.py', query, platform, captureoutput=True, text=True, timeout=30 ) Parse your script output output = result.stdout Assuming your script returns price data return jsonify({ 'price': extractedprice, 'currency': 'USD', 'roomType': 'Standard Room', 'url': bookingurl, 'availability': True }) except Exception as e: return jsonify({'error': str(e)}), 500 if name == 'main': app.run(host='0.0.0.0', port=5000) Deploy: bash pip install flask python apiwrapper.py Update n8n HTTP Request nodes: URL: http://your-server-ip:5000/scrape/booking URL: http://your-server-ip:5000/scrape/agoda URL: http://your-server-ip:5000/scrape/expedia Option B: Use Third-Party Scraping Services Recommended Services: - ScraperAPI (scraperapi.com) - $49/month for 100k requests - Bright Data (brightdata.com) - Pay as you go - Apify (apify.com) - Has pre-built hotel scrapers Example with ScraperAPI: javascript // In HTTP Request node URL: http://api.scraperapi.com Query Parameters: apikey: YOURAPIKEY url: https://booking.com/search?hotel={{$json.hotelName}}... Option C: Use n8n SSH Node (Like Your Original) Keep your SSH approach but improve it: 1. Replace HTTP Request nodes with SSH nodes 2. Point to your server with the Python script 3. Ensure error handling and timeouts javascript // SSH Node Configuration Host: your-server-ip Command: python3 /path/to/pricescrap2.py "{{$json.hotelName}}" "{{$json.city}}" "{{$json.checkInISO}}" "{{$json.checkOutISO}}" "booking" Step 4: Activate Webhook 1. Cli