How to Connect Airbnb to n8n

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

  1. 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.
  2. 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.
  3. Publish the workflow. The Production URL only answers when the workflow is active.
  4. 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.
  5. 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 financials and marked paid on payment.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.

  1. 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.
  2. When you add the address in Airflow, copy the signing secret. It is shown once.
  3. 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 v1 value in the airflow-signature header. Refuse a message whose timestamp is more than five minutes old.
  4. Answer with a Respond to Webhook node: 200 when it matches, 401 when 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.id to 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.