Multi-hotel reservation data, consolidated for reporting
Reservation data from twelve hotels depended on monthly lists reviewed by hand, so the workflow brings reservations in continuously and keeps one consistent, historical dataset for client reporting.
- Period
- 2026
- Context
- Professional work
- Client
- Undisclosed
Context
Reservations for a group of hotels were reviewed and consolidated by hand, working from lists the booking platform sent once a month.
A workflow was needed to receive reservation events as they happen, keep them consistent across properties, and make that information usable for reporting and operational follow-up.
- Message format
- XML / SOAP
- Scope
- Multiple properties
- Event types
- Booking · Modification · Cancellation
- Destination
- Google Sheets
The challenge
Reservation events from multiple properties had to be received as structured XML/SOAP messages, authenticated, normalized and routed consistently while preserving the correct state across bookings, modifications and cancellations.
What I was responsible for
Intake and validation
- I built the event intake and processing flow for XML/SOAP reservation messages.
- I implemented request authentication and validation.
Data handling
- I normalized booking, modification and cancellation events into a consistent internal structure.
- I implemented property-based routing to the appropriate destination.
- I built reconciliation logic for modification events so records removed from an updated reservation were correctly reflected in the destination data.
Delivery and reliability
- I implemented structured logging and error handling for valid and invalid requests.
- I connected the processed reservation data to Google Sheets.
- I tested the integration and message flows using Postman.
Solution
I built an end-to-end n8n workflow that receives reservation events, parses and validates incoming messages, transforms the relevant data into a consistent internal structure and routes it to the appropriate destination. The workflow separates standard events from modifications and includes reconciliation logic to keep previously stored reservation records synchronized when the incoming state changes.
Decisions
I chose n8n to run the workflow and Google Sheets as its destination, with advice from my manager.
I handled modifications separately from new reservations, so records removed from an updated booking are reflected in the stored data instead of being left behind.
I validated each external message flow in Postman before connecting it to the workflow.
Technical approach
Intake
Event-driven intake through webhooks.
Parse & authenticate
XML/SOAP parsing and request authentication.
Normalize
Reservation data normalization into a consistent internal structure.
Route
Property-based routing. Separate handling for standard and modification events.
Reconcile
Reconciliation of existing records during modifications.
Persist & respond
Structured valid/invalid response paths. Google Sheets as the operational destination.
The system
- Choose what arrives to run it.
An external reservation event is received and parsed. The request is then validated: invalid requests exit through a rejected branch and go no further. Valid reservation data is normalized into a consistent structure and routed according to its destination. The flow then splits by event type. Standard events, meaning new bookings and cancellations, are persisted directly. Modification events first reconcile the incoming state against existing records, then update the affected records before the incoming data is persisted. Both paths finish by returning a response.
The production implementation
Outcome
The workflow has been running in production since 2026 and currently covers twelve hotels.
Reservation data can be viewed continuously rather than only through a monthly list, and its history is kept.
The consolidated data is the source for client reporting in Looker Studio, where it supports comparisons over time.
It reduces part of the manual review and consolidation that used to happen each month.
Lessons learned
This project gave me production experience with SOAP as well as REST: XML messages that had to become JSON inside the workflow, the headers the service requires, and validating each external flow in Postman before connecting it to n8n.
I also learned to design for data that changes after it is created. Modifications and cancellations needed reconciliation built around unique identifiers and reservation states, so the stored data keeps matching the bookings it describes.
Running n8n in production taught me to work out up front which nodes, data, credentials and access a workflow needs, to anticipate the error cases and handle them, and how different a workflow that works in a test is from one that has to keep working in production.
Technologies
More of my work
All projects- 01 · Client workMulti-step form and API integrationA two-step form had to check vehicle eligibility against an external service, turn each response into a clear result state, and carry campaign attribution through to submission.View project
- 02 · Client workInteractive golf club finder and enrollment flowA seasonal campaign needed one enrollment flow for multiple clubs, each with availability rules set by the client, so that every lead reached the right club with the right next step.View project
- 03 · Client workWordPress rebuild and structured content systemA new WordPress site built so a non-technical team can publish articles, ebooks and webinars through structured content, with lead forms connected to the CRM the client already used.View project
Open to integration, automation and technical implementation roles.
