Docs
← cabintale.com EN · CZ Email support
Connect your channels · Tutorial

iCal import (Sources)

Pull bookings from Airbnb, Booking.com, and other platforms so they show as blocked in Cabintale.

By the end of this guide, you'll have at least one external calendar feeding into Cabintale, with imported bookings appearing alongside your direct ones — and you'll know how to keep it in sync.

One concept: Sources. Cabintale uses a single Sources section that covers everything from auto-synced iCal feeds (Airbnb, Booking.com…) to manual sources without a URL (Megaubytko, E-chalupy, anything you handle by email). Each booking is either Direct, or iCal-imported, or manually assigned to one of your manual sources — never two at once.

Before you start

What you'll need

  • A property under Your setup → Places
  • Access to Airbnb / Booking.com / Vrbo / Google Calendar — whichever calendars you want to import
  • The iCal URL from each platform (we'll point you to where these live)
  • ~10 minutes
What you'll achieve
  • One or more external calendars connected to your property
  • A first sync, with imported bookings visible on your Cabintale calendar
  • Confidence that your widget won't sell a date that's already taken on Airbnb

Step 1: Find each platform's iCal URL

Every platform exposes a private subscription URL ending in .ics. They're hidden in slightly different places.

PlatformWhere to find it
AirbnbCalendar → Calendar settings (gear icon) → Connect to another website → Export Calendar
Booking.comCalendar → Sync calendars → iCal URL
VrboCalendar → Export calendar → copy the URL
Google CalendarCalendar settings → Integrate calendar → Secret address in iCal format
Apple CalendarRight-click the calendar → Share calendar → Public calendar URL (note: requires you to make it public)

Copy the URL — you'll paste it into Cabintale next. Each calendar gets its own URL.

Step 2: Open Sources

Sidebar → Places → your property → Sources tab.

Sources is split into three sections:

  • Your exports — the links out of Cabintale: your OTA booking feed and your cleaning calendar (covered in iCal export (Booking feed for OTAs) and Cleaning calendar).
  • Custom sources — the Direct row (your own bookings) plus any manual sources you add by hand (Megaubytko, E-chalupy…).
  • Incoming calendars — the external iCal feeds (Airbnb, Booking.com…) synced into Cabintale. This section only appears once you've added one.

This guide is about that last section. Each section has its own Add button.

Step 3: Add a source (incoming calendar or custom source)

There are two separate buttons, and the one you click sets the source's kind permanently:

  • Add incoming calendar → an iCal-synced source. The modal needs a Title and an iCal URL (paste from Step 1), plus a Color (one of six presets). Cabintale syncs bookings from this URL automatically.
  • Add custom source → a manual source. The modal needs a Title and a Color — there's no URL field. Manual sources don't sync; they're just a label you assign when you create a booking by hand (e.g. one that came in through Megaubytko or E-chalupy).

Bookings from a source show in its Color on your calendar grid, so you can tell them apart at a glance.

Click Add. The new source appears in its table. The Status and Last sync columns fill in for incoming calendars and stay empty for custom sources — there's nothing to sync.

The first sync isn't automatic. For an incoming calendar, click the Sync button on the row to pull bookings in the first time. Custom sources have no Sync button.

Pick the right button — you can't switch later. Whether a source is an incoming calendar or a custom source is locked in when you create it. Editing lets you change the title, colour, URL (incoming calendars only), and active state — but not the kind. To switch, delete it and re-add it with the other button.

Step 4: Run the sync

Click Sync on the row. You'll see one of two things:

  • "iCal synced successfully! Created: 5, Updated: 0, Removed: 0" — the sync pulled in 5 bookings.
  • "Failed to sync iCal: …" — something went wrong. See troubleshooting below.

The Last sync column updates to the current timestamp.

How sync actually works

Every booking from each platform has a unique ID (the iCal UID). Cabintale uses this to keep things consistent across syncs:

  • New events in the feed → new bookings created in Cabintale.
  • Existing events with changed dates → matching bookings updated.
  • Events removed from the feed → matching upcoming bookings removed. Past bookings are preserved so your history stays intact.
  • Cancellations (STATUS:CANCELLED or "Not available" patterns) → skipped.

Cabintale auto-detects whether the feed comes from Google, Airbnb, or a generic source — Airbnb's iCal includes the checkout day in DTEND; Google's excludes it. The parser handles both correctly.

Sync frequency

  • Manual: click Sync any time. Rate-limited to 1 per calendar per minute, so don't hammer it.
  • Scheduled: if your environment has the cron job set up, all calendars sync automatically (typically every few hours).
  • Reality check: even if Cabintale syncs every 15 minutes, Airbnb only refreshes its iCal feed every 6–24 hours. Booking.com is faster (1–4 hours); Vrbo is daily; Google is closest to real-time. The sync is only as fresh as the upstream feed.

Editing or deleting a source

You can edit a source's title, colour, and active flag at any time; for incoming calendars you can also update the URL. Toggling active off pauses imports without losing the connection. (A source's kind is fixed at creation — see the note in Step 3.)

When you click Delete, you'll see a modal asking what to do with the bookings already linked to this source:

  • Keep bookings (change source to direct) — they stay in Cabintale, but they're no longer marked as coming from this source.
  • Delete bookings — they're removed.

Past bookings can't be deleted; they always stay (with their source switched to "direct").

What about double-booking on the same date?

If two iCal feeds report bookings on overlapping dates, the most recently synced one wins for the overlap. This is rare in practice — if it's happening, something is wrong upstream (e.g. you accidentally connected two calendars from the same Airbnb listing).

Troubleshooting

SymptomCauseFix
"Failed to fetch iCal. HTTP 404"The URL is wrong, or the platform regenerated its private URLRe-copy the URL from the platform; some platforms (Booking.com in particular) regenerate periodically
"Rate limited by iCal provider"Too many sync attempts in a short windowWait 10–15 minutes. Reduce how often you click sync
"This URL is blocked"URL points at a private/local IP — Cabintale blocks these to prevent scanningUse the platform's public iCal URL; private/internal calendar servers won't work
Bookings appear one day offTime zone mismatch between the feed and your propertyCheck that your property's Time zone (Property basics) matches the property's actual location
First sync shows 0 created, but I know there are bookingsThe feed has no VEVENT blocks (empty calendar), or all events have STATUS:CANCELLEDOpen the iCal URL in a browser — the file should contain BEGIN:VEVENT lines. If not, the issue is upstream
I deleted an iCal calendar by mistake and chose "Delete bookings"This is irreversible — those bookings are gone from CabintaleRe-add the iCal — bookings will re-import on the next sync, as long as they're still in the upstream feed

The Direct source

In the Custom sources section there's always a Direct row — the source for bookings that come through your widgets or the admin form (anything without an incoming calendar or manual source attached). It can't be deleted, but you can give it its own colour via its ⋯ → Edit dialog, so direct bookings stand out on the calendar.

Your outgoing booking feed for OTAs is a separate row in the Your exports section — see iCal export (Booking feed for OTAs).

Assigning a source to a manual booking

When you create a booking by hand (Sidebar → Places → your property → Bookings+ New booking, or by clicking a date on the calendar), the page header has a Source dropdown next to the Status select and Save button.

  • Direct is preselected. Leave it as is for a booking that came through your widget, a phone call, or any "default" channel.
  • Manual sources (e.g. Megaubytko, E-chalupy) are selectable. Pick the one this booking came from to tag it.
  • iCal sources appear in the list with an "(iCal — auto-imported)" suffix but are disabled — Cabintale fills these in by sync, you can't assign them by hand.

The booking pill on the calendar uses the source's color and first letter as the avatar. Direct bookings show a small white dot in the center of the avatar instead of a letter, in the brand green.

Related guides

Still stuck?

We reply to every email within one business day.

Email support →