For PMS, channel managers and booking platforms

iCal Polling & Calendar Webhook Infrastructure

Your users connect Airbnb, Booking.com, VRBO and Google Calendar feeds. YourCals polls them, diffs the .ics, and POSTs a parsed, signed JSON delta to your endpoint — so your workers stay idle until something actually changes.

Production workspace

All feeds healthy

1,284 feeds · 24 provider accounts · 96 polls/day each

Changes · 24 h
312
Largest feed · 24 h
42
Poll requests · 24 h
123,264
  • Acme12 calendars · 3 channels+4 eventsjust now
  • HolidayRental38 apartments · Hostaway+11 events2 min ago
  • Trip.com3 locations · Google Calendarno change18 min ago
  • Tripadvisor5 gîtes · Alloggioprovider slowbackoff 10m
POSThttps://api.yourplatform.com/hooks/ical200 OK · signature verifiedp95 detection 41 s
Platform monitoring panel. One workspace watching 1,284 iCal feeds through 24 provider accounts. In the last 24 hours it detected 312 changes, its largest single calendar moved 42 times, and 96.1% of its poll requests were answered with a 304. Four of the monitored accounts are listed — Acme, HolidayRental, Trip.com and Tripadvisor — with Tripadvisor in backoff after a slow provider. The last webhook delivery to https://api.yourplatform.com/hooks/ical returned 200 OK with a verified signature.

Most polls find nothing. You pay for every one.

Your workers ask every provider “anything new?” around 96 times a day. YourCals takes that traffic over — conditional requests, retries and backoff — and POSTs a signed delta only when a calendar really moved.

Your cron worker*/15 * * * *parse → diff → writeAirbnb .icsBooking.com .icsVRBO .icsGET full file · 200 OK~96 polls / day / feedmost of them: nothing new
TodayEvery poll costs a full round trip, a parse and often a DB write — to learn that nothing happened. You also own the retries, backoff and rate limits.
Airbnb .icsBooking.com .icsVRBO .icsYourCalsETag · 304 · diffretry · backoffYour APIPOST /hooks/icalconditional GET → 304signed JSON deltayour cron — skips connectedproperties, stays idle
With YourCalsUnchanged feeds stop at a cheap 304. When something moves, one signed JSON delta (added / modified / deleted) hits your endpoint. Your cron stays as a fallback for properties not yet connected.
Read the migration guide

Built for feeds you do not control

YourCals takes over the recurring HTTP traffic, the backoff loops and the .ics diffing your workers are doing today. You get a signed JSON delta when something really changed, and silence when nothing did.

Stop paying for unchanged polls

An always-on ICS feed monitor: conditional requests with ETag and Last-Modified mean a feed that has not moved answers 304, so the wasted round trip never becomes a wasted parse, a wasted write or a worker job.

Never parse raw .ics again

iCal parsing and calendar diff detection are ours to maintain. You receive added, modified and deleted events as JSON — or just the fact that something changed, if that is all you need. No recurring-rule edge cases, no parser to keep alive.

One fetch, many subscribers

When several of your users connect the same public calendar, we poll it once and notify every listener. The same infrastructure carries a few thousand feeds or a million subscriptions.

Reliable by construction

Written in Go. HMAC-SHA256 signed deliveries, SSRF checks on every fetch, webhook delivery retry with backoff, and a circuit breaker that stops hammering an endpoint which is already down.

How the ingestion works

You register a feed once. YourCals takes over the traffic, the parsing and the delivery.

  1. Register the URLs your users connect

    Pass us the third-party iCal or webcal URLs your users connected — Airbnb, Booking.com, VRBO, Google Calendar. PMS integration is a single API call: nothing changes on the provider's side and nothing new runs on yours.

  2. We poll and buffer in the background

    YourCals handles the recurring HTTP traffic, ETag caching, backoff and rate limits. Your application servers stay idle until a calendar actually moves.

  3. Receive a pre-parsed JSON delta

    When a booking or reservation changes, we diff the .ics snapshot and POST the change set — signed — to your endpoint.

No VCALENDAR string ever reaches your endpoint. We parse the snapshot and send only what moved.

ical.changed — parsed delta
{
  "event": "ical.changed",
  "subscription_id": "8f2c1d4a-6b3e-4c9a-9d21-7a5e0b6c3f18",
  "external_id": "team-calendar",
  "ical_url": "https://example.com/team.ics",
  "timestamp": "2026-10-02T08:00:12Z",
  "changes": {
    "added": [
      {
        "uid": "[email protected]",
        "summary": "Team sync",
        "location": "Zoom",
        "dtstart": "2026-10-02T08:00:00Z",
        "dtend": "2026-10-02T08:30:00Z"
      }
    ],
    "modified": [],
    "deleted": []
  }
}

Deliveries are signed with HMAC-SHA256 over the timestamp and the raw body, in the X-Hub-Signature-256 header. Receivers reject anything older than five minutes, so a captured delivery cannot be replayed.

Pricing that follows your feeds

Pick a plan by how many feeds you watch. Webhook deliveries are never metered: there is no charge per notification and no charge per poll.

Free

€0per month

€0 per feed / month

Enough for side projects and a first integration.

  • 1 project
  • Up to 300 feeds
  • 15-minute polling
  • Signed webhooks
Start free

Starter

Most popular

€39per month

€399/ yearSave 15%

€399 for twelve months instead of €468 — you save €69

€0.013 per feed / month

For products that watch feeds on behalf of their customers.

  • Up to 3,000 feeds
  • Adaptive polling
  • Notify-only or content payloads
  • Scheduled downtime windows
Choose Starter

Growth

€99per month

€999/ yearSave 16%

€999 for twelve months instead of €1188 — you save €189

€0.0099 per feed / month

For a production catalogue of calendars, not a first integration.

  • Up to 10,000 feeds
  • Adaptive polling
  • Notify-only or content payloads
  • Scheduled downtime windows
Choose Growth

Enterprise

Customvolume pricing

For feed volumes where a listed price stops being the point.

  • Above 10,000 feeds
  • Volume pricing
  • Data processing agreement
  • Priority support
Talk to us

Annual billing is charged once for twelve months and saves 15% on Starter and 16% on Growth. Every plan includes unlimited signed deliveries — you pay for feeds, not for notifications.

Frequently asked questions

The answers that come up most often before a first integration.

Something missing? Ask us directly.

How often does YourCals poll iCal feeds?

Polling frequencies depend on your plan, ranging from real-time dynamic intervals to scheduled background syncs.

What happens when a calendar event changes?

YourCals detects the diff/delta in the iCal feed and instantly triggers an HTTP POST webhook payload to your endpoint.

We already poll feeds in our own workers. Why move?

Because most of that traffic buys you nothing: an unchanged feed still costs a full round trip and a parse to learn that nothing happened. YourCals keeps the validator state per feed, so an unchanged calendar stops at a 304 and only real changes reach your API. The crons, the retry queues and the parser go with it.

What has to change on our side?

An endpoint that accepts a POST and verifies our signature. Everything else is ours: registering feeds through the API or the dashboard, polling them, validating the response, diffing it and delivering the change set. The calendar providers never hear from you.

How does billing work?

Monthly or annually, per plan, in euros. The annual price is charged once for twelve months and saves 15% on Starter and 16% on Growth. Webhook deliveries are never metered, so a calendar that moves every hour costs the same as one that never moves.

What counts as a feed?

One iCal or webcal URL, wherever it comes from. If several of your users connect the same public calendar, YourCals fetches it once and notifies each of them, so a popular calendar is not polled once per subscriber.

Do you store calendar data?

By default YourCals stores only a hash of each feed. Notify-only mode sends the event name and the feed URL, and nothing from inside the events, which keeps the default plan's data scope minimal.

What happens when a provider goes down?

Nothing is sent. A failed, empty or non-calendar response is treated as missing data rather than as an empty calendar, the feed is paused, and we try again on schedule.

How are webhooks authenticated?

Each delivery is signed with HMAC-SHA256 over the timestamp and the raw body, and sent in the X-Hub-Signature-256 header as t=<unix>,v1=<hex digest>. Your receiver recomputes the digest and rejects timestamps older than five minutes, which is what closes the replay window.

Can I sign in with Google or GitHub?

Yes. Email sign-up works too, with a one-time code sent to your phone or email to verify the account.

Move the polling out of your stack.

Create a project, register one feed, and watch the first signed JSON delta land. Free for your first 300 feeds, no card required.

Start free