Hotel Outreach Automation
Short answer: We built an end-to-end system that discovers hotels, enriches each property with the data the AI needs, generates a personalized sales message per property, sends it, and handles replies. It runs on Playwright, enrichabl, the Claude API, Smartlead, and n8n. One hour of manual sales work per property collapses into minutes of compute. Hundreds of properties get touched per run.
- Built to SOC 2 controls
- GDPR compliant
- Private AI: data never leaves your servers
TL;DR
- The problem:
- Hand-researching and writing one personalized sales email per hotel takes ~1 hour. Doing it across hundreds of properties is a full-time job nobody wants.
- The system:
- n8n orchestration + Playwright data collection + Claude API personalization + Smartlead sending + AI-classified reply handling. Five stages, fully automated.
- The result:
- The ~1 hour of manual research per property collapses into minutes, hundreds of properties get a personalized message per run, and a person approves the replies that matter.
- Build time:
- Two weeks to first production send, four to full system.
The problem: sales outreach that does not scale
Booking a meeting with a hotel general manager is not a cold-spam game. You need to know what booking engine they run, who their parent group is, what specific friction their reservations team has, and what makes their property different from the property four blocks away. That research takes about an hour per property when a human does it well.
When the target list is hundreds of hotels, that hour-per-property cost becomes an entire role. The sales team either skips the personalization (and tanks reply rates) or never gets through the list (and the pipeline dries up). In modern outbound, that personalization step is the single biggest time sink, and the one most worth automating.
The system: five stages, fully automated
The pipeline is intentionally generic. Each stage is a discrete n8n workflow that hands its output to the next, with retries and dead-letter handling at every step. Adding a new vertical (real estate, agencies, etc.) means swapping the discovery and prompt stages, not rebuilding.
Discover
Enrich
Personalize
Send
Reply
Stage 1: Discovery
A custom Playwright collector crawls public hotel directories and search endpoints, gathering candidate properties that match a target profile (size, location, segment). Output: a deduplicated list of property names, URLs, and basic firmographic data.
Stage 2: Enrichment
For each property, the system pulls structured data the AI will need to personalize: booking engine detected (via a separate Go service that runs a three-stage cascade: HTML signature, link follow, then headless browser), parent group, contact email patterns (enriched with our own platform, enrichabl), recent reviews, and a one-paragraph property summary collected from the hotel's own About page.
Stage 3: Personalization
The enriched record is handed to the Claude API with a structured prompt that includes the property summary, the detected booking-engine pain points, and our offer template. The model produces a 60-90 word email that references something specific about the property, ties it to a measurable friction, and ends with a single low-commitment ask. We use the Anthropic prompt-engineering patterns (clear role, structured examples, explicit do-not-do list) so the output is consistent across hundreds of generations.
Stage 4: Sending
Approved messages go through Smartlead with per-domain warmup, sending windows tuned to the target's time zone, and A/B variants on subject line. Send pace is throttled to keep deliverability healthy across many properties per day.
Stage 5: Reply handling
Inbound replies hit a classifier that buckets them as positive, objection, OOO, or unsubscribe. Positives auto-book into a calendar slot and notify the founder in Slack; objections get a one-shot context-aware follow-up drafted by Claude and queued for human approval.
The tech stack
- Orchestration: n8n, self-hosted on Hetzner. Picked over Zapier and Make because the pipeline has loops, branching, and custom code nodes that the hosted no-code tools either cannot do or charge per-execution prohibitively for.
- AI: Claude API (Sonnet for personalization, Haiku for the reply classifier). The quality/cost tradeoff lands cleanly on Anthropic models for this workload.
- Discovery: Playwright (Python) for the collector, with a Go service running the booking-engine detection cascade.
- Sending: Smartlead with multi-inbox rotation. Replies route back into the n8n pipeline via webhook.
- Storage: Postgres (Supabase) for property + send + reply records, batched writes from the n8n flow.
The results
Specific per-campaign reply and meeting numbers are kept confidential. What we can report honestly is the time the system takes off the manual workflow:
We report time saved per task rather than precise per-campaign figures, to protect client confidentiality. Exact results vary by list size, offer, and target market.
How a build like this rolls out (5 phases)
- Discovery (week 1): map the target list, the existing sales motion, and where the hour-per-property cost lives. Decide what to keep human and what to automate.
- Architecture (week 1-2): pick the orchestration tool, the model, the sending stack, and the data model. Write a one-page diagram so the entire system fits on one screen.
- Build the unsexy parts first (week 2-3): data collectors, enrichment, dedupe, write-backs. The AI step is the easy part if the data going into it is clean.
- Tune the AI step (week 3): run the personalization stage against a sample of 20 properties, eyeball every output, iterate the prompt until 18 of 20 are send-worthy without edits.
- Ship, monitor, iterate (week 4+): send live, watch deliverability and reply quality dashboards, adjust cadence and prompts from real signal.
Why this pattern generalizes
The architecture (discover → enrich → personalize → send → handle replies) applies to any outbound motion where personalization is the bottleneck. Real estate brokers, professional services, recruiters, agencies. The same five stages. The model behind the personalization step and the discovery query are what change.
In every one of these motions, the hard part is not the AI. It is the plumbing that gets clean data in and clean, approved actions out. That is what this build solves.
We package this pattern as GTM engineering, and run an operational variant for hotels and hospitality groups. Same plumbing, a different front door.
Frequently asked questions
How long did the hotel outreach automation take to build?
The first production version shipped in roughly two weeks. The full system, including the enrichment layer, message-personalization step, and reply-handling logic, came together over four weeks of focused build time. Most Code2b client builds ship on a similar 2 to 4 week timeline.
What tools does the automation use?
The orchestration runs on n8n (self-hosted), the personalization layer uses the Claude API, hotel discovery uses a custom Playwright collector, and contact enrichment pulls from a mix of providers. Sends go through Smartlead. Everything is wired so that adding or swapping a tool is a single integration change, not a rebuild.
Can the same system work for industries other than hospitality?
Yes. The architecture is generic: discover targets, enrich with the data the AI needs to personalize, generate personalized outreach, send, handle replies. We have shipped variants of this pipeline for real estate, professional services, and agencies. Only the data sources and the AI prompt change per vertical.
How much does a system like this cost to build?
A focused outreach-automation build is scoped and quoted after a free audit. Productized workflows start at €1,999; a multi-channel, multi-vertical system with custom enrichment is quoted to fit, so you get a fixed price before you commit. Operating costs (Claude API + sending tools + hosting) are modest for the volume processed.
Where did the results numbers come from?
The figures here are reported conservatively as time saved per task (the manual research time per property) rather than precise per-campaign reply or meeting figures, to protect client confidentiality. Your actual results depend on your offer, list quality, and target market.