RecipesShort-term rental check-in

Recipe: short-term rental check-in

When a booking confirms, this pipeline creates a door code and sends the guest their arrival details — hands-off, behind your own firewall. It’s a good tour of a trigger → action → action chain.

The shape:

booking (webhook trigger)
  └─ create-door-code (http)   → on success
       ├─ text-guest (sms)
       └─ email-guest (email)

1. Catch the booking

Most channels (Hostaway, your PMS) can POST a webhook when a reservation is created. Point it at a Cronable webhook trigger; the event arrives through the relay, so you don’t open a port.

# jobs/rentals/booking.yaml
id: booking
name: New booking
group: rentals
type: webhook
hookId: 8b1f0c3a9d7e2f4c6a5b8e0d1c2f3a4b

No webhook from your channel? Airbnb’s own API is closed, but you can poll its iCal feed with a calendar-watch trigger instead. iCal carries no guest contact details, so pair it with a lookup in your PMS.

The booking payload is now available to the next job as {{ $parent.json.* }}.

2. Create the door code

An http job calls your smart-lock provider (Nuki, igloohome, Seam, …). Store the API key as a credential — never inline.

# jobs/rentals/create-door-code.yaml
id: create-door-code
name: Create door code
group: rentals
type: http
schedule:
  - afterParent: booking
    on: succeeded
method: POST
url: https://api.example-lock.com/v1/codes
credential: lock-api          # a stored bearer credential
body:
  name: "{{ $parent.json.guest_name }}"
  startsAt: "{{ $parent.json.check_in }}"
  endsAt: "{{ $parent.json.check_out }}"

The provider’s response (the code) flows on as {{ $parent.json.code }}.

3. Message the guest

Two jobs chained after the door code — one sms, one email — both fire on success.

# jobs/rentals/text-guest.yaml
id: text-guest
name: Text guest
group: rentals
type: sms
schedule:
  - afterParent: create-door-code
    on: succeeded
to: "{{ $parent.json.guest_phone }}"
credential: twilio
message: |
  Welcome! Your door code is {{ $parent.json.code }}.
  Check-in from 3pm — reply here if you need anything.
# jobs/rentals/email-guest.yaml
id: email-guest
name: Email guest
group: rentals
type: email
schedule:
  - afterParent: create-door-code
    on: succeeded
to: "{{ $parent.json.guest_email }}"
subject: "Your stay — check-in details"
body: |
  Your door code is {{ $parent.json.code }}.
  Full arrival guide: https://example.com/welcome

4. Catch failures

Add an onFailure handler to the door-code job so a lock-API hiccup pages you instead of leaving a guest locked out:

onFailure: alert-oncall

That’s the whole flow: a booking lands, a code is minted, the guest is messaged, and every run is on your canvas with the full history — no chat log to interrogate, no ports open. Extend it with a turnover job for the cleaner, a review request a day after checkout, or a nightly pricing check.