Google Sheets + Gmail: hotel price quotes, ready
You shouldn’t have to open three tabs, copy prices into a spreadsheet, then rewrite the same “here are your options” email again and again. But that’s how hotel quotes usually get made. And it’s why “quick quote” requests still take forever.
Travel agents feel the heat first. A hotel sales team doing competitive checks gets dragged into it too. Even a busy operations manager ends up stuck with the admin. This hotel quotes automation turns one plain-English request into a ready-to-send price comparison email and a clean row in Google Sheets.
You’ll see what this workflow does, what you need to run it, and how the pieces fit together so you can deploy it without babysitting every quote.
How This Automation Works
Here’s the complete workflow you’ll be setting up:
n8n Workflow Template: Google Sheets + Gmail: hotel price quotes, ready
flowchart LR
subgraph sg0["Flow 1"]
direction LR
n0["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/webhook.dark.svg' width='40' height='40' /></div><br/>Webhook - Receive Request"]
n1["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Parse & Validate Request"]
n2@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check If Ready", pos: "b", h: 48 }
n3["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Scrape Booking.com"]
n4["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Scrape Agoda"]
n5["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Scrape Expedia"]
n6["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Aggregate & Compare"]
n7["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Format Email Report"]
n8@{ icon: "mdi:message-outline", form: "rounded", label: "Send Email Report", pos: "b", h: 48 }
n9["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/webhook.dark.svg' width='40' height='40' /></div><br/>Webhook Response (Success)"]
n10["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/webhook.dark.svg' width='40' height='40' /></div><br/>Webhook Response (Info)"]
n11@{ icon: "mdi:swap-vertical", form: "rounded", label: "Log Analytics", pos: "b", h: 48 }
n12@{ icon: "mdi:database", form: "rounded", label: "Save to Google Sheets", pos: "b", h: 48 }
n4 --> n6
n11 --> n12
n2 --> n3
n2 --> n4
n2 --> n5
n2 --> n10
n5 --> n6
n8 --> n9
n3 --> n6
n6 --> n7
n7 --> n8
n7 --> n11
n12 --> n10
n1 --> n2
n0 --> n1
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n2 decision
class n12 database
class n0,n3,n4,n5,n9,n10 api
class n1,n6,n7 code
classDef customIcon fill:none,stroke:none
class n0,n1,n3,n4,n5,n6,n7,n9,n10 customIcon
Why This Matters: Hotel Quotes Take Too Long
Price comparisons sound simple until you do them at volume. You search Booking, then Agoda, then Expedia. You try to match dates, room types, and cancellation terms while someone waits for an answer. Then you paste everything into a spreadsheet, double-check currencies, and still worry you missed the “real” best deal because the page refreshed or availability changed. Honestly, the biggest cost isn’t just time. It’s the mental load of doing careful work in a messy environment where tiny mistakes look unprofessional.
The friction compounds. Here’s where it usually breaks down.
- Manually checking three booking platforms can eat about 30 minutes per request when you include retries and matching room details.
- Prices get copied wrong or pasted into the wrong row, which means you send a quote you can’t stand behind.
- The “quote email” becomes a mini writing task every time, so turnaround depends on who’s available.
- Without consistent logging, you can’t spot patterns like which cities spike, which hotels get asked for, or which platform wins most often.
What You’ll Build: Instant Multi-Platform Hotel Price Reports
This workflow starts with a simple webhook request, written like a human would write it (“Hyatt Singapore March 10 to March 13”). An AI step parses that message into structured fields (hotel, city, check-in, check-out) and validates the basics so you don’t run scrapes on broken inputs. Next, n8n queries your scraping endpoints for Booking, Agoda, and Expedia in parallel using HTTP Request nodes, which means you’re not waiting for platform A to finish before platform B even starts. Then the workflow merges the results, compares availability and pricing, and chooses the best deal while keeping the other options for context. Finally, it formats a polished HTML report and sends it via Gmail/SMTP, and logs the search details to Google Sheets for analytics.
The workflow begins when a user submits a message and email address to your webhook. It turns that message into clean data, pulls prices from multiple platforms at the same time, and sends a ready-to-forward report. Google Sheets quietly keeps a history so you can measure demand and outcomes later.
What You’re Building
| What Gets Automated | What You’ll Achieve |
|---|---|
|
|
Expected Results
Say you handle 10 hotel quote requests in a day. Manually, checking Booking, Agoda, and Expedia plus writing the email is roughly 30 minutes per request, so that’s about 5 hours gone. With this workflow, the “human time” is mostly the request itself (about 1 minute) and a quick scan of the email before it goes out. Even if scraping and formatting take a few minutes in the background, you’re still getting about 4 hours back on a typical day.
Before You Start
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Sheets for analytics logging and dashboards.
- Gmail/SMTP to send the HTML report email.
- Scraping API (your own endpoint or a scraping service key).
Skill level: Intermediate. You won’t write much code, but you will connect credentials and point HTTP nodes at a scraping endpoint.
Want someone to build this for you? Talk to an automation expert (free 15-minute consultation).
Step by Step
A user submits a request to your webhook. They send a message like “Hilton Dubai Dec 20 to Dec 23” along with an email address. The webhook receives it instantly, which also makes it easy to plug into a form, a chatbot, or your own internal tool later.
The message gets parsed and cleaned. An AI agent (using an OpenAI chat model) extracts hotel name, city, and date range, then checks for missing info. If something’s unclear, the workflow can respond gracefully instead of scraping garbage inputs and wasting API calls.
Prices are fetched in parallel and compared. HTTP Request nodes call your Booking/Agoda/Expedia scraping endpoints at the same time, then n8n merges the results and applies simple logic (If/Merge/Set) to determine best price, capture URLs, and count how many valid results came back.
A polished report goes out and a record is stored. The workflow generates an HTML email that looks deliberate, not “system-generated,” and sends it via Gmail/SMTP. At the same moment, it logs key fields (timestamp, query, hotel, dates, best price, platform, user email) into a Google Sheet so you can track usage and outcomes.
You can easily modify the platforms checked to include a fourth site, or change the email layout to match your brand. See the full implementation guide below for customization options.
Troubleshooting Tips
- Google Sheets credentials can expire or need specific permissions. If things break, check the n8n Credentials screen and confirm the connected Google account still has access to the target Sheet ID.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.
Quick Answers
About an hour if your scraping endpoint is already working.
No. You’ll connect credentials and paste in your scraping API URLs.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in scraping API costs (for example, ScraperAPI starts around $49/month) and OpenAI API usage, which is usually a few cents per request.
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Yes, and it’s usually just duplication and small edits. You can add another platform by duplicating an existing HTTP Request “scrape” node, changing the platform parameter/URL, then including it in the Merge/Aggregate comparison logic. Most teams also tweak the “Format Email Report” step to add a logo, different wording, or extra fields like cancellation policy and breakfast inclusion.
Usually it’s expired OAuth access or the Sheet ID is pointing at a file your connected Google account can’t edit. Reconnect the Google Sheets credential in n8n, then confirm the “Analytics” tab exists with the expected headers. If you recently renamed the sheet or moved it to a shared drive, permissions can change quietly and the workflow will start erroring.
If you self-host, there’s no execution cap (your server and scraping limits are the real bottleneck). On n8n Cloud, the Starter plan is a good fit for low-to-medium volume, and you can move up as requests grow. Practically, your throughput depends on scraping timeouts; many teams handle dozens of quote requests per day comfortably once caching is added.
Often, yes, because this workflow needs branching logic, parallel requests, and graceful error handling when one platform fails. n8n makes that kind of flow easier to express without turning it into a maze of separate Zaps/scenarios. The self-hosting option matters too when you don’t want per-task pricing to punish you for volume. Zapier or Make can still be fine if you only want a basic “form submission → send email” setup and you’re not scraping multiple sources. If you’re torn, Talk to an automation expert and we’ll map it to your real usage.
Once this is live, hotel quotes stop being a daily scramble and become a simple service you can deliver on demand. The workflow handles the repetitive stuff, and you keep your attention for the conversations that actually close bookings.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.