How to Connect Airbnb to n8n
The short answer
Airbnb gives hosts no API, so n8n has nothing to connect to. What Airbnb does send you is a confirmation email for every booking. Airflow reads that email, turns it into a booking, and sends a message to your n8n workflow each time a booking is created, changed or cancelled. The same works for Booking.com and Vrbo, and for direct bookings on your own booking page.
It works with n8n Cloud and with a self-hosted n8n, as long as the address is reachable from the internet over https.
Set it up
- Add a Webhook node. In a new workflow, add the Webhook trigger. Set HTTP Method to
POST. Leave Respond on Immediately: Airflow waits up to 10 seconds for an answer, and a workflow that finishes its work first may take longer. - Copy the Production URL. The Webhook node shows two addresses. The Test URL only listens while you have the workflow open and press “Listen for test event”. Use the Production URL in Airflow.
- Publish the workflow. The Production URL only answers when the workflow is active.
- Add the address in Airflow. Open Connections, choose the External automations tab, then Add an address. Paste the Production URL and choose the events to send.
- Send a test. Press Send test event. In n8n, open Executions to see the sample booking that arrived. Recent deliveries in Airflow shows the same send with the status n8n answered.
What arrives
The booking is under body:
| Field | Example |
|---|---|
body.type |
booking.created, booking.updated, booking.cancelled or payment.received |
body.data.booking.reference |
HM1234ABCD |
body.data.booking.channel |
airbnb, booking_com, vrbo, direct |
body.data.booking.listing.name |
Sea Cottage |
body.data.booking.check_in / check_out |
2027-01-10 / 2027-01-14 |
body.data.booking.nights |
4 |
body.data.booking.guests.adults |
2 |
body.data.booking.total / payout / currency |
800 / 676 / USD |
body.data.booking.status |
confirmed |
body.data.booking.financials |
Accommodation, cleaning fee, fees, taxes, discounts, what the channel kept, total and payout |
body.data.payment.amount |
On payment.received only: the amount just received |
Guest name, email and phone are left out unless you switch on Include guest contact details for the address. The full format is in the Connect out guide.
Route by event
Add a Switch node after the Webhook and route on {{ $json.body.type }}: one branch for a new booking, one for a change, one for a cancellation. The booking reference is the same on all three, so the change and cancellation branches can look up what the first branch made and update or remove it.
To act on one listing or one channel only, add an If node on {{ $json.body.data.booking.listing.name }} or {{ $json.body.data.booking.channel }}.
Things to build
- A message to a Slack or Teams channel for each new booking
- A task in Trello, Asana or Todoist due on check-out day, moved when the dates change and removed on cancellation
- A record in Airtable, Notion or your own database
- A reminder the day before check-in, using a Wait node set to a date worked out from
check_in - An invoice in an accounting system Airflow does not connect to, built from
financialsand marked paid onpayment.received - A call to your own software
If you only want bookings in Google Sheets, in your accounts or on a Google calendar, Airflow does those itself.
A workflow that waits does not know the booking was cancelled afterwards. Have the cancellation branch remove what the reminder points to, or have the reminder look the booking up before it sends.
Check the message really came from Airflow
Optional, and worth doing if the workflow does anything that costs money or sends messages.
- In the Webhook node, open Options and switch on Raw Body. The signature is worked out over the exact text Airflow sent, not the parsed fields.
- When you add the address in Airflow, copy the signing secret. It is shown once.
- In a Code node, work out the HMAC-SHA256 of the timestamp, a full stop and the raw body, using the secret as the key, and compare it with the
v1value in theairflow-signatureheader. Refuse a message whose timestamp is more than five minutes old. - Answer with a Respond to Webhook node:
200when it matches,401when it does not. Set the Webhook node’s Respond to Using ‘Respond to Webhook’ Node for this.
The method, with a code sample, is in the Connect out guide.
The limits
- It is one way. Airflow tells n8n what happened. n8n cannot change a booking in Airflow or anything on Airbnb.
- Four events only. Created, changed, cancelled, and a payment received on a booking you collect yourself. Nothing is sent for a refund, a review or a guest message.
- It starts from today. Bookings already in your account when you add your first address are not sent as new.
- It carries what the email carries. Airbnb hides the guest’s email address, so nothing can pass it on.
- A message can arrive twice. Use
body.idto ignore one you have already handled.
What it costs
Each booking sent out uses one automated task from your Airflow allowance, the first time it is delivered. Later changes to that booking, its cancellation, payments on it, a second address, test events and failed deliveries are free. In n8n, each message received is one execution. Connect out is part of the Growth plan and above; see pricing.
Get started — see plans and pricing.