// CHANNEL MANAGER

Sell every room, everywhere — without leaking commission.

Connect your Booking.com, Expedia, Agoda and Airbnb accounts, reach 400+ OTAs through one SiteMinder link, and sync availability with any platform over universal iCal. Two-way pull & push, room and rate mapping, per-channel commission — and every booking lands in the same reservation ledger your front desk already runs on.

Start Free Trial Schedule a demo
400+ OTAs via SiteMinder Two-way sync ~180-day iCal feed RFC 5545 compliant
Channel Manager · Grand Riviera 6 CHANNELS
Booking.com CPP ACTIVE
Commission 15%Pulled 2m ago · Pushed 8m ago
Expedia EQC ACTIVE
Commission 18%Pulled 5m ago · Pushed 5m ago
SiteMinder 400+ OTAs ACTIVE
Commission 12%Aggregator connection
Agoda YCS PAUSED
Commission 17%Mappings retained
Airbnb API + iCal ACTIVE
Commission 14%Pulled 1m ago
Today's sync
Bookings pulled23
Rates pushed420 rows
Duplicates skipped4
Failed0
// SUPPORTED CHANNELS

One screen to connect and control every channel.

Connect your own OTA accounts through each platform's official connectivity program, or start syncing today over universal iCal with no partnership required. Every channel is scoped to a specific property.

Booking.com

Connect your account via Booking.com's XML Connectivity Partner Program (CPP).

Provider Username · Provider Password · Hotel ID

Expedia

Connect your account via Expedia Quick Connect (EQC).

EQC Username · EQC Password · Expedia Hotel ID

Agoda

Connect your account via Agoda YCS (Your Connectivity Solution).

YCS API Key · YCS API Secret · Agoda Hotel ID

Airbnb

Connect your account via the Airbnb Software Partner API for full integration — or use the simpler iCal route immediately for independent hosts.

OAuth Access Token · Listing ID · or iCal

SiteMinder

A single aggregator connection that reaches 400+ OTAs at once — instead of contracting with each OTA separately.

Hotel Code · API Username · API Password

iCal · Universal Sync

Works today with no partnership required — against any platform that exports or imports iCalendar feeds (Airbnb, Booking.com, Vrbo, Agoda and more).

Availability sync · no credentials

Direct Website

Your own commission-free booking channel, feeding the same reservation ledger.

Other

A generic slot for any additional channel you need to track.

// SETUP & CREDENTIALS

Add a channel in seconds — no generic JSON editing.

Pick the platform, give it a display name, set the commission percentage, and toggle it active to enable sync. The form renders exactly the right credential fields for the channel you chose.

Add Channel · Expedia (EQC) SANDBOX
Complete Expedia's EQC certification before live trading. Toggle Sandbox to validate against staging endpoints first.
EQC USERNAME
grand_riviera_eqc
EQC PASSWORD
e••••••••••2
MASKED
EXPEDIA HOTEL ID
EXP-4471902
COMMISSION
18%
STATUS
Active
Test Connection Save
Connection OK · auth + parse verified
Adapter-aware forms — the UI renders exactly the right fields for each platform, with inline help explaining each provider's certification and partnership path. No generic JSON editing.
Sandbox / test-environment toggle per channel, so you can validate a connection against the OTA's staging endpoints before going live — required for certification with most OTAs.
Rotate one credential at a time — a dedicated credentials endpoint deep-merges new keys into the existing set, so refreshing a single token never wipes the rest.
Credential security — secrets are never returned to the channel list view, and when a channel is opened stored values are shown masked, with only the first and last characters visible.
Test Connection exercises the full live HTTP + authentication + parse path and reports a clear success or failure message; if credentials are missing it prompts you to configure them rather than throwing an error.
Pause or reactivate any channel instantly — paused channels stop syncing but retain all mappings and history.
// ROOM & RATE MAPPING

Map your rooms and rates to each channel's side.

Line up every PMS room type and rate plan with the IDs the OTA uses, edit inline row by row, and let unmapped rates fall back to your Best Available Rate automatically.

Booking.com · Mapping 4 ROOM · 3 RATE
Room-type mapping
Deluxe King → 1204501SAVED
Executive Suite → 1204509SAVED
Standard Twin editing…SAVE
Rate-plan mapping
BAR Flexible → RP-STDSAVED
Non-Refundable → RP-NRSAVED
Corporate unmapped→ BAR FALLBACK
Room-type mapping — map each PMS room type to the room ID the OTA uses on its side, with an optional label of the OTA's own room name for reference.
Rate-plan mapping — map each local rate plan to the channel's rate plan; if a rate is left unmapped, the system falls back to your property's BAR (Best Available Rate) plan automatically.
Inline editing — per-row editing with individual save controls; each mapping can be independently activated or removed.
Live counts — the channel overview shows how many room mappings, rate mappings and sync events exist for each connection at a glance.
// TWO-WAY SYNC

Pull bookings in, push rates and inventory out.

Fetch new reservations on demand and send current rates and availability back out — with duplicate-safe imports, oversell protection and per-channel commission carried onto every booking.

Pull Reservations · Booking.com INBOUND
12
New
4
Duplicates
0
Failed
BK-9920481 · A. KhanConfirmed
Deluxe King → mapped · BAR fallbackComm 15%
BK-9920488 · new guestCRM created
Inventory consumed · oversell blockedComm 15%
Push rates & inventory · 07 Jul → 06 Aug · 310 rows sent

Pull reservations (inbound)

Fetch new bookings from a channel on demand. The system creates a local reservation for every new booking, maps the OTA room to your room type, resolves the rate plan (mapped or BAR fallback), and finds-or-creates the guest's customer record — then attaches the channel ID, the channel's reservation ID and the channel commission to the reservation.

Duplicate-safe & oversell-proof

Bookings already imported (matched by the channel's reservation ID) are skipped, and every pull returns a clear summary — "X new / Y duplicates / Z failed." Inbound OTA reservations land as confirmed and immediately consume sellable inventory, preventing oversell.

Push rates & inventory (outbound)

Send current rates and availability out to a channel for a chosen date window, with a returned summary of rows pushed. Per-channel commission is recorded on every channel and carried onto imported reservations, so you always know the true net value of OTA business.

// SYNC LOG & AUDIT TRAIL

Every exchange, logged and searchable.

Every inbound and outbound exchange is written to a per-channel sync log — so you can always see what happened, when, and why.

Full detail per row — timestamp, direction, event type, status (success / failed / pending), a reference key and a human-readable summary — or the error message on failure.
Filter & refresh — filter the log by status and direction; the most recent events surface first, with a one-click refresh.
Last pulled / last pushed — timestamps are shown on each channel card at a glance.
Sync Log · All channels ↻ REFRESH
All Inbound Outbound Failed
IN ✓ Booking.com · pull_reservations — 12 new / 4 dup 2m
OUT ✓ Expedia · push_rates — 310 rows 5m
IN ✓ Airbnb · pull_reservations — 3 new 1m
OUT ✕ Agoda · push_inventory — auth failed 18m
OUT … SiteMinder · push_rates — pending now
// UNIVERSAL iCAL ENGINE

Stop cross-platform double-bookings — no partnership needed.

The built-in iCalendar engine works in both directions and is production-ready today. Publish one tokenized feed to every OTA, and read their calendars back in as availability holds.

Published iCal Feed · Grand Riviera ~180 DAYS
TOKENIZED FEED URL
https://e.eloerp.net/ical/grand-riviera/feed/8f3a··c1e7.ics
Copy Rotate token
BEGIN:VEVENT
SUMMARY:Reserved
DTSTART;VALUE=DATE:20260707
DTEND;VALUE=DATE:20260710
UID:elopms-RES-42@elopms
END:VEVENT
RFC 5545 CRLF endings 75-octet folding NO PII

Publish your availability (export)

The PMS publishes a per-property iCal feed at a tokenized URL. Paste this one URL into the "import calendar" field of every OTA — Airbnb, Booking.com, Vrbo, Agoda and any other iCal-aware platform — and they poll it on their own schedule, blocking your reserved dates automatically. It publishes the next ~180 days of confirmed, checked-in and checked-out reservations as all-day "Reserved" blocks; no guest personal data ever leaves the feed — only blocked date ranges and an internal reservation reference.

Rotate & standards-compliant

Generate or rotate the feed token with one click — rotating instantly invalidates the old URL — and a copy button makes distribution to each OTA effortless. Output is standards-compliant RFC 5545 iCalendar with correct CRLF line endings, 75-octet line folding and exclusive DTEND semantics that match hotel check-out dates.

Read OTA calendars (import)

Add each OTA's iCal export URL as an inbound feed, tagged with a name and mapped to one of your room types. EloERP fetches those feeds, parses the blocked ranges and creates channel-block reservations so the nights drop out of your sellable inventory. Fetching is robust — connection timeouts, automatic retries and a custom user agent — and a single unreachable feed is logged and skipped without breaking the rest of the sync.

Loop-safe & PII-free

The importer recognizes and ignores blocks that originated from EloERP's own published feed, so re-imported events never create phantom bookings. iCal blocks are treated purely as availability holds — no money or guest PII — keeping the calendar the single source of truth across every platform.

// EVERYTHING IN THE BOX

The full distribution capability list.

Every capability of the Channel Manager and iCal sync engine, at a glance.

One-screen controlEvery channel managed here, each scoped to a property
Native OTA connectorsBooking.com CPP, Expedia EQC, Agoda YCS, Airbnb, SiteMinder
Extra channelsUniversal iCal, commission-free Direct Website, generic Other
Add in secondsPlatform, display name, commission %, active toggle
Adapter-aware formsRight fields per platform, inline help, no JSON editing
Sandbox toggleValidate against staging endpoints before going live
Rotate one credentialDeep-merge keeps the rest of the key set intact
Credential securitySecrets never returned; stored values shown masked
Test ConnectionLive HTTP + auth + parse; prompts if credentials missing
Pause & reactivateInstant; paused channels keep mappings and history
Room-type mappingTo the OTA's room ID, optional OTA room-name label
Rate-plan mappingAutomatic BAR fallback for any unmapped rate
Inline row editsIndividual save; each mapping active or removed
Live countsRoom mappings, rate mappings and sync events per channel
Pull reservationsCreates booking, maps room, resolves rate, finds guest
Provenance taggedChannel ID, reservation ID & commission on every import
Duplicate-safe importsMatched by reservation ID; X new / Y dup / Z failed
Oversell protectionInbound bookings land confirmed and consume inventory
Push rates & inventoryOutbound for a chosen window, with rows-pushed summary
Commission trackingPer-channel, for the true net value of OTA business
Per-channel sync logTimestamp, direction, event, status, ref key, summary
Log filtersBy status and direction, most-recent-first, one-click refresh
Sync timestampsLast-pulled and last-pushed on every channel card
Tokenized iCal feedNext ~180 days as all-day Reserved blocks
No guest PIIFeed carries only blocked ranges and a reservation ref
Token rotationOne click invalidates the old URL; copy button included
RFC 5545 outputCRLF endings, 75-octet folding, exclusive DTEND
Import iCal feedsTagged and mapped to a room type as channel-block holds
Robust fetchingTimeouts, retries, custom UA; unreachable feeds skipped
Loop-safe importerIgnores EloERP's own feed blocks; iCal as holds only
// KEEP EXPLORING

Distribution connects to everything.

Fill every room, from every channel.

Connect your OTA accounts, sync availability everywhere over iCal, and watch every booking flow into one ledger — see it running on your own property in minutes.

Start Free Trial Schedule a demo
Schedule a demo