iCal feeds (import + export)
Updated on 2026-04-29
For channels that have no API (and so don't go through Channex), use iCal feeds. Works with: Bedandbreakfast.eu, Gites de France, Clévacances, Belvilla, Novasol, Interhome, Logis Hotels and basically anyone who exposes an .ics URL.
How it works
| Direction | What BedFlow does |
|---|---|
| Import | Pulls a remote .ics URL hourly and turns each VEVENT into a block in /room-availability-overview. Cancellations at the source are auto-reconciled. |
| Export | Generates a public .ics URL per room covering all bookings + manual blocks. External systems subscribe to it. |
| Both | Both at once (useful for PMS-to-PMS sync). |
Setup
- Open Manage → iCal feeds in BedFlow
- Click New iCal feed
- Fill in:
- Name: free text, e.g. "Bedandbreakfast.eu — Room 4"
- Room: pick a room
- Direction: usually
importfor incoming blocks - iCal URL: the
.icslink from the external system
- Save
- Click Sync now in the actions column to test immediately
- Cron picks it up hourly afterwards
For export
- Create a feed with direction
export(URL not needed) - After save click Copy export URL in the actions column
- Paste that URL into the external system (e.g. Booking.com extranet → "Add iCal URL")
Multi-tenancy
Each feed is bound to one property + one room. TenantScope ensures operators only see their own property's feeds. The export token in the public URL is 48 characters long and unique per feed — a leaked token only exposes one room's bookings, not the whole tenant.
Under the hood
- Table:
ical_feeds - Services:
App\Services\Ical\IcalImportService+IcalExportService - Cron:
php artisan ical:sync-importshourly via Laravel scheduler - Route:
GET /ical/{token}.ics— public, no-auth, token-protected - Reconciliation: imported rows are tagged
source = "ical:{feed_id}"onroom_calendar_data; only rows with that tag are re-evaluated each sync, leaving manual blocks, MyTourist sync, and Channex bookings untouched.
Limitations
- iCal is a read-only sync: import brings in availability only — no prices, no guest info. For full-feature OTA integration use Channex.
- iCal publishers themselves often only update daily — a booking made on Bedandbreakfast.eu won't land instantly, more like 1-24 hours later.
- Recurrence rules (RRULE) are NOT supported. For accommodation feeds this is fine (each booking = 1 VEVENT).