Owner
Receives inquiry drafts, reviews every outbound response, and gets failure alerts when a workflow breaks.
Designed and deployed a production-grade AI-powered marketing and revenue-operations platform that automates lead management, campaign attribution, reporting, and customer communications while maintaining human approval controls.
Pull each platform's numbers, reconcile them, chart them, write the summary, send it. At NTStays it now runs end to end: on the 1st of each month an n8n workflow computes the numbers in code, Claude writes the summary, a check blocks any draft with a number that isn't in the data, and the owner approves before it goes out. Its first scheduled run, on October 1, 2026, showed why the check matters: it caught a number the AI had calculated on its own and held the draft back.
NTStays receives inquiries and bookings from multiple channels, each with different data semantics. Customer inquiries were handled manually, source attribution was inconsistent, and platform reporting mixed monthly, rolling-window and lifetime metrics. The operating question was simple but hard to answer reliably: which channel is actually producing valuable business, at what cost?
Three audiences rely on the system in different ways.
Receives inquiry drafts, reviews every outbound response, and gets failure alerts when a workflow breaks.
Uses the dashboard, logs platform metrics, and reviews channel economics across Airbnb, Vrbo, Furnished Finder and direct acquisition.
Use the assistant and request forms, while the system keeps pricing commitments and final customer communication under human control.
Connected workflows support lead capture, qualification, communications, payments, reporting, and operational follow-up.
Captures source, property interest, and customer details in a structured record for follow-up.
Scores leads, returns structured output, and prepares response drafts for human review.
Answers common questions from approved property and service information and escalates exceptions.
Automates marketing-performance collection, normalization, reporting, and stakeholder communication.
Supports reliable follow-up for booking, payment, and customer-status actions.
Tracks workflow health, execution status, exceptions, and incident alerts.
All workflows are generated from code, versioned in Git, tested, and deployed through GitHub Actions. Production components are used by the business; additional flows have been built and tested and activate as credentials and operations are enabled.
| Workflow | Nodes | What it does | Status |
|---|---|---|---|
| Website inquiries | 75 | Validates requests, runs spam checks, scores and drafts with Claude, creates HubSpot records, routes an approval form, then sends an optional Stripe payment link only after approval. | Live |
| Website assistant | 16 | Answers from approved facts and availability; uses structured output; enforces price and booking-confirmation guardrails; hands off only after explicit consent and a valid email. | Live |
| Marketing data collection and audit system | 17 | Captures platform metrics that cannot be exported cleanly in an append-only data table with attribution. | Live |
| Monthly channel report | 25 | Computes funnels, stays, revenue share and fee percentages in code; Claude generates draft content as structured JSON; unsupported numbers are blocked; owner edits are re-checked. | Live |
| Operational monitoring and incident alerts | 3 | Emails the owner with the failing step when a production workflow errors. | Live |
| Payments | 15 | Stripe webhook confirms direct bookings, updates customer state and publishes the direct-booking calendar. | Built & tested |
| Follow-ups | 20 | Handles unpaid links, thank-yous, and extension outreach through a human-in-the-loop AI workflow. | Built & tested |
| Availability | 8 | Merges Airbnb, Vrbo and Booking.com iCal feeds so the site and assistant know when properties are open. | Built & tested |
The design separates probabilistic AI reasoning from deterministic business controls and durable system state.
| Architecture decision | Why |
|---|---|
| n8n for orchestration | Visual orchestration, webhooks, scheduled jobs, branching, API integrations and operational transparency. |
| Claude API for probabilistic tasks | Lead scoring, structured drafting and narrative synthesis are appropriate places for language-model reasoning. |
| Python / JavaScript for deterministic logic | Metrics, business rules and validation should not depend on model interpretation. |
| Structured JSON outputs | Model output is machine-validated before it can enter downstream systems. |
| HubSpot as durable customer state | Customer history belongs in the CRM rather than opaque model memory. |
| Human-in-the-loop AI workflow | Customer-facing communication has pricing, commitment and brand risk. |
| Append-only measurement data | Corrections remain auditable instead of overwriting historical evidence. |
| Tests gate deployment | Generated workflows and validation rules must pass before production changes ship. |
A production system becomes credible when the failure modes are visible. These were some of the most useful engineering lessons.
| Failure | Root cause | Change made |
|---|---|---|
| Test data appeared on the production dashboard | The stats test suite wrote sample output into the production data file. | Production builds now use only real exports; a regression test verifies tests never touch the production path. |
| Chat refused real visitors | The Cloudflare Turnstile challenge was off-screen, so users could not complete it. | The widget was made visible, with a 30-second wait and explicit Cloudflare error codes. |
| The website deployed before its backend | Site deployment was automatic but n8n import was still manual. | Added tested, key-restricted automated n8n deployment. |
| Updating one Airbnb rate erased another | The initial “latest row replaces the month” logic was too broad. | Metrics now merge field-by-field; blank values never erase known data. |
| Backfilled leases distorted conversion | Leases were dated by entry date rather than signed date. | Added signed-on date, defaulting appropriately to move-in. |
| Furnished Finder funnel math was misleading | Inquiry totals were cumulative while views were rolling 90 days. | Monthly inquiries are derived from entry differences, per listing; incompatible periods are not divided. |
| Prompt caching was assumed but not active | The prompt was below the model's caching threshold. | Documented the behavior and accepted the negligible cost at this volume. |
The project reinforced several principles I would carry into larger enterprise AI systems.
A prompt can request safe behavior. A deterministic check can enforce it.
Rolling windows, running totals, averages and business dates caused more risk than the visualization layer.
The most damaging bug came from the test environment writing to a production data path.
Thin or mixed-period data should be visibly qualified so business users do not over-read it.
The right KPI is the one the business can act on now, not the most impressive-looking dashboard metric.
Where platforms lacked usable host APIs, the workflow made manual input fast, structured and auditable instead of pretending full automation existed.